Chinaunix

标题: 内核堆栈意义? [打印本页]

作者: _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
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
第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
用户对自己的sp有写的权利,如果内核使用用户栈,那么用户可以安排一个sp给kernel用


噢,就不安全了哈。
作者: _nosay    时间: 2015-12-01 10:37
kerryxi 发表于 2015-11-30 22:40
kernel stack对进程来讲是固定位置的,只要调度到该进程,内核栈固定地址就能够得到访问。速度快。且可以做 ...


噢,  。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2