当前位置:  技术问答>linux和unix

[给今天还在奋斗的大虾散分]用户空间的代码能否直接访问内核空间的数据????

    来源: 互联网  发布时间:2016-05-18

    本文导语:  有下面2段文字: 1. 某大侠在自己的Blog中写到: 32位MIPS CPU中,程序的内存地址分为四大区域,用传统命名来说,分别是:kuseg,kseg0,kseg1和kseg2。 除了kuseg只能在核心态下使用,其它三个都可以在用户态模式中存...

有下面2段文字:
1. 某大侠在自己的Blog中写到:
32位MIPS CPU中,程序的内存地址分为四大区域,用传统命名来说,分别是:kuseg,kseg0,kseg1和kseg2。 除了kuseg只能在核心态下使用,其它三个都可以在用户态模式中存取。
2. 在MIPSR440的手册中看到:
All valid User mode virtual addresses have their most-significant bit
cleared to 0; any attempt to reference an address with the most-significant
bit set while in User mode causes an Address Error exception.

觉得这两个人的观点是相互矛盾的:到底在用户态下能否直接访问内核空间(kseg0,kseg1),就是说能在用户模式下直接否访问0x1xxxxxxx的virtual address??难道这内核模式下不能访问内核空间???非常怀疑那位大侠的话。还是说,我对别人的话理解错误。

个人理解:
1. 在内核模式下,,能访问所有的空间,甚至能直接去运行用户空间的代码(MIPS中CPU产生的地址都是虚地址,根据高3位的不同,会做不同的转换,如果最高3位都是0,就去查TLB,否则除了kseg3和kuseg外都是高3位置接清0做物理地址),不过直接去运行用户空间的代码没必要,也没意义;但是访问用户空间的数据就有意义,没看过copy_to_user的代码,,猜测这个代码就是在内核模式下,内核代码把数据从内核空间搬到用户空间的。
2. 在用户模式下,用户空间的代码只能老老实实的访问自己那块空间,,有事通过系统调用陷入内核模式,,让内核代码帮忙。用户模式下,,是不能直接访问内核空间的。

也和一个老同事讨论过,,,他说我理解的恰恰相反。应该是:在用户模式下可以访问内核空间,反之不能。。似乎他和前面那大侠理解相同。 个人觉得这中说法完全没有道理,系统也完全不应该这样设计。。

一个简单的问题,,让我有点怀疑自己这些年的理解是否都是完全错的,,严重怀疑! 期望那位大侠指点下,如果我理解错误,最好能说明下Linux或别的系统为什么要设计成“除了kuseg只能在核心态下使用,其它三个都可以在用户态模式中存取”!

|
你理解的基本正确。在mips下,内核态可以访问ku k0 k1 k2所有这四个区域的地址空间。用户态只能访问ku区域的地址空间。
你最上面引用的blog正好相反,非常荒谬,怀疑你是引用错了,或是写blog的人引用错了。

|


觉得老兄似乎概念不清:
1、用户态下代码是没有权限直接修改CPU执行等级的。
2、用户态下因为系统调用或其它方式导致CPU执行等级改变之后,就已经运行在内核态了,当系统调用执行完之后,CPU执行等级会再次改变,回到用户态执行。

|
用户态代码是可以访问内核态空间的。
通过修改用户态代码的CPU执行等级那么用户态线程将拥有内核态程序的执行权限,那么也就能访问内核空间了。
内核态程序的CPU执行等级是0级,应用态是3级。

另外内核程序访问用户态空间一点问题都没有,正常的寻址能到的地方,内核程序都能访问到。

|
支持4楼见解

|
有点不一样的,X86专门为用户态和内核态做了切换的指令,而mips没有。

我同意8楼的观点,既然是要保护内核空间的就不可能用户态空间能够修改,这样CPU的设计上就自相矛盾了。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 我的奋斗,这个名字有点讨打,不过还是想这样写。
  • 仲秋了,祝奋斗在电脑前的兄弟姐妹们节日快乐 散分啦。。。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3