linux 内存管理基本框架

概述

linux 内核机制采用3层映射机制,逻辑上把32位线性地址划分4个段,各段占有若干位,依次为PGD(全局页面目录),PMD(中间页面目录),PT(页表),以及物理页的偏移。

这里写图片描述

基地址->PGD->PMD->PT->OFFSET->物理页面中相应的地址

进程虚拟空间

32位地址代表4G的地址空间,Linux将这4G地址空间划分为2个部分,最高的1G(0xC000000-0XFFFFFFFF)用于内核本身,称为系统空间,相对应的剩余3G为用户空间,这样每个进程可用的用户空间位3G,系统空间由所有的进程共享,当进程通过系统调用陷入内核时,该进程在共享的地址空间运行,不在有独立的地址空间,但从进程的角度看还是独自拥有4G的虚拟空间。

这里写图片描述

地址映射过程

linux内存管理保留段式存储,但是映射过程中什么也不做,而是采用页式存储。与段式相比页存储管理具有效率高,固定大小,便于管理的特点,每个进程都有自己的PGD,保存在mm_struct中,当调度进程运行的时候内核设置好CR3寄存器,MMU硬件从CR3寄存器取到指向当前页目录指针,对照线性地址格式最终找到物理地址。CPU需要3次访问内存(PGD,PMD,PT)的查找,所以,虚拟内存的高效依赖于cache。

每个进程控制块task_struct中只有一个mm_struct,mm_struct是进程在用户空间的抽象,也是总的控制结构,mm->pgd指向进程页目录,当内核调度进程运行时,就将这个指针转换为物理地址,mm_struct 以及下属结构vm_area_struct表示对内存的需求,当得不到满足时就会产生缺页中断,通过前面页目录等分配物理内存。
这里写图片描述

如果一个区域是一个文件的映射,vm_file将被映射,通过i_mapping获取到这个地址空间的内存。
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值