【MMU】认识 MMU 及内存映射的流程

MMU(Memory Manager Unit),是内存管理单元,负责将虚拟地址转换成物理地址。除此之外,MMU 实现了内存保护,进程无法直接访问物理内存,防止内存数据被随意篡改。

一、内存管理体系结构

MMU:

  • TLB模块:用于缓存从虚拟地址到物理地址的转换结果
  • TWU模块:负责完成页表的查过程

Cache:

        高速缓存缓存某物理地址对应的内容

页表:

  • 将虚拟地址转换为物理地址
  • 管理CPU对物理页的访问(即检查是否具备读、写、可执行等权限)
  • 隔离地址空间(隔离各个进程的地址空间,使其互不影响)

PTE: PTE 是一种数据结构,用于描述虚拟内存和物理内存之间的映射关系。通过使用PTE,CPU可以根据虚拟地址获取到物理内存地址,同时检查该地址的访问权限。

  • 物理页地址:虚拟内存所映射的物理内存页的地址
  • 访问权限:指示当前页面是否可读、可写、可执行等权限信息
  • 脏位:标记页面是否被修改过,以支持页面置换
  • 共享位:指示页面是否可以被共享
  • 缓存位:用于控制页面的缓存策略,例如是否可以缓存到Cache

二、虚拟地址到物理地址的转换流程

1、读过程

MMU 先检查 TLB 是否命中(即TLB 是否保存了该虚拟地址和物理地址的映射)

  • 如果 TLB 命中了,继续查询该物理地址的内容是否存在于 cache 中。
    • 若cache命中,直接取出内容返回给处理器
    • 若cache没有命中,进一步访问物理内存获取相应的内容
  • 如果 TLB 没有命中,MMU 通过 TWU 查询页表,翻译虚拟地址得到物理地址(具体过程请看下面“页命中”部分)

注意:这里存在一个特殊的过程“缺页”,放到后面介绍

2、写过程

MMU 先检查 TLB 是否命中(即TLB 是否保存了该虚拟地址和物理地址的映射)

  • 如果 TLB 命中了,继续查询该物理地址是否存在于 cache 中
    • 若 cache 命中,需要判断这个数据是否为脏的(判断cache和内存中的数据是否一致,如果不一致需要先更新)
      • 如果不是脏数据,更新 cache 中该物理地址对应的内容,同时标记为脏数据
      • 如果是脏数据,先将上一次的数据更新到内存,然后再从内存中读出对应物理地址的内容(下面“注意”中解释)。然后再更新 cache 中该物理地址对应的内容
    • 若 cache 没有命中,则从内存读取该物理地址的内容,然后写入,并标记为脏数据
  • 如果 TLB 没有命中,那就直接访问内存页表,并写入内容

注意:实际会读取一小块内存,这块内存里不仅包含了你后续要修改的内容,还有其他内容,相当于读取出来的同时,将 cache 中该物理地址临近的内容也做了一个更新。这种操作称为“写回”,更详细的写内存过程可以参考:9、CPU Cache 的数据写入_沐梓琼的技术博客_51CTO博客

二、页命中

