_nosay 发表于 2015-11-19 14:10

内核堆栈意义?

请问:内核不是可以访问所有的内存吗,那用户进程切换到内核执行的时候,为啥不直接用用户空间的堆栈,而是在内核另外安排一个堆栈?

nswcfd 发表于 2015-11-19 15:24

1. cpu(例如x86)要求cpl切换,指定新的ss/sp,kernel stack可以是固定位置,而usr app不能提前预知
2. user space stack overflow直接影响kernel stack,风险太大

_nosay 发表于 2015-11-20 08:57

nswcfd 发表于 2015-11-19 15:24 static/image/common/back.gif
1. cpu(例如x86)要求cpl切换,指定新的ss/sp,kernel stack可以是固定位置,而usr app不能提前预知
2. u ...

噢,关于第二条我猜到过,但我当时理解的是,如果使用用户堆栈出现问题,就可以单独杀掉这个进程,但其实CPU现在正在内核执行,如果地址出问题,还是整个系统都挂了。邪邪 ~

nswcfd 发表于 2015-11-20 15:10

第1点有点错误,不同进程的kernel stack实际是不一样的,否则就无法实现核心态的抢占了。

_nosay 发表于 2015-11-20 16:46

nswcfd 发表于 2015-11-20 15:10 static/image/common/back.gif
第1点有点错误,不同进程的kernel stack实际是不一样的,否则就无法实现核心态的抢占了。

嗯,2个页面大小,其中有一部分用于保存一个结构,其余的当堆栈用。

kerryxi 发表于 2015-11-30 22:40

kernel stack对进程来讲是固定位置的,只要调度到该进程,内核栈固定地址就能够得到访问。速度快。且可以做到内核态和用户态的安全隔离。

amarant 发表于 2015-12-01 08:30

本帖最后由 amarant 于 2015-12-01 08:31 编辑

用户对自己的sp有写的权利,如果内核使用用户栈,那么用户可以安排一个sp给kernel用

_nosay 发表于 2015-12-01 10:35

amarant 发表于 2015-12-01 08:30 static/image/common/back.gif
用户对自己的sp有写的权利,如果内核使用用户栈,那么用户可以安排一个sp给kernel用

噢,就不安全了哈。

_nosay 发表于 2015-12-01 10:37

kerryxi 发表于 2015-11-30 22:40 static/image/common/back.gif
kernel stack对进程来讲是固定位置的,只要调度到该进程,内核栈固定地址就能够得到访问。速度快。且可以做 ...

噢,{:yxh31:}。
页: [1]
查看完整版本: 内核堆栈意义?