专题1-世界一下变大了MMU
1.MMU---存储管理单元
2.不同的进程访问相同的地址,可能得到不同的值,因为使用的是MMU进行地址转换。
3.复杂程序中一般使用的是虚拟地址,裸机中才会使用绝对地址。虚拟地址和绝对地址是通过MMU进行转换的,当MMU不工作的时候,程序使用的就是绝对地址。
4.除了地址转换的作用,MMU还可以控制内存单元的访问权限。
5.地址转换的总体流程:
第一阶段:
(1)从虚拟地址取出前面的31-20位,作为索引。
(2)根据索引在translation table(一级页表)中找到相应的表项。
(3)根据表项最低两位的值决定第二阶段的转换方式。
00:转换无效
01:粗页转换
10:段转换
11:细页转换
(4)linux系统一般用细页转换,也有一定的处理器和操作系统用段转换,很少用粗页转换。。
6.关于TTB(translation table base)
(1)translation table存放在内存中。
(2)由程序员制造,故程序员知道其基地址(TTB)。
(3)程序员将TTB写入cp15的c2寄存器(TTB寄存器)。
(4)MMU工作的时候从c2寄存器去到TTB,从而找到translation table,进而利用虚拟地址的31-20位可以在该表中找到相应的表项,开始虚拟地址到物理地址的转换。。
7.translation table(一级页表)表项格式
二级页表表项格式
8.关于段式转换
(1)前提是由虚拟地址找到的一级表项低两位是10。
(2)由表项的31-20位(和虚拟地址的31-20位作为表象索引不一样)得到段的基地址(物理地址)。
(3)由虚拟地址的19-0作为偏移量,每个段的大小事1MB。
(4)基地址 + 偏移量 = 段式转换的物理地址。
9.细粒度页转换
(1)前提是由虚拟地址找到的一级表项低两位是11。
(2)由一级表项的31-12位作为二级页表的基地址找到二级页表。
(3)由虚拟地址的19-10作为二级页表的索引在二级页表中找到相应的表项
(4)由二级页表表项的前面(31-12)提供物理页的基地址,由虚拟地址的11-0位作为偏移(假设二级表项的低两位是10),
(5)物理页的基地址 + 偏移量 = 虚拟地址对应的物理地址
(6)每一个页有可能是1kB,也有可能是4KB,64kB
(7)由二级表项的低两位决定要寻址页的大小
00:转换无效
01:large page(64KB)转换,此时由二级表项的31-16提供物理页基地址,由虚拟地址的15-0位作为偏移
10:small page(4KB)转换,此时由二级表项的31-12提供物理页基地址,由虚拟地址的11-0位作为偏移
11:tiny page(1KB)转换,此时由二级表项的31-10提供物理页基地址,由虚拟地址的9-0位作为偏移
(8)二级页表也是程序员建立的
10.转换流程
11.代码编写
(1)建立页表
(2)初始化MMU:写入TTB(c2),权限设置(c3),使能MMU(c1)
(3)内存也要进行虚拟地址到物理地址的映射,只不过他们的值是一样的

浙公网安备 33010602011771号