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

进程:

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

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

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

使用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结构体的速度。

进程描述符的存放:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值