0

假设 CPU 处于保护模式:

当一个 ring-0 内核建立一个 ring-3 用户空间进程时,它必须修改哪个 CPU 级别的数据结构以指示该特定进程可以访问哪个虚拟地址空间?

它是否只是将全局描述符表中所有其他内存段的特权位设置为(环)0?

4

2 回答 2

1

每个进程都有一组它使用的页表。在 x86 上,这意味着带有一些页表的页目录。页目录的地址将在 CR3 寄存器中。每组页表都将映射内核(具有内核权限),因此当您进行系统调用时,内核可以访问它自己的页面。用户进程无法访问这些页面。执行上下文切换时,会将 CR3 寄存器中的地址更改为将要执行的进程的页表。因为每个进程都有一组不同的页表,所以它们各自对内存有不同的看法。为了确保没有两个进程可以访问相同的物理内存,您应该有某种物理内存管理器,可以查询尚未映射到任何其他页表中的全新内存区域。

因此,只要每个 Process 结构跟踪它自己的页表结构,您必须修改的唯一 cpu 级数据结构就是 CR3 寄存器。

于 2020-05-06T10:03:21.487 回答
0

看起来全局描述符表 (GDT) 提供了一种可以与分页结合使用的分段机制,但现在被认为是遗留的。

通过将页面目录地址加载到CR3控制寄存器中,Ring 3 进程被限制在由分页机制定义的线性内存中。CR3 只能从 Ring 0 更改:

在此处输入图像描述

在保护模式下,CS 寄存器中的 2 个 CPL 位指示 CPU 处于哪个环/特权级别。

更多在这里:

于 2020-04-30T09:30:41.040 回答