MMU

本文详细介绍了ARM和Intel CPU中的MMU机制,包括逻辑地址、虚拟地址、物理地址的概念及其转换过程,并探讨了MMU中CPU所执行的任务及地址转换原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要从以下几个方面对于ARM和Intel cpu的MMU
1.逻辑地址,虚拟地址,物理地址的概念
2.逻辑地址,虚拟地址,物理地址的转换
3.哪些是CPU自动完成的,哪些是操作系统做的,哪些是用户程序做的

逻辑地址
在编译应用程序的时候,为了让应用程序能够不依赖于某个全局地址,所以对应用程序中的代码和数据都是采用相对地址编译的,也就是说,在用户空间,指令和数据的地址都是从0地址开始的,这就是所谓的逻辑地址

虚拟地址
为了解决内存受限,高效使用等问题,引入了虚拟内存地址,它是一个虚拟的地址空间,不同的CPU有不同的实现方法。
x86使用段选择符:32位段偏移来表示虚拟地址,例如用CS:EIP表示pc,CS只不过是一个16位的选择符,它指定了一个段描述符,再加上段偏移,就可以表示4G的地址空间,这样计算的32位地址称为线性地址。

物理地址
物理内存真实的地址

MMU中CPU做的事情
在启动了页式内存,或者称为虚拟内存管理后,CPU在取指的时候使用的地址,以及取指后得到的操作数是虚拟地址,如果cache没有命中,那么CPU会自动进行虚拟地址到物理地址的转换,然后使用这个内存地址访问内存。
这里涉及三个问题:
1.如何进行地址转换
这个问题实际上属于CPU的范畴,CPU规定了一套地址转换的流程和方法,操作系统其实只需要填表,下面分别以x86和arm进行说明
1)页表基地址寄存器
在x86中使用寄存器,在arm中使用CP15协处理器的C2寄存器。页表基地址寄存器指定了内存中页表的基地址,操作系统需要填写这个页表基地址寄存器
2)页表项
页表中的项目称为页表项,页表项使用一部分bit用来指定基地址,下一级页表的基地址或者是最终页的基地址,剩下的bit各个CPU有自己的用途,一般可以用来表示页表项的类型,或者该页的权限等。操作系统需要填写一级二级页表
3)通用页表转换原理
原理的关键在于CPU要访问的虚拟地址被分成了一个或者多个索引,和一个偏移量。其中有几个索引,那么就对应有几级页表。设虚拟地址表示如下:
31                           0
------------------------------
|IndexM  |  IndexN | OffsetK |
------------------------------
设虚拟地址可以分成IndexM,IndexN,和OffsetK,其中IndexM占有M个bit位,IndexN占有N个bit位,OffsetK占有K个bit位,且 M + N + K = 32
设页表基地址寄存器的内容是Base1,Base1指向第一个页表,Base1的低M+2个bit位为0,M表示使用IndexM作为索引,2表示每个索引项,即页表项的大小是4字节,则Base1[IndexM]就是用IndexM索引到的页表项,其中包含第二个页表的基地址
同理,第二个页表基地址的低N+2个bit位为0,因为这个基地址要与IndexN一起获取最终物理地址的页首地址.
该物理地址页的首地址的低K个bit位为0,因为它要与OffsetK组成最终的物理地址
总上所述,页表转换就是根据页表基地址和从虚拟地址中得到的索引项得到下一级页表基地址,再从虚拟地址中得到索引项得到又下一级页表基地址,根据这一级页表和从物理地址中得到的偏移量最终得到物理地址的过程。这个页表转换原理对于x86和arm是通用的。
以arm中的两级页表转换为例,CPU在得到一级页表的页表项的时候,根据低2bit,可以知道这个表项是Section,粗页表还是细页表。也就是说根据这两个bit,就可以确定后续如何分割虚拟地址
对于Section,显然直接就把后面的20个bit作为offset,组成最终的物理地址
---------------------------
|Index12  |   Offset20    |
---------------------------
对于细页表的1K Tiny页转换,实际上就是把虚拟地址分成
---------------------------------
|Index12  |  Index10 | Offset10 |
---------------------------------
对于粗页表的4K小页转换,实际上就是把虚拟地址分成
--------------------------------
|Index12  |  Index8 | Offset12 |
--------------------------------
对于粗页表还略有不同,在粗页表项中还分为4K的小页和64K的大页。也就是说要求Index8中的低4bit表示的连续16个页表项中的页表基地址,都是相同的基地址,在计算offset的时候,把Index8中的低4bit作为offset使用

2.在转换过程中,发现虚拟地址没有对应的物理地址怎么办
3.在转换过程中,发现没有权限访问物理地址怎么办
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值