维基百科:
分割不能在x86处理器上关闭,因此许多操作系统使用一个平面内存模型来使程序无法察觉分段。例如,Linux内核只设置了4个段
我的意思是,既然保护已经由虚拟内存子系统(PTE有保护位)负责,那么为什么需要4个段(而不是2:即数据/ DPL 3代码,因为您可以执行驻留在较低特权段中的代码)?
谢谢。
发布于 2009-07-30 02:10:51
你没有引用足够的维基百科页面,它描述了四个片段,为什么所有的都需要.
然而,通常使用隐含片段。所有指令获取来自CS寄存器中的代码段。大多数内存引用来自DS寄存器中的数据段。处理器堆栈引用,或者隐式地(例如推送和pop指令)或者显式(使用ESP或(E)BP寄存器的存储器访问)使用SS寄存器中的堆栈段。最后,字符串指令(例如stos、mov)也使用额外的段ES。
因此,如果您想要建立一个平面模型,程序员不需要考虑分段,您需要设置所有四个段寄存器(CS,DS,SS,ES),以具有相同的基础。然后,计算出的所有四个地址是等价的。
该页面显示了一个将所有四个设置为base=0,limit=4Gb的示例。
发布于 2009-07-30 05:38:52
您有一组单独的内核和用户模式段,这样用户模式代码就不能写入内核模式数据。那会是件坏事。
https://stackoverflow.com/questions/1204018
复制相似问题