Linux操作系统本章内容进程管理存储管理文.ppt
上传人:天马****23 上传时间:2024-09-11 格式:PPT 页数:28 大小:181KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

Linux操作系统本章内容进程管理存储管理文.ppt

Linux操作系统本章内容进程管理存储管理文.ppt

预览

免费试读已结束,剩余 18 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

10.1.1进程与进程描述符1.进程概念2.进程描述符(进程控制块)由一个task_struct结构表示。task_struct结构是一个复杂的结构,占一千多字节,其各个成员用来准确描述进程在各方面的信息.主要有以下几个部分:(1)进程标识包括进程的标识号(pid)、进程的用户标识、进程的组标识等。每个进程的标识号是惟一的。(2)调度相关信息这部分内容与进程调度有关,一部分信息见后面的第5节。进程描述符中还需要有结构保存当进程被换出时寄存器的状态,该进程恢复运行时便可从正确的状态开始继续运行。(3)进程虚拟空间信息Linux的进程都在自己的私有地址空间中运行,task_struct的成员mm指向一个mm_struct结构,该结构描述进程空间。(4)信号处理信息Linux支持传统的UNIX信号语义。该部分记录了信号的处理函数及信号掩码等信息。(5)文件相关信息包含进程与文件系统交互的信息。这里主要分为两部分,一部分描述进程进行文件访问时用到的当前目录、根目录信息。另一部分描述被进程正在使用的文件信息,该部分主要有一个file结构数组,数组中的有效项指向某个文件对象。(6)记账信息及统计信息资源是有限的,每个进程对每种资源的使用都有一个限值。另外,还有统计信息来记录系统需要的信息,如页面异常次数、CPU使用时间等。(7)描述进程间关系的指针10.1.2核心态与核心栈因为进程描述符已经占用了1KB多的空间,所以核心栈的有效空间是6KB多一点,合理的设计使得这个容量已经足够了。核心栈与进程描述符如图10-1所示。10.1.3进程状态及状态转换图Linux的进程状态有五种,它们分别是:TASK_STOPPED:进程处于暂停状态,主要用于调试目的。如正在运行的进程收到SIGSTOP信号将进入TASK_STOPPED状态。TASK_ZOMBIE:表示进程已经结束运行并释放了大部分占用的资源,但task_struct结构还未被释放。10.1.4进程的切换时机当前进程放弃CPU的情况可以分为两种。一、进程主动地放弃CPU这种情况大体可以分为两类:1.隐式地主动放弃CPU。往往是因为需要的资源目前不能获取,如执行read(),select()等系统调用的过程中,这种情况下的处理过程如下:1)将进程加入合适的等待队列。2)把当前进程的状态改为TASK_INTERRUTIBLE或TASK_UNINTERRUTIBLE。3)调用schedule()函数,该函数的执行结果往往是当前进程放弃CPU。4)检查资源是否可用,如果不可用,则跳转到第Ⅱ步.5)资源已可用,将该进程从等待队列中移去。进程的调度时机进程的调度时机分成两种情形:例如,进程被动放弃CPU的情形。当进程描述符的need_resched被置1时,并不立即直接调用schedule()调度函数。而是在随后的某个时刻,当进程从内核态返回用户态之前检查need_resched是否为1,如果为1,则调用schedule()调度函数。10.1.5进程的调度算法核心函数是schedule(),该函数的任务是选出一个可运行的进程。1.进程描述符有如下成员与调度有关:1)policy标识进程的调度策略。SCHED_OTHER普通进程;SCHED_FIFO实时进程,采用先进先出的调度算法;SCHED_RR实时进程,采用轮转法。2)rt_priority实时进程的优先级,普通进程不使用这个成员;3)nice普通进程的优先级;4)counter进程目前的CPU时间配额。3.schedule()函数执行过程:1)检查是否有软中断服务请求,如果有,则先执行这些请求。2)若当前进程调度策略是SCHED_RR,且counter为0,则将该进程移到可执行进程队列的尾部并对counter重新赋值。3)检查当前进程的状态,如为TASK_INTERRUPTIBLE,且该进程有信号接收,则将进程状态置为TASK_RUNNING。4)当前进程的状态不是TASK_RUNNING,则将其从可执行进程队列中移出,然后将当前进程描述符的need_resched恢复成0。5)现在进入了函数的核心部分。可运行进程队列的每个进程都将被计算出一个权值,主要是利用goodness()函数,讨论见后。最终最大的权值保存在变量c中,与之对应的进程描述符保存在变量next中。6)检查c是否为0。若为0则表明所有可执行进程的时间配额都已用完,因而对所有进程的counter重新“充电”,然后重新执行第5)步。7)如果next进程就是当前进程,则结束shedule()的运行。否则进行进程切换,CPU改由next进程占据。4.go