Linux 内存管理:缺页异常的几种原因
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
免费下载资源
·
给定一个线性地址,MMU 通过页目录表、页表的转换,找到对应的物理地址。在这个过程中,如果因某种原因导致无法访问到最终的物理内存单元,CPU 会产生一次缺页异常,从而进入缺页异常处理程序。
总结一下,缺页异常的原因有以下几种:
1、导致缺页异常的线性地址根本不在进程的“虚存区间”中,段错误。(栈扩展是一种例外情况)
2、地址在“虚存区间”中,但“虚存区间”的访问权限不够;例如“区间”是只读的,而你想写,段错误
3、权限也够了,但是映射关系没建立;先建立映射关系再说
4、映射关系也建立了,但是页面不在内存中。肯定是换出到交换分区中了,换进来再说
5、页面也在内存中。但页面的访问权限不够。例如页面是只读的,而你想写。这通常就是 “写时拷贝COW” 的情况。
6、缺页异常发生在“内核动态映射空间”。这是由于进程进入内核后,访问一个通过 vmalloc() 获得线性地址而引起的异常。对这种情况,需要将内核页目录表、页表中对应的映射关系拷贝到进程的页目录表和页表中。
本文转自:http://www.xuebuyuan.com/1500964.html
从第4条原因可以看出“虚拟内存”即:指计算机呈现出要比实际拥有的内存大得多的内存量。使得应用程序认为自己有足够可用的连续内存空间,而实际上,它不仅通常被分割为多个物理内存碎片,而且还有部分存在于磁盘上,每次缺页中断时才调入内存。
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e
added ecosystem file for PM2 4 年前
5def40a3
Add host customization support for the NodeJS version 4 年前
更多推荐
已为社区贡献2条内容
所有评论(0)