![CPU 如何知道它是否正在访问未分配的内存位置?](https://linux22.com/image/151027/CPU%20%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%E5%AE%83%E6%98%AF%E5%90%A6%E6%AD%A3%E5%9C%A8%E8%AE%BF%E9%97%AE%E6%9C%AA%E5%88%86%E9%85%8D%E7%9A%84%E5%86%85%E5%AD%98%E4%BD%8D%E7%BD%AE%EF%BC%9F%20.png)
答案1
由于您具体询问 x86,我将使用该架构,但这适用于大多数(如果不是全部)支持内存分页的架构。
x86页表有一个“存在”位,用于指示内存中是否存在页面。如果是,并且权限等允许,CPU(在其 MMU 的帮助下)直接处理内存访问。否则,它会引发异常,内核可以使用页表项中的信息和它自己的数据结构来决定如何处理它:分配物理页,从磁盘读取数据,复制物理页(用于copy-on -写)等
由于您具体询问 x86,我将使用该架构,但这适用于大多数(如果不是全部)支持内存分页的架构。
x86页表有一个“存在”位,用于指示内存中是否存在页面。如果是,并且权限等允许,CPU(在其 MMU 的帮助下)直接处理内存访问。否则,它会引发异常,内核可以使用页表项中的信息和它自己的数据结构来决定如何处理它:分配物理页,从磁盘读取数据,复制物理页(用于copy-on -写)等