免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2262 | 回复: 4
打印 上一主题 下一主题

《Linux内核设计与实现》中关于进程的疑惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-16 13:06 |只看该作者 |倒序浏览
最近在重看操作系统,现在刚看到进程这一块,出现了一些疑惑,希望大家能帮助一下,呵呵

在《Linux内核设计与实现》中第2章2.1节描述使用slab分配器分配进程描述符task_struct,书中写道:“通过预分配和重复使用task_struct,可以避免动态分配和释放所带来的资源消耗”,在2.4节进程终结时说明又会删除掉进程描述符。
在西安电子科技大学出版的《操作系统》一书中,第2章也讲到进程管理,PCB块(Linux中实现为进程描述符)的组织方式有链接和索引方式,是把PCB组织为一个集合。2.2.1中讲到进程创建,如下:
(1)申请空白PCB。为新进程申请获得惟一的数字标识符,并从PCB集合中索取一个空白PCB。
(2)为新进程分配资源。……
(3)初始化进程控制块。……
(4)将新进程插入就绪队列。……

问题:
1.进程创建时“从PCB集合中索取一个空白PCB”是什么意思?是直接使用已经分配好的PCB吗?还是动态申请PCB?
2.“预分配和重复使用task_struct”中的“预分配”是指从PCB集合中使用一个已经分配了内存的PCB吗?
3.“预分配和重复使用task_struct”中的“重复使用”是怎么回事?是指进程结束之后其task_struct不会被释放,而是再次放入进程描述符链表中吗?

谢谢!

论坛徽章:
0
2 [报告]
发表于 2011-11-16 13:54 |只看该作者
看书上说slab算法是专门为某一块预先一次性申请一定数量的内存备用,当这个模块想要使用内存的时候,就不再需要从系统中分配内存了,而是从预申请的内存中拿出一部分来使用

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
3 [报告]
发表于 2011-11-16 16:17 |只看该作者
回复 1# whosy
其实你真正应该疑惑的是slab,而不是进程。
对应PCB的申请和释放,可以这样简单的理解:
slab就是一块相同类型空间的集合,申请的时候就从这个集合中使用一个,同时标记为使用;释放的时候并不是将这个空间直接返还给内存管理部分,而是标记为未使用。这样就等下次在申请的时候,就可以使用刚才释放的那个了。

等你看到内存管理部分的slab的时候,自然就会明白了。

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
4 [报告]
发表于 2011-11-16 17:51 |只看该作者
就是说这个数据结构所占内存从哪里来。

古时候都是静态定义一个数组,申请就去数组中找没人用的一项。现在技术发达了,动态分配这个结构体的内存。至于分配手段,那就五花八门了。“从PCB集合中索取一个空白PCB”只是抽象地表达这个过程,没有说具体实现,可能是从静态数组中找,也可能从freelist中分配,甚至可以用通用内存分配函数。slab是一种更高级的内存分配手段。

论坛徽章:
0
5 [报告]
发表于 2011-11-17 08:24 |只看该作者
OK,明白了,十分感谢各位的解答,谢谢,呵呵……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP