DRAM内存原理(五)内存管理单元MMU

来源:互联网 发布:网络填表信息采集 编辑:程序博客网 时间:2024/04/27 22:51

0、前言

  CPU和内存之间有三根总线,地址,数据,和控制总线。这是在说地址之间的问题。cpu和内存之间用地址来查找数据,但是两者的地址并不总是一样的,cpu产生的是逻辑地址,而内存的就是物理地址。通常都是不一样的,所以需要地址映射。正好是从编程人员的角度看,(不考虑解释执行)程序总是经过源程序编译,连接,运行三个阶段。在这个过程中,指令和数据就要调到内存。

地址捆绑的三种形式:

编译时:编译时就生成了绝对地址。MS-DOS的COM程序就是这样的。

加载时:编译时编译器生成可重定位代码,在加载时捆绑。

执行时:执行时才能绑定。

上面说的都是内存中的物理地址,对于编译时和加载时的地址,物理地址和cpu产生的逻辑地址都是一样的。但是对于运行时的绑定,逻辑地址(又称虚拟地址)和物理地址是不一样的。这时候就需要有一个地址映射的问题,这个问题由MMU(内存管理单元)来完成。

一、MMU的产生

虚拟存储器(Virtual Memory)的基本思想是程序,数据,堆栈的总的大小可以超过物理存储器的大小,操作系统把当前使用的部分保留在内存中,而把其他未被使用的部分保存在磁盘上比如对一个16MB的程序和一个内存只有4MB的机器,OS通过选择,可以决定各个时刻将哪4M的内容保留在内存中,并在需要时在内存和磁盘间交换程序片段,这样就可以把这个16M的程序运行在一个只具有4M内存机器上了。而这个16M的程序在运行前不必由程序员进行分割。

 任何时候,计算机上都存在一个程序能够产生的地址集合,我们称之为地址范围。这个范围的大小由CPU的位数决定,例如一个32位的CPU,它的地址范围是0~0xFFFFFFFF (4G)而对于一个64位的CPU,它的地址范围为0~0xFFFFFFFFFFFFFFFF (16T),这个范围就是我们的程序能够产生的地址范围,我们把这个地址范围称为虚拟地址空间,该空间中的某一个地址我们称之为虚拟地址。与虚拟地址空间和虚拟地址相对应的则是物理地址空间和物理地址,大多数时候我们的系统所具备的物理地址空间只是虚拟地址空间的一个子集。在没有使用虚拟存储器的机器上,虚拟地址被直接送到内存总线上,使具有相同地址的物理存储器被读写。而在使用了虚拟存储器的情况下,虚拟地址不是被直接送到内存地址总线上,而是送到内存管理单元——MMU。MU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权。

二、MMU的工作过程

1、页式管理

大多数使用虚拟存储器的系统都使用一种称为分页(paging)。虚拟地址空间划分成称为页(page)的单位,而相应的物理地址空间也被进行划分,单位是页框(frame).页和页框的大小必须相同。接下来配合图片我以一个例子说明页与页框之间在MMU的调度下是如何进行映射的:

内存和外围存储器之间的传输总是以页为单位的,上图中绿色部分是物理空间,其中每一格表示一个物理页框。橘黄色部分是虚拟空间,每一格表示一个页,它由两部分组成,分别是Frame Index(页框索引)和位ppresent存在位)。下面我们举一个例子:
MOVE REG,0 //
0号地址的值传递进寄存器REG.
虚拟地址0将被送往MMU,MMU看到该虚地址落在页0范围内(页0范围是04095),从上图我们看到页0所对应(映射)的页框为2(页框2的地址范围是819212287),因此MMU将该虚拟地址转化为物理地址8192,并把地址8192送到地址总线上。内存对MMU的映射一无所知,它只看到一个对地址8192的读请求并执行它。MMU从而把04096的虚拟地址映射到819212287的物理地址。

但是这个方法并没有有效的解决虚拟地址空间比物理地址空间大的问题。从上图中我们可以看到,我们只能把16个页中的8个进行有效的映射,假设虚拟页并没有得到映射。是通知CPU发生一个缺页故障(page fault.这种情况下操作系统必须处理这个页故障,它必须从8个物理页框中找到1个当前很少被使用的页框并把该页框的内容写入外围存储器(这个动作被称为page copy),随后把需要引用的页映射到刚才释放的页框中(这个动作称为修改映射关系)。




0 0
原创粉丝点击