来自维基百科:
“无法关闭细分 x86处理器,这么多操作 系统使用平面内存模型 使分割无法察觉 程式。例如,Linux 内核只设置了4个段“
我的意思是因为虚拟内存子系统(PTE有一个保护位)已经处理了保护,为什么你需要4个段(而不是2个:即数据/代码与DPL 3,因为你可以执行代码驻留在一个低阶特权)?
感谢。
答案 0 :(得分:3)
你没有足够的引用wikipedia page,它描述了四个部分以及为什么都需要......
然而,通常,隐含的段是 用过的。所有指令提取都来了 来自CS中的代码段 寄存器。大多数内存引用来了 来自DS寄存器中的数据段。 处理器堆栈引用 含蓄地(例如推和弹 指令)或明确(记忆 使用ESP或(E)BP进行访问 寄存器)使用堆栈段 SS注册。最后,字符串 说明(例如stos,movs)也 使用额外的细分ES。
因此,如果您想要建立一个程序员不需要考虑分段的平面模型,您需要将所有这四个段寄存器(CS,DS,SS,ES)设置为具有相同的基础。然后,针对所有四个计算的地址是等效的。
该页面显示了一个示例,其中所有四个设置为base = 0,limit = 4Gb
答案 1 :(得分:1)
内核和用户模式有一组单独的段,因此用户模式代码无法写入内核模式数据。那将是一件坏事。