我在教程中读到,虽然linux中没有使用 intel segmentation ,但 代码段选择器中有保护或模式信息< / em> 和 数据段选择器 。在虚拟内存教程中,我读到了使用页表保护页面,具体取决于它们运行的模式。< / p>
我想知道这两种机制是如何相关的?
在什么阶段将页面上的保护信息添加到页表中?CPU是否检查了代码段选择器并根据它设置了页表标志?
答案 0 :(得分:0)
虽然Linux几乎没有使用细分,但由于您无法在x86上将其关闭,因此细分仅通过受保护的平面进行旁路记忆模型。
实际上分段是强制性的,你必须在制作内核时设置代码和数据段选择器,因为这些段选择器设置了当前的特权执行级别(CPL):基本上响0 (管理员模式)或响铃3 (用户空间)。选择器(寄存器CS,DS,...)在GDT中存在偏移。根据此偏移量指向的描述符,系统以给定的权限级别运行,有关使用段的详细信息,请参阅Intel manual 3A, chapter 3.2.2。
正如您所看到的,使用受保护的平面内存模型,在访问内存时无法直接检查属性(代码或数据都没有)。你猜对了! MMU(我宁愿说 paging )承诺根据系统的CPL和页面的U / S属性来检查访问权限。
由内核(因此在 ring 0 中执行)来设置页面目录,以及相关页面的属性。