MMU:Memory Management Unit
内存管理单元
主要功能:
将虚拟地址转换成实际的物理地址
对物理内存设置访问权限
TLB (Translation Lookaside Buffers)
即转换快表,又简称快表,可以理解为MMU内部专用的存放页表的cache,保存着最近使用的PTE乃至全部页表。MMU接收到虚拟地址后,首先在TLB中查找,如果找到该VA对应的PTE就直接转换,找不到再去外存页表查找,并置换进TLB。TLB属于片上SRAM,访问速度快,通过TLB缓存PTE可以节省MMU访问外存页表的时间,从而加速虚实地址转换。TLB和CPU cache的工作原理一样,只是TLB专用于为MMU缓存页表。
MMU的工作过程:
由协处理器(CP15)控制的
段(Section,1MB)
页(page) 大页(64KB) 小页(4KB)极小页(1KB)
条目 描述符(Descriptor) 段描述符
大页描述符
小页描述符
极小页描述符 起始物理地址
粗页表描述符
细页表描述符 保存二级页表的物理地址
转换过程:
(1)根据给定的虚拟地址找到一级页表中的条目
(2)如果此条目是段描述符,则返回物理地址,转换结束
(3)如果此条目是二级页表描述符,继续利用虚拟地址在二级页表中找到下一个条目;
(4)如果这第二个条目是叶描述符,则返回物理地址,转换结束;
(5)其他情况出错
描述符 | 说明 |
---|---|
Section Base address | 段基地址(相当于页框号首地址) |
AP | 访问控制位 Access Permission |
Domain | 访问控制寄存器的索引 Domain与AP配合使用,对访问权限进行检查 |
C | write-through(WT)模式 |
B | write-back(WB)模式(C/B在同一时刻只能有一个被置为1) |
程序块的交换 由OS完成
内存 磁盘
虚拟地址
32位CPU 0x0-0xFFFFFFFF(4G)
64位CPU 0x0-0xFFFFFFFF FFFFFFFF(64T)
物理地址只是虚拟地址的一个子集
内存为256MB的32位x86主机
虚拟地址:0x00000000-0xFFFFFFFF(4GB)
物理地址:0x00000000-0x0FFFFFFF(256MB)
MMU发现页面没有被映射时,MMU通知CPU发生一个缺页故障(page fault).这种情况下操作系统必须处理这个页故障,它必须从8个物理页框中找到1个当前很少被使用的页框并把该页框的内容写入外围存储器(page copy),随后把需要引用的页映射到刚才释放的页框中(修改映射关系),然后重新执行产生故障的指令
访问控制机制(Access Permission)
CPU通过某种方法判断当前程序对内存的访问是否合法(是否有权利对该内存进行访问),如果当前的程序并没有权限对即将访问的内存区域进行操作,则CPU将引发一个异常,Pression fault(通用保护异常)
DOMAIN ACCESS CONTROL REGISTER | 访问控制寄存器 | 该寄存器有效位为32,被分成16个区域,每个区域由2bit组成,说明了当前内存的访问权限检查的级别 |
---|---|---|
00 | 访问控制寄存器, | 不允许被访问,访问引起domain fault |
01 | Client | 必须配合该内存区域的段描述符中AP位进行权检查 |
10 | Reserved | 保留状态(最好不用,以免引起不能确定的问题) |
11 | Manager | 不对访问进行权限检查 |
field | AP | S bit | A bit | 说明 |
---|---|---|---|---|
01 | 10 | 系统会对访问进行访问权限的检查 | ||
11 | 10 | 系统会对任何内存区域访问进行访问权限的检查 | ||
01 | 11 | 系统会对该访问进行访问权限的检查,程序对该描述符描述的内存都可以顺利地进行读写操作 | ||
01 | 00 | 0 | 0 | 系统会对该访问进行访问权限的检查,程序对该描述符描述的内存都只能进行读操作 |
两个结论:
1.对某个内存区域的访问是否需要进行权限检查是由该内存区域的描述符中的Domain域决定的。
2.某个内存区域的访问权限是由该内存区域的描述符中的AP位和协处理器CP15中Control Register1(控制寄存器1)中的S bit和R bit所决定的