Linux操作系统进程管理.ppt
《Linux操作系统进程管理.ppt》由会员分享,可在线阅读,更多相关《Linux操作系统进程管理.ppt(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第1010章章 Linux Linux操作系统操作系统本章内容:本章内容:进程管理进程管理,存储管理存储管理,文件系统,文件系统,设备管理,中断、异常及系统调设备管理,中断、异常及系统调 用,进程通信。用,进程通信。10.110.1 进程管理 内容内容 进程描述符;进程描述符;进程的调度时机及调度算法;进程的调度时机及调度算法;进程的创建与消亡。进程的创建与消亡。10.1.1 10.1.1 进程与进程描述符进程与进程描述符 1.1.进程概念进程概念 2.2.进程描述符进程描述符(进程控制块进程控制块)由一个由一个task_structtask_struct结构表示。结构表示。task_str
2、ucttask_struct结构是一个复杂的结构,占一千多字节,其各个结构是一个复杂的结构,占一千多字节,其各个成员用来准确描述进程在各方面的信息成员用来准确描述进程在各方面的信息.主要有以主要有以下几个部分:下几个部分:LinuxLinux进程与传统进程与传统UNIXUNIX进程的概念没有多进程的概念没有多大区别;大区别;没有真正意义上的线程概念。但没有真正意义上的线程概念。但LinuxLinux通通过过cloneclone()()系统调用支持轻权进程系统调用支持轻权进程;Linux Linux还支持内核线程的概念,内核线程还支持内核线程的概念,内核线程永远在核心态运行,没有用户空间。永远在
3、核心态运行,没有用户空间。(1)(1)进程标识进程标识 包包括括进进程程的的标标识识号号(pidpid)、进进程程的的用用户户标标识识、进程的组标识等。每个进程的标识号是惟一的。进程的组标识等。每个进程的标识号是惟一的。(2)(2)调度相关信息调度相关信息 这这部部分分内内容容与与进进程程调调度度有有关关,一一部部分分信信息息见见后后面面的的第第5 5节节。进进程程描描述述符符中中还还需需要要有有结结构构保保存存当当进进程程被被换换出出时时寄寄存存器器的的状状态态,该该进进程程恢恢复复运运行行时时便便可从正确的状态开始继续运行。可从正确的状态开始继续运行。(3)(3)进程虚拟空间信息进程虚拟空
4、间信息 LinuxLinux的的进进程程都都在在自自己己的的私私有有地地址址空空间间中中运运行行,task_structtask_struct的的成成员员mmmm指指向向一一个个mm_structmm_struct结结构构,该结构描述进程空间。该结构描述进程空间。(4)(4)信号处理信息信号处理信息 LinuxLinux支支持持传传统统的的UNIXUNIX信信号号语语义义。该该部部分分记记录录了信号的处理函数及信号掩码等信息。了信号的处理函数及信号掩码等信息。(5)(5)文件相关信息文件相关信息 包含进程与文件系统交互的信息。这里主要分包含进程与文件系统交互的信息。这里主要分为两部分,一部分描
5、述进程进行文件访问时用到为两部分,一部分描述进程进行文件访问时用到的当前目录、根目录信息。另一部分描述被进程的当前目录、根目录信息。另一部分描述被进程正在使用的文件信息,该部分主要有一个正在使用的文件信息,该部分主要有一个filefile结结构数组,数组中的有效项指向某个文件对象。构数组,数组中的有效项指向某个文件对象。(6)(6)记账信息及统计信息记账信息及统计信息 资资源源是是有有限限的的,每每个个进进程程对对每每种种资资源源的的使使用用都都有有一一个个限限值值。另另外外,还还有有统统计计信信息息来来记记录录系系统统需需要的信息,如页面异常次数、要的信息,如页面异常次数、CPUCPU使用时
6、间等。使用时间等。(7)描述进程间关系的指针描述进程间关系的指针 所所有有的的进进程程通通过过一一个个双双向向链链表表链链接接在在一一起起。通过宏通过宏for_each_taskfor_each_task可以对每个进程操作。可以对每个进程操作。指指向向其其父父进进程程、子子进进程程、兄兄弟弟进进程程描描述述符符的的指针。指针。需需要要根根据据pidpid号号能能够够快快速速找找到到进进程程,系系统统以以pidpid为为关关键键字字建建立立了了一一个个哈哈希希表表,哈哈希希函函数数值值相相同同的的进进程程通通过过进进程程描描述述符符的的pidhash_nextpidhash_next和和pidh
7、ash_pprevpidhash_pprev成员链在一起。成员链在一起。10.1.2 10.1.2 核心态与核心栈核心态与核心栈union task_union union task_union struct task_struct task;struct task_struct task;unsigned long stack2048;unsigned long stack2048;LinuxLinux的运行分为两种模式的运行分为两种模式核心态和用核心态和用户态。内核总在核心态下运行,而普通进程户态。内核总在核心态下运行,而普通进程通常在用户模式下运行,只有通过系统调用通常在用户模式下运行,
8、只有通过系统调用才能切换到核心态运行。才能切换到核心态运行。进程拥有两个栈,用户模式栈与核心模式进程拥有两个栈,用户模式栈与核心模式栈,分别在相应模式下使用。进程描述符和栈,分别在相应模式下使用。进程描述符和进程核心栈的空间分配在一起,内核为它们进程核心栈的空间分配在一起,内核为它们分配两个连续的物理页面。分配两个连续的物理页面。因因为为进进程程描描述述符符已已经经占占用用了了1KB1KB多多的的空空间间,所所以以核核心心栈栈的的有有效效空空间间是是6KB6KB多多一一点点,合合理理的的设设计计使使得得这这个个容容量量已已经经足足够够了了。核核心心栈栈与与进进程程描描述述符符如如图图10101
9、 1所示。所示。两个物理页帧两个物理页帧 8KB 8KB进程描述符进程描述符核心模式栈核心模式栈图图10101 1 核心栈与进程描述符核心栈与进程描述符栈自顶向下增长栈自顶向下增长 进程状态及状态转换图进程状态及状态转换图 LinuxLinux的进程状态有五种,它们分别是:的进程状态有五种,它们分别是:TASK_RUNNINGTASK_RUNNING:表表示示进进程程具具备备运运行行的的资资格格,要要么么正正在在运运行行,要要么么就就是是等等待待被被调调度度执执行行。进进程程描描述述符符有有一一个个run_listrun_list成成员员,所所有有处处于于TASK_RUNNINGTASK_RU
10、NNING状状态态的的进进程程都都通通过过该该成成员员链在一起,称之为链在一起,称之为可运行队列可运行队列。TASK_INTERRUPTIBLETASK_INTERRUPTIBLE和和TASK_UNINTERRUP-TASK_UNINTERRUP-TIBLETIBLE:这这两两种种状状态态均均表表示示进进程程处处于于睡睡眠眠状状态态。TASK_INTERRUPTIBLETASK_INTERRUPTIBLE除除了了资资源源满满足足时时可可以以被被唤唤醒醒外外,还还可可以以被被信信号号唤唤醒醒,而而TASK_UNINTERRUPTIBLETASK_UNINTERRUPTIBLE就不行。就不行。TA
11、SK_STOPPEDTASK_STOPPED:进进程程处处于于暂暂停停状状态态,主主要要用用于于调调试试目目的的。如如正正在在运运行行的的进进程程收收到到SIGSTOPSIGSTOP信号将进入信号将进入TASK_STOPPEDTASK_STOPPED状态。状态。TASK_ZOMBIETASK_ZOMBIE:表表示示进进程程已已经经结结束束运运行行并并释释放放了了大大部部分分占占用用的的资资源源,但但task_structtask_struct结构还未被释放。结构还未被释放。10.1.4 10.1.4 进程的切换时机进程的切换时机当前进程放弃当前进程放弃CPUCPU的情况可以分为两种。的情况可以
12、分为两种。一、进程主动地放弃一、进程主动地放弃CPUCPU 这种情况这种情况大体可以分为两类:大体可以分为两类:1.1.隐式地主动放弃隐式地主动放弃CPUCPU。往往是因为需要的资往往是因为需要的资源目前不能获取,如执行源目前不能获取,如执行read(),select()read(),select()等系等系统调用的过程中统调用的过程中,这种情况下的处理过程如下:这种情况下的处理过程如下:1)1)将进程加入合适的等待队列。将进程加入合适的等待队列。2)2)把当前进程的状态改为把当前进程的状态改为TASK_INTERRUTIBLETASK_INTERRUTIBLE或或TASK_UNINTERRU
13、TIBLETASK_UNINTERRUTIBLE。3)3)调用调用schedule()schedule()函数,该函数的执行结果函数,该函数的执行结果往往是当前进程放弃往往是当前进程放弃CPUCPU。4)4)检查资源是否可用,如果不可用,则跳转到检查资源是否可用,如果不可用,则跳转到第第步步.5)5)资源已可用,将该进程从等待队列中移去。资源已可用,将该进程从等待队列中移去。2.2.进进程程显显式式地地主主动动放放弃弃CPUCPU,如如系系统统调调用用sched_yieldsched_yield(),sched_setscheduler(),(),sched_setscheduler(),pa
14、use(pause()及及nanosleepnanosleep()均均会会导导致致当当前前进进程程让让出出CPUCPU。二、进程被动放弃二、进程被动放弃CPUCPU 两种情形均会导致当前进程描述符的两种情形均会导致当前进程描述符的need_re-need_re-schedsched被置被置1 1。当前进程的时间片已经用完;当前进程的时间片已经用完;刚被唤醒进程的优先级别高于当前进程。刚被唤醒进程的优先级别高于当前进程。进程的调度时机进程的调度时机 进程的调度时机分成两种情形:进程的调度时机分成两种情形:例如,进程被动放弃例如,进程被动放弃CPUCPU的情形。当进程的情形。当进程描述符的描述符的
15、need_reschedneed_resched被置被置1 1时,并不立即时,并不立即直接调用直接调用scheduleschedule()()调度函数。而是在随调度函数。而是在随后的某个时刻,当进程从内核态返回用户态后的某个时刻,当进程从内核态返回用户态之前检查之前检查need_reschedneed_resched是否为是否为1 1,如果为,如果为1 1,则调用则调用scheduleschedule()()调度函数。调度函数。直接调用直接调用scheduleschedule()()调度函数,调度函数,例如进程主动放弃例如进程主动放弃CPUCPU的第一类情形;的第一类情形;间接调用间接调用sc
16、heduleschedule()。()。10.1.5 10.1.5 进程的调度算法进程的调度算法 核核心心函函数数是是schedule(schedule(),),该该函函数数的的任任务务是选出一个可运行的进程。是选出一个可运行的进程。1.1.进程描述符有如下成员与调度有关:进程描述符有如下成员与调度有关:1)policy 1)policy 标识进程的调度策略。标识进程的调度策略。SCHED_OTHER SCHED_OTHER 普通进程;普通进程;SCHED_FIFO SCHED_FIFO 实时进程,采用先进先实时进程,采用先进先 出的调度算法;出的调度算法;SCHED_RR SCHED_RR
17、实时进程,采用轮转法实时进程,采用轮转法。2)rt_priority 2)rt_priority 实时进程的优先级实时进程的优先级,普通进普通进 程不使用这个成员程不使用这个成员;3)nice 3)nice 普通进程的优先级普通进程的优先级;4)counter 4)counter 进程目前的进程目前的CPUCPU时间配额。时间配额。2.2.对于普通进程来讲对于普通进程来讲CPUCPU时间的分配是典时间的分配是典型的时分策略。型的时分策略。在某个时刻,运行队列中的每个进程都有一个在某个时刻,运行队列中的每个进程都有一个countercounter值,当所有运行队列中的值,当所有运行队列中的cou
18、ntercounter值都变为值都变为0 0以后,表明一轮已经结束,每个进程的以后,表明一轮已经结束,每个进程的countercounter根根据其据其nicenice重新赋值,开始新的一轮执行过程。拥有重新赋值,开始新的一轮执行过程。拥有CPUCPU的进程每次时钟中断的进程每次时钟中断countercounter值减一。值减一。()函数执行过程:()函数执行过程:1)1)检查是否有软中断服务请求,如果有,检查是否有软中断服务请求,如果有,则先执行这些请求。则先执行这些请求。2)2)若当前进程调度策略是若当前进程调度策略是SCHED_RRSCHED_RR,且且 countercounter为为
19、0 0,则将该进程移到可执行进程队列,则将该进程移到可执行进程队列的尾部并对的尾部并对countercounter重新赋值。重新赋值。3)3)检查当前进程的状态,如为检查当前进程的状态,如为 TASK_INTERRUPTIBLETASK_INTERRUPTIBLE,且该进程有信号接收,且该进程有信号接收,则将进程状态置为则将进程状态置为 TASK_RUNNING TASK_RUNNING。4)4)当前进程的状态不是当前进程的状态不是TASK_RUNNINGTASK_RUNNING,则,则将其从可执行进程队列中移出,然后将当前进将其从可执行进程队列中移出,然后将当前进程描述符的程描述符的need
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 操作系统 进程 管理
限制150内