CSDN趣味图解 | 什么是缺页错误 Page Fault?( 三 )
本文插图
缺页异常并不可怕 , 只要CPU要的虚拟地址经过MMU的一番寻址之后没有找到或者找到后无权限 , 就会出现缺页异常 , 因此触发异常后的处理流程将是重点内容 。
5.2 缺页错误的分类处理缺页中断会交给PageFaultHandler处理 , 其根据缺页中断的不同类型会进行不同的处理:
- Hard Page Fault也被称为Major Page Fault , 翻译为硬缺页错误/主要缺页错误 , 这时物理内存中没有对应的页帧 , 需要CPU打开磁盘设备读取到物理内存中 , 再让MMU建立VA和PA的映射 。
- Soft Page Fault也被称为Minor Page Fault , 翻译为软缺页错误/次要缺页错误 , 这时物理内存中是存在对应页帧的 , 只不过可能是其他进程调入的 , 发出缺页异常的进程不知道而已 , 此时MMU只需要建立映射即可 , 无需从磁盘读取写入内存 , 一般出现在多进程共享内存区域 。
- Invalid Page Fault翻译为无效缺页错误 , 比如进程访问的内存地址越界访问 , 又比如对空指针解引用内核就会报segment fault错误中断进程直接挂掉 。
本文插图
5.3 缺页错误出现的原因不同类型的Page Fault出现的原因也不一样 , 常见的几种原因包括:
- 非法操作访问越界这种情况产生的影响也是最大的 , 也是Coredump的重要来源 , 比如空指针解引用或者权限问题等都会出现缺页错误 。
- 使用malloc新申请内存malloc机制是延时分配内存 , 当使用malloc申请内存时并未真实分配物理内存 , 等到真正开始使用malloc申请的物理内存时发现没有才会启动申请 , 期间就会出现Page Fault 。
- 访问数据被swap换出物理内存是有限资源 , 当运行很多进程时并不是每个进程都活跃 , 对此OS会启动内存页面置换将长时间未使用的物理内存页帧放到swap分区来腾空资源给其他进程 , 当存在于swap分区的页面被访问时就会触发Page Fault从而再置换回物理内存 。
1. 如使用共享内存区域 , 没有存储VA->PA的映射但是存在物理页帧的软缺页错误 , 在Page Table/TLB中建立映射关系即可 。
2. 访问的地址在物理内存中确实不存在 , 需要从磁盘/swap分区读入才能使用 , 这种性能影响会比较大 , 因为磁盘太慢了 , 尽量使用高性能的SSD来降低延时 。
3. 访问的地址内存非法 , 缺页错误会升级触发SIGSEGV信号结束进程 , 这种属于可以导致进程挂掉的一种缺页错误 。
本文插图
全文总结 本文粗浅地和大家一起学习了Page Fault的相关知识点 , 包括Linux虚拟地址和物理地址的关系、CPU获取内存数据的过程、MMU和TLB&页表的协同配合、缺页异常产生的原因和分类处理 。
本文并没有对MMU的内部机制、内核态&用户态缺页异常、缺页异常处理函数等内容进行展开 , 主要是因为这部分内容相对晦涩 , 还得靠自己深入研究 。
本文旨在把火点燃而不是把桶填满 , 对于文中相关知识点 , 欢迎交流沟通学习 。
【CSDN趣味图解 | 什么是缺页错误 Page Fault?】
你点的每个“在看” , 我都认真当成了喜欢
推荐阅读
- 欧美风钩针图解│欧美风芭蕾女孩
- 趣味社会学|男子委屈:你可以报警不该打人,网友评论却一边倒,酒后言语冒犯老板娘被打
- |【图解】人口普查,一次跨越67年时光的旅行
- 趣味社会学|面对监控还百般抵赖,这就是骑虎难下吧!,保安捡到手机不归还
- 趣味社会学|配一把“公主座椅”,看完让人红了眼眶,大爷骑三轮车接孙女
- 澎湃新闻|【图解】人口普查,一次跨越67年时光的旅行
- 趣味社会学|至少30亿动物惨死,世界自然组织曝光澳洲“罪行”
- 趣味社会学|柬埔寨政府:女性要穿覆盖大腿的衣服,女性穿超短裙或透明装将面临罚款
- 金欧财经|散户福音:抄底七大步骤详细图解!另外这八种涨停个股可以介入
- 【图解】人口普查,一次跨越67年时光的旅行
