免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1264 | 回复: 4

关于进程创建问题,请大虾们来回答下,帮帮小弟 [复制链接]

论坛徽章:
0
发表于 2012-03-29 10:56 |显示全部楼层
本帖最后由 tanbaolin1218 于 2012-03-29 11:01 编辑

在《linux内核设计与实现》书中关于fork的介绍中,在copy_process()函数中会调用dup_task_struct()为新进程创建一个内核栈,这句话怎么理解,这个内核栈干什么用,为什么要为每个进程创建内核栈

论坛徽章:
0
发表于 2012-03-29 11:41 |显示全部楼层
我觉得第一句话很好理解,就是创建一个内核栈,通过alloc_pages创建一个栈空间而已。为什么要内核栈?进程执行时涉及到栈操作总得有人顶着吧,理论上你可以使用父进程的栈,但是这样实现起来很麻烦不是,比如init进程是所有用户空间进程的父进程,都用它的栈,这不是啃老吗?而且问题多多。至于进程中的一些栈操作,可以看看关于kernel_thread的补充说明一贴,写得比较粗矿,但是还是有点参考价值的。

论坛徽章:
0
发表于 2012-03-29 16:06 |显示全部楼层
每个进程都需要自己的用户态栈和内核态栈,当进程在用户态执行用户代码时使用用户态栈。当进程因为系统调用陷入到内核态时,就需要使用内核态栈,将用户态的上下文保存在内核栈中,在内核态调用的函数都是存在内核栈中的,当进程返回到用户态时再弹出用户态上下文,同时内核栈也被清空。

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
发表于 2012-03-29 16:39 |显示全部楼层
各个栈必须是独立的。因为个进程是并行执行的。

论坛徽章:
1
午马
日期:2013-09-10 11:03:08
发表于 2012-03-30 00:03 |显示全部楼层
是不是可以这样理解下,进程之间的资源是独立, 进程1 不能去用进程2的资源。父进程能不能用子进程的资源,或者反过来,这有点忘记了,先查下资料先
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP