MMU初始化

MMU(Memory Management Unit)主要负责虚拟地址到物理地址的转换,并控制内存访问权限。转换流程包括:根据虚拟地址获取一级页表索引,通过索引找到表项,依据表项决定转换方式(段转换或细页转换)。Linux系统通常采用细页转换。段式转换通过一级表项的特定部分获取段基地址,加上虚拟地址的偏移量得到物理地址。细粒度页转换涉及二级页表,通过表项找到物理页基地址和偏移量确定物理地址。转换的粒度大小由二级表项的低两位决定。初始化MMU包括建立页表、写入TTB、设置权限和使能MMU等步骤。

一、MMU作用
不同的进程访问相同的地址,可能得到不同的值,因为使用的是MMU进行地址转换;复杂程序中一般使用的是虚拟地址,裸机中才会使用绝对地址,虚拟地址和绝对地址是通过MMU进行转换的,当MMU不工作的时候,程序使用的就是绝对地址;除了地址转换的作用,MMU还可以控制内存单元的访问权限。
二、MMU转换流程简述
1.从虚拟地址取出前面的31-20位,作为索引。
2.根据索引在translation table(一级页表)中找到相应的表项。
3.根据表项最低两位的值决定第二阶段的转换方式。
00:转换无效
01:粗页转换
10:段转换
11:细页转换
4.linux系统一般用细页转换,也有一定的处理器和操作系统用段转换,很少用粗页转换。
5.关于TTB(translation table base)
(1)translation table存放在内存中。
(2)由程序员制造,故程序员知道其基地址(TTB)。
(3)程序员将TTB写入cp15的c2寄存器(TTB寄存器)。
(4)MMU工作的时候从c2寄存器去到TTB,从而找到translation table,进而利用虚拟地址的31-20位可以在该表中找到相应的表项,开始虚拟地址到物理地址的转换。

三、详细转换流程
1.关于段式转换
(1)前提是由虚拟地址找到的一级表项低两位是10。
(2)由表项的31-20位(和虚拟地址的31-20位作为表象索引不一样)得到段的基地址(物理地址)。
(3)由虚拟地址的19-0作为偏移量,每个段的大小事1MB。
(4)基地址 + 偏移量 = 段式转换的物理地址。

2.细粒度页转换
(1)前提是由虚拟地址找到的一级表项低两位是11。
(2)由一级表项的31-12位作为二级页表的基地址找到二级页表。
(3)由虚拟地址的19-10作为二级页表的索引在二级页表中找到相应的表项
(4)由二级页表表项的前面(31-12)提供物理页的基地址,由虚拟地址的11-0位作为偏移(假设二级表项的低两位是10),
(5)物

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值