Linux 内存管理:缺页异常的几种原因

       给定一个线性地址,MMU 通过页目录表、页表的转换,找到对应的物理地址。在这个过程中,如果因某种原因导致无法访问到最终的物理内存单元,CPU 会产生一次缺页异常,从而进入缺页异常处理程序

       总结一下,缺页异常的原因有以下几种: 

1、导致缺页异常的线性地址根本不在进程的“虚存区间”中,段错误。(栈扩展是一种例外情况)

2、地址在“虚存区间”中,但“虚存区间”的访问权限不够;例如“区间”是只读的,而你想写,段错误

3、权限也够了,但是映射关系没建立;先建立映射关系再说

4、映射关系也建立了,但是页面不在内存中。肯定是换出到交换分区中了,换进来再说

5、页面也在内存中。但页面的访问权限不够。例如页面是只读的,而你想写。这通常就是 “写时拷贝COW” 的情况

6、缺页异常发生在“内核动态映射空间”。这是由于进程进入内核后,访问一个通过 vmalloc() 获得线性地址而引起的异常。对这种情况,需要将内核页目录表、页表中对应的映射关系拷贝到进程的页目录表和页表中。

本文转自:http://www.xuebuyuan.com/1500964.html

       从第4条原因可以看出“虚拟内存”即:指计算机呈现出要比实际拥有的内存大得多的内存量。使得应用程序认为自己有足够可用的连续内存空间,而实际上,它不仅通常被分割为多个物理内存碎片,而且还有部分存在于磁盘上,每次缺页中断时才调入内存。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值