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

linux内核设计与实现【第三版】摘记----第三章:进程管理

2014-03-02 13:10 288 查看

进程:

现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存。【在线程之间可以共享虚拟内存,但却都各自拥有虚拟处理器】

进程:是处于执行期的程序以及相关的资源的综合。

多个进程可能运行的是同一段程序,比如一个电灯的程序,可以通过创建线程来实现重复的电灯操作。

使用exec()这组函数可以在fork之后创建新的地址空间,并把程序载入其中。fork实际上是由clone系统调用实现。

使用exit系统调用退出执行,即使他会终结进程并将其占用的资源释放掉,但他仍是一个僵死进程,一些关于这个进程的描述符还是保存着,直到它的父进程调用wait()或waitpid()为止。

进程描述符以及任务结构:

待。。。。继续
因为linux实现使用的是队列而不是UNIX那样的静态数组,所以,就把内核存放进程的列表叫做任务队列,是一个双向循环链表。
链表中的每一项都是一个类型为task_struct叫做进程描述符的结构体。
进程描述符包括一个进程的所有信息。

分配进程描述符:

linux通过slab分配器分配task_struct结构体,2.6以前的内核task_struct结构体存放在各个内核栈的尾端。这样做是为了让那些像X86那样寄存器少的硬件体系结构能够通过栈指针来计算出task_struct的具体位置,从而减少了寄存器的额外开销。由于现在使用slab分配器动态的生成task_struct结构体,现在只需要在栈底(对于向下增长的栈)或者栈顶(对于向上增长的栈)创建一个新的结构体struct
thread_info这个里面存放着task_struct的指针,但这个对于X86的体系结构比较适宜,对于linux体系结构不需要这个,他可以通过指定寄存器来提高访问task_struct结构体的速度。

进程描述符的存放:

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