内存分配函数如malloc()和mmap()在分配时只建立进程虚拟地址空间;它们并不分配虚拟内存对应的物理内存。当进程访问这些未映射的虚拟内存时,处理器会自动触发页错误异常。
页面错误中断:请求分页系统可以通过查询页表中的状态位来确定正在访问的页面是否驻留在内存中。如果正在访问的页面不在内存中,则会发生页面错误中断。然后操作系统根据页表中的外存地址找到外存中丢失的页,并将其传输到内存中。记忆。
页面错误本身就是一种中断,和普通中断一样,它必须经过以下四个处理步骤。
1.保护您的CPU站点。暂停原因分析
3.转入缺页中断处理程序进行处理。
4.恢复CPU站点并继续运行。
但是,页面错误中断确实会发生。这是由于当页面不在内存中时访问由硬件生成的特殊中断。因此,这与典型的中断不同。
1.缺页中断信号的产生和处理步骤如下:指令执行
2.指令执行期间可能会发生多个页错误中断。
3.典型的中断返回是执行下一条指令。
当访问内存中不存在的页面并且内存已满时,必须通过从内存中调用该页面或将数据发送到磁盘交换区域来替换该页面。这称为缺页。当今操作系统中最常用的页面错误替换算法是:
当今最常用的算法是LRU算法。
do_page_fault是页错误中断的核心函数,主要工作交给__do_page_fault,然后进行一些异常处理__do_kernel_fault和__do_user_fault。
__do_page_fault找到合适的vma,然后主要工作就交给handle_mm_fault了。handle_mm_fault的核心是handle_pte_fault。
handle_pte_fault根据其存在情况处理两种方法:do_fault(文件映射页错误中断)、do_anonymous_page(匿名页页错误中断)、do_swap_page()和do_wp_page(写入时复制)。分类。
1.页面错误异常:硬件和软件之间的接口
当处理器尝试访问无效地址时会发生页面错误异常,是内存管理中的一个重要事件。它可以分为硬件、软件和无效三种类型,涵盖不同的场景,例如:例如,未设置内存分配、进程共享、KSM合并、非法访问等。
页错误异常的硬件支持
当ARMV7架构中发生异常时,处理器暂停执行并跳转到异常向量表,例如:B.数据中止向量。该操作包括切换异常模式、检查页表结构以及更改CP15寄存器。这些详细信息反映在entry-armv.S文件中。
1.异常模式
ARMv7处理器在异常处理过程中区分usr和svc模式,异常向量处理统一转为svc模式,保证统一和稳定。
2.页表结构
FSR(错误状态寄存器)和FAR(错误地址寄存器)提供发生异常时的重要地址和状态信息,通过CP15寄存器的c5和c6显示。
3.页面错误处理流程
Linux内核的处理流程微妙而复杂,根据FSR_INFO结构中的错误类型进行各种操作。从一级页表错误到权限错误再到默认处理do_bad,每一个环节都至关重要。
do_sect_fault
用户模式和内核模式之间存在区别。用户态由__do_user_fault处理,内核态由__do_kernel_fault执行,保证权限和模式的确性。
do_translation_fault
无论是用户空间的页表或权限错误,还是内核空间的特殊作用域,都有do_page_fault等相应的处理函数来保证异常的相关性处理。
do_page_fault
它涵盖了内核态、用户态和中断上下文,包括原子操作、信号处理和资源管理,是内存管理不可或缺的一部分。
季度。后续章节关于内存管理
我们已经描述了缺页异常处理的硬件和软件流程,但实际的深入分析和优化在后面的章节中会逐渐扩展到研究如何更有效地管理内存、减少异常并提高系统性能。
特别提示:想了解更多Linux内核技术吗?欢迎加入我们的Linux内核技术交流群[977878001]。前100名会员可免费获得价值699的内核资料包,内含视频教程、电子书、实战项目和源码,内容涵盖内核学习路线、内存优化等。等领域。
感谢您的阅读。更多精彩内容可参见首页-内核技术中文网-内核技术交流论坛以及缺页异常概述-圈点-内核技术中文网。
上一篇:怎么查电脑内存条型号
下一篇:内存缺页是什么意思