欢迎来到天天文库
浏览记录
ID:55829049
大小:253.00 KB
页数:30页
时间:2020-06-09
《Linux操作系统 进程管理.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第10章Linux操作系统本章内容:进程管理,存储管理,文件系统,设备管理,中断、异常及系统调用,进程通信。10.1进程管理内容进程描述符;进程的调度时机及调度算法;进程的创建与消亡。10.1.1进程与进程描述符1.进程概念2.进程描述符(进程控制块)由一个task_struct结构表示。task_struct结构是一个复杂的结构,占一千多字节,其各个成员用来准确描述进程在各方面的信息.主要有以下几个部分:Linux进程与传统UNIX进程的概念没有多大区别;没有真正意义上的线程概念。但Linux通过clone()系统调用支持轻权进程;Linux还支持内核线程的概念,内
2、核线程永远在核心态运行,没有用户空间。(1)进程标识包括进程的标识号(pid)、进程的用户标识、进程的组标识等。每个进程的标识号是惟一的。(2)调度相关信息这部分内容与进程调度有关,一部分信息见后面的第5节。进程描述符中还需要有结构保存当进程被换出时寄存器的状态,该进程恢复运行时便可从正确的状态开始继续运行。(3)进程虚拟空间信息Linux的进程都在自己的私有地址空间中运行,task_struct的成员mm指向一个mm_struct结构,该结构描述进程空间。(4)信号处理信息Linux支持传统的UNIX信号语义。该部分记录了信号的处理函数及信号掩码等信息。(5)文件相
3、关信息包含进程与文件系统交互的信息。这里主要分为两部分,一部分描述进程进行文件访问时用到的当前目录、根目录信息。另一部分描述被进程正在使用的文件信息,该部分主要有一个file结构数组,数组中的有效项指向某个文件对象。(6)记账信息及统计信息资源是有限的,每个进程对每种资源的使用都有一个限值。另外,还有统计信息来记录系统需要的信息,如页面异常次数、CPU使用时间等。(7)描述进程间关系的指针所有的进程通过一个双向链表链接在一起。通过宏for_each_task可以对每个进程操作。指向其父进程、子进程、兄弟进程描述符的指针。需要根据pid号能够快速找到进程,系统以pid为
4、关键字建立了一个哈希表,哈希函数值相同的进程通过进程描述符的pidhash_next和pidhash_pprev成员链在一起。10.1.2核心态与核心栈uniontask_union{structtask_structtask;unsignedlongstack[2048];};Linux的运行分为两种模式──核心态和用户态。内核总在核心态下运行,而普通进程通常在用户模式下运行,只有通过系统调用才能切换到核心态运行。进程拥有两个栈,用户模式栈与核心模式栈,分别在相应模式下使用。进程描述符和进程核心栈的空间分配在一起,内核为它们分配两个连续的物理页面。因为进程描述符已经
5、占用了1KB多的空间,所以核心栈的有效空间是6KB多一点,合理的设计使得这个容量已经足够了。核心栈与进程描述符如图10-1所示。两个物理页帧8KB进程描述符核心模式栈图10-1核心栈与进程描述符栈自顶向下增长10.1.3进程状态及状态转换图Linux的进程状态有五种,它们分别是:TASK_RUNNING:表示进程具备运行的资格,要么正在运行,要么就是等待被调度执行。进程描述符有一个run_list成员,所有处于TASK_RUNNING状态的进程都通过该成员链在一起,称之为可运行队列。TASK_INTERRUPTIBLE和TASK_UNINTERRUP-TIBLE:这两
6、种状态均表示进程处于睡眠状态。TASK_INTERRUPTIBLE除了资源满足时可以被唤醒外,还可以被信号唤醒,而TASK_UNINTERRUPTIBLE就不行。TASK_STOPPED:进程处于暂停状态,主要用于调试目的。如正在运行的进程收到SIGSTOP信号将进入TASK_STOPPED状态。TASK_ZOMBIE:表示进程已经结束运行并释放了大部分占用的资源,但task_struct结构还未被释放。10.1.4进程的切换时机当前进程放弃CPU的情况可以分为两种。一、进程主动地放弃CPU这种情况大体可以分为两类:1.隐式地主动放弃CPU。往往是因为需要的资源目前不
7、能获取,如执行read(),select()等系统调用的过程中,这种情况下的处理过程如下:1)将进程加入合适的等待队列。2)把当前进程的状态改为TASK_INTERRUTIBLE或TASK_UNINTERRUTIBLE。3)调用schedule()函数,该函数的执行结果往往是当前进程放弃CPU。4)检查资源是否可用,如果不可用,则跳转到第Ⅱ步.5)资源已可用,将该进程从等待队列中移去。2.进程显式地主动放弃CPU,如系统调用sched_yield(),sched_setscheduler(),pause()及nanosleep()均会导致当前进程让出
此文档下载收益归作者所有