您的位置:首页 > 运维架构 > Linux

第十二学 linux内核——进程管理——进程控制块的内容(1)

2013-06-04 09:14 260 查看
我们在介绍list.h文件时说道,linux是把所有的进程组织成双向链表来管理的,这个双向链表中的每个节点就是一个叫task_struct的数据结构,这个数据结构被叫做进程控制块(PCB),也叫进程描述符。该结构定义在<linux/sched.h>文件中。进程控制块中包含一个具体进程的所有信息,它大概包含以下信息:

struct task_struct {
/*
* 1> 状态信息——描述进程的动态变化,如就绪态、等待态、僵死态等。
* 2> 亲属关系——描述进程的亲属关系,如祖父进程、父进程、养父进程、子进程、兄进程、孙进程等。
* 3> 各种标识符——如进程标识符、用户标识符等等用来标识一个进程的数字。
* 4> 进程间通信信息——描述多个进程在同一任务上协作工作,如管道、消息队列、共享内存、套接字等。
* 5> 时间和定时器信息——描述进程在生存周期内使用CPU时间的统计、计费等信息。
* 6> 调度信息——描述进程的优先级、调度策略等信息,如静态优先级、动态优先级、时间片轮转、高优先级以及多级反馈队列等的调度策略。
* 7> 文件系统信息——对进程使用文件情况进行记录,如文件描述符、系统打开文件表、用户打开文件表等。
* 8> 虚拟内存信息——描述每个进程拥有的地址空间,也就是进程编译连接后形成的空间,这里肯定用到前边提到的分页机制。
* 9> 处理器环境信息——描述进程的执行环境(处理器的各种寄存器及堆栈等),这是体现进程动态变化的最主要的场景。
*/
};

task_sruct相对较大,在32位机器上,它大约有1.7KB。但如果考虑到该结构体包含了内核管理一个进程所需的所有信息,那么它的大小也算相当小了。在进程的真个生命周期中,系统(也就是内核)总是通过PCB内进程进行控制的,也就是说,系统是根据进程的PCB来感知进程存在的。例如:当内核要调度某进程执行时,要从该进程的PCB查出其运行状态和优先级;在某进程被选中投入运行时,要从其PCB中取出其处理机环境信息,恢复其运行现场;进程在执行过程中,当需要和与之合作的进程实现同步、通信或访问文件时,也要访问PCB;当进程因某种原因暂停执行时,得将其断点的处理机环境保存在PCB中。所以说,PCB唯一标识一个进程的存在。

当系统创建一个新的进程时,就为它建立一个PCB,进程结束时又收回其PCB,进程就随之消亡。PCB是内核中被频繁读写的数据结构,故应常驻内存。

进程也叫任务。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: