免费注册 查看新帖 |

Chinaunix

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

关于linux内核栈的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-19 15:06 |只看该作者 |倒序浏览
请教各位大虾,linux所有进程都使用同一个内核栈吗?还是每个进程都有一个?

论坛徽章:
0
2 [报告]
发表于 2010-05-19 19:48 |只看该作者
所有进程共用一个内核栈该会是一种什么情况呢?{:3_180:}

论坛徽章:
0
3 [报告]
发表于 2010-05-21 22:53 |只看该作者
每个进程都有自己的进程栈,是动态分配的

论坛徽章:
0
4 [报告]
发表于 2010-06-04 23:28 |只看该作者
每个进程在生成的时候会分配Task_struct和两页或一页的内存作为该进程进行系统调用或者中断时的内核栈。
我的理解哈

论坛徽章:
0
5 [报告]
发表于 2010-06-05 09:58 |只看该作者
所有的内核模块都是用同一个内核栈,而且这个内核栈都非常小,所以在内核模块里面如果要用到大容量的结构体时,都是动态分配空间的。

论坛徽章:
0
6 [报告]
发表于 2010-06-06 20:34 |只看该作者
回复 1# dospeng


    at first 我们分析一下如果共用一个内核栈会出现什么情况,假设有A、B三个进程,A调用系统调用read(1,...)读按键,此时正好又没有按键,
所以A被阻塞在内核,此时内核调度B执行,此时B也调用一个系统调用被阻塞了,而此时按键事件到来,进程A被唤醒,A继续执行。我们想想B进入内核
已经破坏了A进入内核的内核栈,那此时A能正常返回吗?所以从上面分析A、B肯定是拥有各自的内核栈。此内核栈好像是和task_struct以前分配的
一共分配了3个页面,除了task_struct占得内存外,其余的就是内核栈。而在x86上这个栈等指针保存在TSS断的SS0和Esp0中。

论坛徽章:
0
7 [报告]
发表于 2010-06-07 18:34 |只看该作者
所有内核进程共用一个内存空间,各自有独立的内核栈,是2 page(8k), 也可以配置成4k,4k的情况更复杂,内核要处理移出的情况。如zhy_linux所说,是在task_struct 被创建的时候,创建出来的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP