文章插图
5.3 缺页错误出现的原因不同类型的Page Fault出现的原因也不一样,常见的几种原因包括:
- 非法操作访问越界这种情况产生的影响也是最大的,也是Coredump的重要来源,比如空指针解引用或者权限问题等都会出现缺页错误 。
- 使用malloc新申请内存malloc机制是延时分配内存,当使用malloc申请内存时并未真实分配物理内存,等到真正开始使用malloc申请的物理内存时发现没有才会启动申请,期间就会出现Page Fault 。
- 访问数据被swap换出物理内存是有限资源,当运行很多进程时并不是每个进程都活跃,对此OS会启动内存页面置换将长时间未使用的物理内存页帧放到swap分区来腾空资源给其他进程,当存在于swap分区的页面被访问时就会触发Page Fault从而再置换回物理内存 。
>>> 敲黑板 划重点 本段小结:<<<触发Page Fault的原因可能有很多,归根到底也只有几种大类:
1. 如使用共享内存区域,没有存储VA->PA的映射但是存在物理页帧的软缺页错误,在Page Table/TLB中建立映射关系即可 。
2. 访问的地址在物理内存中确实不存在,需要从磁盘/swap分区读入才能使用,这种性能影响会比较大,因为磁盘太慢了,尽量使用高性能的SSD来降低延时 。
3. 访问的地址内存非法,缺页错误会升级触发SIGSEGV信号结束进程,这种属于可以导致进程挂掉的一种缺页错误 。
文章插图
文章插图
全文总结本文粗浅地和大家一起学习了Page Fault的相关知识点,包括Linux虚拟地址和物理地址的关系、CPU获取内存数据的过程、MMU和TLB&页表的协同配合、缺页异常产生的原因和分类处理 。
【什么是缺页错误 Page Fault?】本文并没有对MMU的内部机制、内核态&用户态缺页异常、缺页异常处理函数等内容进行展开,主要是因为这部分内容相对晦涩,还得靠自己深入研究 。
本文旨在把火点燃而不是把桶填满,对于文中相关知识点,欢迎交流沟通学习 。
推荐阅读
- 淘宝直通车有什么用 淘宝直通车怎么开才有效果
- 曾经风光无限的 JSP,为什么现在很少有人使用了?
- 教你20秒之内将Word转为PPT,真是太简单了
- 老电脑升级加固态硬盘还是内存、CPU、显卡?旧电脑升级硬件建议
- 第几泡茶最好喝,紫砂壶为什么适合泡茶
- Go平台的流程引擎
- 都知道DNS 但它是谁发明设计的你了解吗?
- Nginx 极简教程,常用场景统统解析
- 天真,居然还有人认为java的参数传递方式是引用传递
- 搜索引擎命令inurl代表什么意思及简单安全隐患发现