页命中就是 MMU 成功将虚拟地址转换为物理地址,获取到物理地址对应内容的过程。(下图是将过程简化以后的结果,这里假设TLB没有命中

ps:PTE 是一种数据结构,用于描述虚拟内存和物理内存之间的映射关系,包含的内容有物理内存页的地址、访问权限。

① 处理器对虚拟地址(VA) 进行访问

② MMU 通过TWU遍历物理内存页表中的 PTEA(PTE地址)

③ 物理内存返回 PTE(检查对应物理地址是否存在,或者是否具备访问权限)

④ MMU 通过PTE 映射物理地址,将其传给高速缓存或物理内存

⑤ 高速缓存或物理内存返回数据给处理器

三、缺页

与页命中相反,当MMU没有找到虚拟地址对应的物理地址时,这个时候为防止系统崩溃,需要采取补救措施。这种异常便是“缺页”(这里同样假设TLB没有命中

① 处理器对虚拟地址(VA) 进行访问

② MMU 通过TWU遍历物理内存页表中的 PTEA(PTE地址)

③ 物理内存返回 PTE(有效位为0,触发异常,CPU响应异常,运行相应的异常处理程序)

补救措施:

④ 选出物理内存中的牺牲页,如果该页被修改过,先保存到磁盘

⑤ 异常处理程序从磁盘中加载新的页面,并更新触发异常的PTE

⑥ 异常处理程序返回到原来的进程,重新发送一个VA 给MMU(接下来就是“命中页”的流程了)

选择内存中牺牲页的基准:页面置换算法

  • FIFO:先进先出,选择最先进入内存的页进行替换
  • LRU:最近最久未被使用
  • LFU:最近被引用次数最少
  •  ... ...

选择磁盘中新页的基准:页面访问模式

        操作系统会跟踪页面的访问模式,比如哪些页面被频繁访问、哪些页面很少使用。这些信息可以帮助 OS 更智能地选择要加载的页面。

四、虚拟地址与物理地址的多级映射

1、为什么存在多级映射

多级映射一方面增强了内存保护机制,通过将虚拟空间划分为多个层次,每个层次都有相应的权限控制和访问控制,可以更加有效的防止非法访问。另一方面,多级映射可以降低每一页的大小,通过合理地组织页表结构体,可以减少页表项的数量和查找时间。

如果是单级映射,相当于把大量内容放在一个页表里,每次要查找内容都要一个个找过去;如果是多级映射,相当于可以通过目录获取到页表项,减少查找时间。 

2、多级映射流程

虚拟地址(VA)被分为了三部分,

获取PDE (Page Directory Entry)

页目录是一个数组,数组中的每个元素都是一个 PDE,PDE包含了页表项的物理地址,这使得操作系统能找到与当前虚拟地址对应的页表,此外PDE还包含了权限控制位和指示位:

  • 权限控制位:如读、写、执行权限等,用于确保进程只能访问被授权访问的区域
  • 页面指示位:用于指示对应页面是否存在于物理内存中,该位为0表示页面不存在

通过虚拟地址的高10位(VA[31:22])来索引页目录,找到对应的页目录条目(PDE)。

获取 PTE

在第一部分介绍了 PTE 包含的内容。使用页目录条目(PDE)中的地址和虚拟地址的中间10位(VA[21:12])相加得到 PTE 的地址。

获取物理地址(PA)

将物理页面帧号的高20位 与虚拟地址的低12位(VA[11:0])拼接起来,形成最终的物理地址(PA)

参考文章:

一文搞懂MMU工作原理 - 知乎 (zhihu.com)

linux中的pte是什么_linux中的pte是什么意思-PHP博客-李雷博客 (mdaima.com)

ARM32 页表映射过程 - DF11G - 博客园 (cnblogs.com)

MMU内存管理单元的工作原理和作用-电子发烧友网 (elecfans.com)

CPU 是如何读写内存的? - 知乎 (zhihu.com)

9、CPU Cache 的数据写入_沐梓琼的技术博客_51CTO博客

  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
分页内存管理单元(MMU)是一种负责处理中央处理器(CPU)的内存访问请求的计算机硬件。它的功能包括虚拟地址到物理地址的转换(即虚拟内存管理)、内存保护、中央处理器高速缓存的控制等。MMU使用虚拟地址中的重要位来索引转换表中的条目,并确定正在访问的内存块。通过MMU的地址转换功能,系统能够运行多个任务,每个任务在自己的私有虚拟内存空间中运行,而不需要了解系统的物理内存映射或其他同时运行的程序。MMU还可以控制每个内存区域的内存访问权限、内存顺序和缓存策略。总之,分页内存管理单元是实现虚拟内存系统的关键硬件组件。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [内存管理单元——MMU](https://blog.csdn.net/weixin_43834468/article/details/130138697)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [操作系统 内存管理单元MMU TLB](https://blog.csdn.net/u014099894/article/details/127342188)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值