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

时间:2014-01-30 19:35:46

标签: memory-management linux-kernel

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

由于MMU触发的页面故障是硬件的一部分,因此负责。