存储器管理单元、虚拟地址、内存映射的概念



一、MMU

MMU是存储器管理单元的缩写,是用来管理虚拟内存系统的器件。MMU通常是CPU的一部分,本身有少量存储空间存放从虚拟地址到物理地址的匹配表。此表称作TLB(转换旁置缓冲区)。所有数据请求都送往MMU,由MMU决定数据是在RAM内还是在大容量存储器设备内。如果数据不在存储空间内,MMU将产生页面错误中断。

MMU的两个主要功能是:

1.     将虚地址转换成物理地址。

2.     控制存储器存取允许。MMU关掉时,虚地址直接输出到物理地址总线。

 

二、虚拟地址

任何时候,计算机上都存在一个程序能够产生的地址集合,我们称之为地址范围。这个范围的大小由CPU的位数决定,例如:一个32位的CPU,它的地址范围是0~0xFFFFFFFF(4GB),而对于一个64位的CPU,它的地址范围为0~0xFFFFFFFFFFFFFFFF。这个范围就是程序能够产生的地址范围,把这个范围称为虚拟地址空间,该空间的某一个地址称为虚拟地址。

 

三、地址映射

大多数使用虚拟存储器的系统都是用一种称为分页的技术。虚拟地址空间的划分成称为页(Page)的单位,而相应的物理地址空间也进行划分,单位是页框(Frame)。页和页框的大小必须相同。

一个物理页的大小为4KB,CPU用来把虚拟地址转换成物理地址的信息存放在叫做页目录和页表的结构里。页表中的每条项目都描述部分内存映射到物理地址之间的转换,页表按照虚拟地址组织,除了描述虚拟页到物理页的转换,页表还提供页的访问权限和存储属性。

页表(也叫页目录),一个页表的大小为4K字节,放在一个物理页中。由1024个4字节的页表项组成。页表项的大小为4个字节(32bit),所以一个页表中有1024个页表项。页表中的每一项的内容(每项4个字节,32bit)高20bit用来放一个物理页的物理地址,低12bit放着一些标志。

 

需将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址,这一过程称为地址映射

 

CPU把虚拟地址转换成物理地址:
一个虚拟地址,大小4个 字节(32bit),包含着找到 物理地址的信息,分为3个部分:
第22位到第31位这10位(最高10位)是页目录中的索引,
第12位到第21位这10位是 页表中的索引,
第0位到第11位这12位(低12位)是页内偏移。

对于一个要转换成物理地址的虚拟地址:

CPU首先根据CR3中的值,找到页目录所在的物理页。

然后根据虚拟地址的第22位到第31位这10位(最高的10bit)的值作为索引,找到相应的页目录项(PDE,page directory entry),页目录项中有这个虚拟地址所对应页表的物理地址。

有了页表的物理地址,根据虚拟地址的第12位到第21位这10位的值作为索引,找到该页表中相应的页表项(PTE,page table entry),页表项中就有这个虚拟地址所对应物理页的物理地址。

最后用虚拟地址的最低12位,也就是页内偏移,加上这个物理页的物理地址,就得到了该虚拟地址所对应的物理地址。

地址映射分类

地址映射也可以成为地址重定位或地址变换,可以分为以下两类:
  1. 静态重定位
    当用户程序被装入内存时,一次性实现逻辑地址到物理地址的转换,以后不再转换(一般在装入内存时由软件完成)。
  2. 动态重定位
    在程序运行过程中要访问数据时再进行地址变换(即在逐条指令执行时完成地址映射。一般为了提高效率,此工作由硬件地址映射机制来完成。由硬件支持,软件硬件结合完成。硬件上一般需要一对寄存器的支持)。

猜你喜欢

转载自blog.csdn.net/weixin_42155195/article/details/80940611
今日推荐