弱弱的问: 为什么要分内核栈和用户栈?
时间:2006-03-16
来源:互联网
2. 为什么内核栈的大小是有限的,固定的?
谢谢!
作者: pavin 发布时间: 2006-03-16
作者: xieweiyi 发布时间: 2006-03-16
1. 内核栈和用户栈不可能同时使用吧? 多个处理器的不知道.
2. 我听说, 只要是32位的,内核栈就是8K;64位的,内核栈就是16K. 跟内核虚拟地址空间在3-4G没什么关系吧?
作者: pavin 发布时间: 2006-03-16
1. 内核栈和用户栈不可能同时使用吧? 多个处理器的不知道.
2. 我听说, 只要是32位的,内核栈就是8K;64位的,内核栈就是16K. 跟内核虚拟地址空间在3-4G没什么关系吧?
作者: pavin 发布时间: 2006-03-16
作者: pavin
2. 为什么内核栈的大小是有限的,固定的?
谢谢! |
作者: biinn 发布时间: 2006-03-17
别忘了,内核的代码和数据实际上是对所有进程共享的,如果不为每个进程保留
对应的内核栈,内核就没法为不同的进程执行不同的代码。
2 安全
如果用户栈和内核栈共享,用户就可以修改栈内容来突破内核安全保护。
作者: 刻苦猫 发布时间: 2006-03-17
我是说两个栈里面同时有数据,而且是有效的数据,你不能因为一个去破坏另外一个
虚拟地址空间,我只是想说内核的很有限,64位的虚拟地址空间是多大?
to 刻苦猫:
应该为每个进程保留栈,但是这个栈我觉得放在用户空间也是可以实现的,简单的说
现在的内核栈底为了节省空间,并没有存放整个task_struct而是放置了一个指针,
那么我们只要把一些必要的信息存放在内核空间,而运行时的堆栈放在用户空间,应该
也是可行的;
安全是一个不错的理由,我觉得这是关键;
作者: xieweiyi 发布时间: 2006-03-17
作者: xieweiyi
to 刻苦猫:
应该为每个进程保留栈,但是这个栈我觉得放在用户空间也是可以实现的, |
作者: biinn 发布时间: 2006-03-17
作者: xieweiyi
应该为每个进程保留栈,但是这个栈我觉得放在用户空间也是可以实现的,简单的说
现在的内核栈底为了节省空间,并没有存放整个task_struct而是放置了一个指针, 那么我们只要把一些必要的信息存放在内核空间,而运行时的堆栈放在用户空间,应该 也是可行的; 安全是一个不错的理由,我觉得这是关键; |
1 本地线程,内核要保存额外的信息来判断切换线程后使用那个线程栈,与其如此
,还不如直接用内核栈,因为内核栈本来与本地线程就是1,1对应的。
2 内核抢占, 内核抢占要么放弃,要么就非常沉重,因为不论抢占是否需要执行,
内核都要切换页表,为了一句if切换整个地址空间太累了。
作者: 刻苦猫 发布时间: 2006-03-17
作者: camelguo 发布时间: 2006-03-18
LINUX的内核运行在特权级0,应用程序运行在特权级3,从应用程序到内核时会发生堆栈切换的。
作者: is02bing 发布时间: 2006-03-25
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28