繁体   English   中英

如果 CPU 看到虚拟地址,页面错误处理程序如何用物理地址填充页表条目?

[英]How does page fault handler fill up the page table entry with a physical address if CPU sees virtual addresses?

我正在阅读有关页面错误的信息,从我阅读的内容来看,MMU 会参考页表将虚拟地址转换为物理地址。 填充这些页表条目是操作系统的责任(通过页面错误处理程序)。

让我困惑的是页面错误处理程序首先如何获取物理地址? 在我看到的图表和注释中,CPU 似乎使用虚拟地址,而 MMU 将它们透明地转换为物理地址。 CPU 是否专门使用物理地址而不是虚拟地址来处理页面错误?

如果访问了内存中不存在的某个 4K 页,并且缺页处理程序成功地在磁盘上定位了相应的 4K 页,它如何获取物理内存的 4K 页并找出该 4K 页的物理地址?物理内存?

操作系统的部分职责是跟踪物理页面列表。 您可以查看OSDev以了解这是如何完成的——通常是通过查询 BIOS/UEFI 公开的函数,这些函数为您提供(通常是非连续的)空闲内存列表。

UEFI 特别在启动时公开GetMemoryMap以获取内存描述符数组。


给定一个可用物理页面的维护列表——当操作系统处理页面错误时,它可以访问出错的虚拟地址,并且可以决定要做什么。 如果它需要分配一个新页面,那么它会查询它的空闲页面列表,并选择一个可用的物理页面来映射到虚拟地址空间。 在 x86 上,这种映射是通过修改页表并将其加载到cr3寄存器中来完成的。

一旦页面被映射,就可以使用虚拟地址写入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM