现代操作系统上的内存分段:为什么需要4个段?

时间:2009-07-30 01:29:44

标签: memory-management operating-system

来自维基百科:

  

“无法关闭细分   x86处理器,这么多操作   系统使用平面内存模型   使分割无法察觉   程式。例如,Linux   内核只设置了4个段“

我的意思是因为虚拟内存子系统(PTE有一个保护位)已经处理了保护,为什么你需要4个段(而不是2个:即数据/代码与DPL 3,因为你可以执行代码驻留在一个低阶特权)?

感谢。

2 个答案:

答案 0 :(得分:3)

你没有足够的引用wikipedia page,它描述了四个部分以及为什么都需要......

  

然而,通常,隐含的段是   用过的。所有指令提取都来了   来自CS中的代码段   寄存器。大多数内存引用来了   来自DS寄存器中的数据段。   处理器堆栈引用   含蓄地(例如推和弹   指令)或明确(记忆   使用ESP或(E)BP进行访问   寄存器)使用堆栈段   SS注册。最后,字符串   说明(例如stos,movs)也   使用额外的细分ES。

因此,如果您想要建立一个程序员不需要考虑分段的平面模型,您需要将所有这四个段寄存器(CS,DS,SS,ES)设置为具有相同的基础。然后,针对所有四个计算的地址是等效的。

该页面显示了一个示例,其中所有四个设置为base = 0,limit = 4Gb

答案 1 :(得分:1)

内核和用户模式有一组单独的段,因此用户模式代码无法写入内核模式数据。那将是一件坏事。

相关问题