linux mmu cpu

 

Linux中CPU是如何访问到内存的?--MMU最基本原理(转)

什么是MMU?

摘自维基百科:
   内存管理单元(英语:memory management unit,缩写为MMU),有时称作分页内存管理单元(英语:paged memory management unit,缩写为PMMU)。它是一种负责处理中央处理器(CPU)的内存访问请求的计算机硬件。它的功能包括虚拟地址到物理地址的转换(即虚拟内存管理)[1]、内存保护、中央处理器高速缓存的控制,在较为简单的计算机体系结构中,负责总线的仲裁以及存储体切换(bank switching,尤其是在8位的系统上)。
   在开始之前,希望读者简略读过我之前写的一篇文章:

操作系统总结之内存管理(除虚拟内存管理)

以下论述,皆以32位为例

首先,假设页表只有一级:

对于一个有MMU的CPU而言,MMU开启后,CPU是这样寻址的:CPU任何时候,一切时候,发出的地址都是虚拟地址,这个虚拟地址发给MMU后,MMU通过页表来在页表里面查出来这个虚拟地址对应的物理地址是什么,从而去访问外面的内存条。MMU里面的页表地址寄存器,记录了页表本身的存放位置。

 

分页存储管理将一个进程的逻辑地址空间(就是虚拟地址空间)分成若干个大小相等的片,称为页面或页,相应地,把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或者页框

现在我们假设每一页的大小是4KB(意思就是将虚拟地址空间和物理地址空间均分为小块(4KB)),如下所示:

 

 而且假设页表只有一级,这个页表长成下面这个样子,页表的每一行是32个bit

 

 

 

那么MMU会用0这个下标去访问一级页表(一级页表的地址填入MMU的页表地址寄存器)的第0行,第0行的内容写的是2MB(此处不再是最终的物理地址,而是二级页表的物理地址),证明二级页表的地址在2MB,于是MMU自动去以中间的10位作为下标,去查询位置在2MB的二级页表,在2级页表里面,最终查到第0页(地址范围0x00000000~0x00000FFF)这个虚拟地址的物理地址是1GB(这是自己定义的,没有来源),于是MMU去访问内存条的1GB+16这个物理地址。

 

 

 

 

一些概念:

  • 虚拟地址:就是逻辑地址,又叫虚地址
  • 分页存储管理将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,相应地,把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或者页框
  • 每个进程一个页表,存放在物理内存.页表的起始地址在进程未执行时,页表的始址和页表长度存放在本进程的PCB中;进程执行时将两个数据装入页表寄存器 。MMU访问它直接通过该页表寄存器(物理地址)访问

 

 

参考:

转载:https://codeantenna.com/a/vvRWREgz1O

https://www.cnblogs.com/Tattoo-Welkin/p/10335234.html

posted @   redrobot  阅读(138)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示