首页 > 解决方案 > 操作系统如何将进程彼此隔离?

问题描述

假设 CPU 处于保护模式:

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

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

标签: processkernelcpuosdevgdt

解决方案


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

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


推荐阅读