代码之家  ›  专栏  ›  技术社区  ›  Anonymous

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

  •  2
  • Anonymous  · 技术社区  · 15 年前

    来自维基百科:

    “无法关闭分段 x86处理器,许多操作系统 系统使用平面内存模型 使分段不可见 程序。例如,Linux 内核只设置4个段”

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

    谢谢。

    2 回复  |  直到 15 年前
        1
  •  3
  •   John M    15 年前

    你说的还不够 wikipedia page 它描述了四个部分以及为什么需要所有这些部分。。。

    然而,通常隐含的部分是 使用。所有指令获取 从CS中的代码段 登记。大多数内存引用 从DS寄存器中的数据段。 处理器堆栈引用 隐式(例如推送和弹出 指令)或显式(内存 使用ESP或(E)BP访问 寄存器)使用堆栈段 SS寄存器。最后,string 说明(如stos、MOV) 使用额外的段ES。

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

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

        2
  •  1
  •   MSN    15 年前

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