详解linux内核-缺页中断处理

除小型设备外,MMU 支持虚拟地址转换。
第二级或第四级页表实现转换。
页错误中断处理: 1 . 硬件保存状态。
2 . 收集保存日志。
3 . 内核识别虚拟页。
4 . 检查地址的有效性。
5 . 页面替换将脏页写回磁盘。
6 . 磁盘加载页面。
7 、中断后恢复状态。
8 . 规划过程。
9 . 收集恢复日志。
1 0. 用户空间继续。
Linux处理:内核do_page_fault、vma查找、handle_mm_fault处理页表、用户态缺页频繁。
内核模式下很少出现页面错误,vmalloc 或 fixup_exception 可以处理它们。
请记住:处理页错误的关键在于页表同步和替换算法。

缺页中断的问题?

缺页处理这个话题非常专业。
我也遇到过类似的内存管理问题,尽管不是在 Linux 内核级别。

我的印象是2 01 9 年左右。
当时我正在开发一个小型嵌入式系统。
有一次程序运行到一半突然卡住了。
我查看了日志,发现页面错误。
我开始排查,发现程序访问了一个不存在的内存地址。

在处理这个问题时,我发现Linux内核的内存管理机制非常有趣。
当发生页错误中断时;内核会调用__do_page_fault函数和handle_mm_fault来处理。
这个handle_mm_fault非常重要。
根据文件页或未知页等情况进行分类处理。

如果这是一个文件页面;内核称之为PG_SwapBacked;它将被标记为 PG_uptodate 和 PG_Active。
这表明该页面正在从磁盘加载。
这就像告诉系统内容是最新的并且现在可用。
这样,系统的性能和稳定性就得到了保证。

对于匿名页面,内核对它们做同样的事情;然而,由于它通常不包括相应的物理内存,因此内核它将从内存池中分配或替换磁盘上一些不太活跃的页面,而不会影响许多其他操作。

这个过程实际上平衡了性能和稳定性,保证系统稳定高效运行。
我个人感觉Linux内核在这方面做得相当不错,可以处理各种内存访问问题。
无论如何,这取决于你。
如果以后遇到类似的问题,可能需要从这个角度去思考。
我还在想这个。

Linux中断响应流程是怎样的?

等等,前几天我在修电脑的时候,键盘突然没反应了。
这就像打字突然停止而鼠标跳来跳去。
多次重启后,终于发现主板上的电容损坏了。
我把它取下来换上新的,立刻就恢复正常了。
这让我想起了破坏。
正如你所说,如果硬件出现一个小问题,整个系统都会受到影响。
我记得上次我公司的旧服务器在半夜出现蓝屏错误。
我花了很长时间检查是否是硬盘温度传感器的间歇处理有问题。
我花了很长时间才修复它。
Linux确实很复杂而且很实用。
一个小的中断处理程序涉及很多东西。