专题: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

更多相关文章

  1. Linux中mprotect()函数的用法
  2. 使用带有派生列的SQL排名函数
  3. 数据库截取字符串SUBSTR函数的使用
  4. SQL Server CLR函数类型不匹配。
  5. mysql中MAX()函数MIN()函数
  6. MySQL 中的函数(一:数学函数)
  7. SQL Server 2008使用sproc中的函数
  8. MYSQL存储过程,函数,光标
  9. 请问mysql中有没有类似math.max(1,2)这种可以比较两个值中最大值

随机推荐

  1. android 系统源码在线阅读-------值得收
  2. Failed to find an AVD compatible with
  3. Android常见知识汇总
  4. Android异步任务
  5. Android中 android:gravity 和 android:l
  6. Android接口定义语言(AIDL)
  7. Android xml资源文件中@、@android:type
  8. android动态墙纸有关问题
  9. Android架构组件三 Android Architecture
  10. ANDROID Porting系列一、ANDROID编译系统