0

我在一个教程中读到,虽然在 linux 中没有使用英特尔分段,但在代码段选择器数据段选择器中有保护或模式信息。在虚拟内存教程中,我阅读了关于使用页表保护页面的信息,具体取决于它们的模式正在运行。

我想知道这两种机制是如何相关的?

在什么阶段将页面上的保护信息添加到页表中?CPU是否检查代码段选择器并根据它设置页表标志?

4

1 回答 1

0

尽管Linux(几乎)不使用分段,但因为您无法在 x86 上将其关闭,分段只是通过受保护的平面内存模型绕过。

实际上分段是强制性的,您在制作内核时确实必须设置代码和数据段选择器,因为这些段选择器设置了当前的执行特权级别(CPL):基本上是ring 0(主管模式)或ring 3(用户区)。选择器(寄存器 CS、DS、...)承载 GDT 中的偏移量。根据此偏移指向的描述符,系统以给定的特权级别运行,有关使用段的更多信息,请参见Intel 手册 3A,第 3.2.2 章。

正如您所看到的,使用受保护的平面内存模型,没有直接检查访问内存的属性(无论是代码还是数据)。你猜对了!MMU(我宁愿说paging)承诺根据系统的 CPL 和页面的 U/S 属性检查访问。

由内核(因此在ring 0中执行)来设置页面目录以及相关页面的属性。

于 2012-07-30T13:32:14.217 回答