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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具