您的位置:首页 > 编程语言

为什么内核不能调用用户态代码???

2018-03-16 17:25 260 查看
我们知道内核和用户共用4GB空间(32位),共用一套32位地址,此外内核的权限是0,那么内核理论上可以访问4GB空间的任意地方,但是为什么你重没有见过内核调用用户态的代码,或读写用户态的数据?
哈哈!
因为你忽略了两个细节:
(1)这里用的是虚拟地址。
(2)内核态和用户态是异步的。
由于这两个原因,内核永远不知道究竟是哪个进程了他处于同一时空。
比如:
4点钟,进程A的fun()在物理空间上。
5点钟,进程A的fun()被移到了块设备上。这时,内核如果想要调用进程A的fun(),但是即使他按照A的虚拟地址去调用,也不可能找到fun()。
所以内核访问用户态是不可预知的,无意义的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