Linux内存系统
Linux操作系统实现了一套完整的虚拟内存系统,管理进程的地址空间和缺页处理。
内存区域描述符(vm_area_struct):
- 每个进程的虚拟地址空间由一组区域(area) 组成,每个区域对应连续的虚拟地址段。
- 区域描述符记录了区域的起始地址、结束地址、读写执行权限以及是否与其他进程共享。
- Linux按页表结构维护这些区域,但区域是比页表更粗粒度的管理单元,便于快速查找。
缺页处理流程:
- MMU触发缺页异常,内核进入缺页处理函数。
- 内核检查触发地址是否位于某个已注册的内存区域内:
- 若不在任何区域内(如解引用NULL指针),触发段错误(SIGSEGV),终止进程。
- 若在区域内且权限正确,尝试从磁盘加载数据。
- 若访问权限违反(如写只读页),也触发段错误。
- Linux使用最近最少使用(LRU)近似算法选择牺牲页。
交换机制:当物理内存不足时,内核线程kswapd负责将不常用的页交换到磁盘。
链接到
- 上一个知识点:9.12 Corei7内存系统
- 下一个知识点:9.14 动态内存分配概念