CPU 如何知道/强制执行段/页访问违规?

CPU 如何知道/强制执行段/页访问违规?

x86 IA-32

据我了解,从用户空间程序访问内存不涉及操作系统。否则会很慢。

因此,如果分页启用与否,CPU 应该以某种方式知道当前运行的代码可以访问该段/页面。

假设分页已关闭 - 因此 CPU 唯一可以引用(以确定访问权限)的是 GDT 中的段描述符。但是段描述符是否包含有关哪个进程可以使用哪个段的任何信息?

分页已打开 - 页表条目是否包含有关谁可以访问此特定页面的任何信息?

位 2 (U/S) 用户/主管;如果为 0,则不允许用户模式访问此条目引用的 4 KB 页

它确实包含权限级别,但不足以确定当前代码是否有权访问该特定页面。

CPU+MMU 如何在每次内存读/写时不涉及操作系统的情况下保护内存访问?

如果某些恶意进程在段选择器中加载自己的值怎么办?

MMU 是否有操作系统在进程创建/上下文切换时填充的一些数据结构?

答案1

但是段描述符是否包含有关哪个进程可以使用哪个段的任何信息?

是的,段描述符的 DPL 位确定所需的权限级别。

页表条目是否包含有关谁可以访问该特定页面的任何信息?

是的,你提到的美国位。

但不足以确定当前代码是否可以访问此特定页面。

在 x86 上,当前特权级别由寄存器的底部位确定CS;看获取进程的当前权限级别(环)

CPU+MMU 如何在每次内存读/写时不涉及操作系统的情况下保护内存访问?

操作系统填充适当的数据结构来告诉MMU什么应该被保护。只有当代码尝试执行“禁止”的操作(实际上可能并未被禁止,例如如果它试图访问不存在但允许访问的内存)。

如果某些恶意进程在段选择器中加载自己的值怎么办?

进程无法加载段选择器的值超出其权限级别。

MMU 是否有操作系统在进程创建/上下文切换时填充的一些数据结构?

是的,您已经提到了其中一些:GDT、页表等。

相关内容