繁体   English   中英

如何在Linux内核中触发页面错误

[英]how is page fault triggered in linux kernel

我了解linux内核实现了需求分页-在首次访问该页面之前,不会分配该页面。 这全部在页面错误处理程序中处理。 但是我不明白的是页面错误是如何触发的? 更准确地说,是什么触发了页面错误处理程序的调用? 是来自硬件吗?

每当应用程序尝试访问未映射到物理地址的虚拟内存地址时,页面错误都是由CPU(更具体地说是MMU)引起的。 然后,页面错误处理程序(在内核中)检查页面当前是否已交换到磁盘(将其交换回)或是否已保留但尚未提交(提交),然后将控制权发送回应用程序以重试内存访问指令。 另一方面,如果应用程序未分配该虚拟地址,则它将segfault指令发送回内核。

因此,最准确地说是硬件触发了呼叫。

我建议您阅读“现代操作系统第二版”,第4章是有关内存管理的,这是一个非常复杂的主题。 您应该仔细阅读。

当向前映射到根本不存在的内存时(从虚拟内存到物理内存)。在这种情况下,MMU会说没有相应的物理内存,并通知操作系统,称为“页面错误”。 操作系统告诉它是一个较少使用的虚拟内存,请检查它在磁盘中。然后,MMU试图查找的页面将被重新加载到位置表中。 内存映射将进行相应的更新,然后将在发生页面错误的确切时间将控制权交还给用户应用程序,并再次执行该指令,仅这次MMU将向存储系统输出正确的地址,所有操作都会继续。

由于由硬件的一部分MMU触发的页面错误对此负责。

暂无
暂无

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

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