首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >现代OSes上的内存分割:为什么需要4段?

现代OSes上的内存分割:为什么需要4段?
EN

Stack Overflow用户
提问于 2009-07-30 01:29:43
回答 2查看 1.1K关注 0票数 2

维基百科:

分割不能在x86处理器上关闭,因此许多操作系统使用一个平面内存模型来使程序无法察觉分段。例如,Linux内核只设置了4个段

我的意思是,既然保护已经由虚拟内存子系统(PTE有保护位)负责,那么为什么需要4个段(而不是2:即数据/ DPL 3代码,因为您可以执行驻留在较低特权段中的代码)?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2009-07-30 02:10:51

你没有引用足够的维基百科页面,它描述了四个片段,为什么所有的都需要.

然而,通常使用隐含片段。所有指令获取来自CS寄存器中的代码段。大多数内存引用来自DS寄存器中的数据段。处理器堆栈引用,或者隐式地(例如推送和pop指令)或者显式(使用ESP或(E)BP寄存器的存储器访问)使用SS寄存器中的堆栈段。最后,字符串指令(例如stos、mov)也使用额外的段ES。

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

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

票数 3
EN

Stack Overflow用户

发布于 2009-07-30 05:38:52

您有一组单独的内核和用户模式段,这样用户模式代码就不能写入内核模式数据。那会是件坏事。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1204018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档