虚拟内存
解决问题
- 超负载的使用内存,软件体积远远大于内存总量。
- 多道程序运行。
基本思想
每个程序拥有自己的地址空间,这个空间被分割成多个块,每一块称作一页或页面(page)。每一页有连续的地址范围。这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序。当程序 引用到一部分在物理内存中的地址空间时,由硬件立刻执行必要的映射。当程序引用到一部分不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的指令。从某个角度来讲,虚拟内存是对基址寄存器和界限寄存器的一种综合。
实现
分页
大部分虚拟内存系统中都使用一种称为分页(paging)的技术。
MMU
在没有虚拟内存的计算机上,系统直接将虚拟地址送到内存总线上,读写操作使用具有同样地址的物理内存字;而在使用虚拟内存的情况下,虚拟地址不是被直接送到内存总线上。而是被送到内存管理单元(Memory Management Unit,MMU),MMU把虚拟地址映射为物理内存地址,
页帧
虚拟地址空间按照固定大小划分成称为页面(page)的若干单元。在物理内存中对应的单元称为页框(page frame)。RAM和磁盘之间的交换总是以整个页面为单元进行的。
虚拟地址使用过程
当程序试图访问地址0时,例如执行下面这条指令
MOV REG,0
将虚拟地址0送到MMU。MMU看到虚拟地址落在页面0(04095),根据其映射结果,这一页面对应的是页框2(819212 287),因此MMU把地址变换为8192,并把地址8192送到总线上。内存对MMU一无所知,它只看到一个读或写地址8192的请求并执行它。MMU从而有效地把所有从04095的虚拟地址映射到了819212287的物理地址。
![[791659266160_.pic.jpg]]
通过恰当地设置MMU,可以把16个虚拟页面映射到8个页框中的任何一个。但是这并没有解决虚拟地址空间比物理内存大的问题。在图3-9中只有8个物理页框,于是只有8个虚拟页面被映射到了物理内
存中,在图3-9中用叉号表示的其他页并没有被映射。在实际的硬件中,用一个"在/不在"位(present/absent bit)记录页面在内存中的实际存在情况。当程序访向了一个未映射的页面,例如执行指令
MOV REG,32780
将会发生什么情况呢?