Linux内存管理 (10)缺页中断处理
16lz
2021-01-22
专题:Linux内存管理专题
关键词:数据异常、缺页中断、匿名页面、文件映射页面、写时复制页面、swap页面。
malloc()和mmap()等内存分配函数,在分配时只是建立了进程虚拟地址空间,并没有分配虚拟内存对应的物理内存。
当进程访问这些没有建立映射关系的虚拟内存时,处理器自动触发一个缺页异常。
缺页异常是Linux内存管理中最复杂和重要的一部分,需要考虑很多相关细节,包括匿名页面、KSM页面、page cache页面、写时复制、私有映射和共享映射等。
首先ARMv7-A缺页异常介绍了从数据异常产生到,具体处理函数的流程;
do_page_fault是缺页中断处理的核心函数,后面几章都围绕它展开;
匿名页面缺页中断、文件映射缺页中断、写时复制分别针对不同情况进行了处理。
此处欠一张缺页中断流程图。
1. ARMv7-A缺页异常
当有中断到来时,硬件会做一些处理;对于软件来说,要做的事情是从中断向量表开始。
__vectors_start是中断异常处理的起点,具体到缺页异常路径是:
__vectors_start-->vector_dabt-->__dabt_usr/__dabt_svc-->dabt_helper-->v7_early_abort-->do_DataAbort-->fsr_info-->do_translation_fault/do_page_fault/do_sect_fault。
重点是do_page_fault。
.section .vectors, "ax", %progbits __vectors_start: W(b) vector_rst W(b) vector_und W(ldr) pc, __vectors_start + 0x1000 W(b) vector_pabt W(b) vector_dabt--------------------------数据异常向量 W(b) vector_addrexcptn W(b) vector_irq W(b) vector_fiq
更多相关文章
- Linux中mprotect()函数的用法
- 使用带有派生列的SQL排名函数
- 数据库截取字符串SUBSTR函数的使用
- SQL Server CLR函数类型不匹配。
- mysql中MAX()函数MIN()函数
- MySQL 中的函数(一:数学函数)
- SQL Server 2008使用sproc中的函数
- MYSQL存储过程,函数,光标
- 请问mysql中有没有类似math.max(1,2)这种可以比较两个值中最大值