CPU 如何知道它是否正在访问未分配的内存位置?

CPU 如何知道它是否正在访问未分配的内存位置?

根据我的理解,当CPU访问某个内存位置时,例如如果将地址为 的内存位置设置4为值100,它会将该地址4视为虚拟地址,并找出该虚拟地址所对应的物理地址指向使用当前加载的进程页表。

这是进程页表的示例:

在此输入图像描述

因此,在我们的示例中,CPU 会将物理地址为 的内存位置设置12346为 的值100

但是CPU如何知道它是否正在访问没有映射物理地址的虚拟地址,进程页表是否有一个标志来指示这一事实,例如进程页表是否有类似“分配了吗?”旗帜:

在此输入图像描述

答案1

由于您具体询问 x86,我将使用该架构,但这适用于大多数(如果不是全部)支持内存分页的架构。

x86页表有一个“存在”位,用于指示内存中是否存在页面。如果是,并且权限等允许,CPU(在其 MMU 的帮助下)直接处理内存访问。否则,它会引发异常,内核可以使用页表项中的信息和它自己的数据结构来决定如何处理它:分配物理页,从磁盘读取数据,复制物理页(用于copy-on -写)等

相关内容