深刻理解计算机系统(虚拟存储器)

       虚拟存储器是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,他为每一个进程提供了一个大的、一致的和私有的地址空间。
程序员

        虚拟存储器提供了三个重要的能力:数组

         1)它将主存当作是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据须要在磁盘和主存之间来回传送数据,经过这种方式,它高效的使用了主存。缓存

         2)它为每一个进程提供了一致的地址空间,从而简化了存储器管理。工具

         3)它保护了每一个进程的地址空间不被其余进程破坏。spa

       程序员为何须要理解虚拟存储器?
操作系统

       虚拟存储器是中心的。虚拟存储器是强大的。虚拟存储器是危险的。翻译

物理和虚拟寻址对象

        计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组。每字节都有一个惟一的物理地址(Physical Address,PA)。CPU访问存储器的最天然的方式就是使用 物理地址。咱们把这种方式称为物理寻址(physical addressing)。索引

        早期的PC机使用物理寻址。现代处理器使用的是一种称为虚拟寻址的寻址形式 。进程

        使用虚拟寻址时,CPU经过生成一个虚拟地址来访问主存,这个虚拟地址再被送到存储器以前先转换成适当的物理地址。将一个虚拟地址转换为物理地址的任务叫作地址翻译。就像异常处理同样,地址翻译须要CPU硬件和操做系统之间的紧密合做。CPU芯片上叫作存储器管理单元的专用硬件,利用存放在主存中的查询表来动态翻译虚拟地址,该表的内容是由 操做系统管理的。

地址空间

            地址空间是一个非负整数地址的有序集合:{0,1,2,...}若是地址空间中的整数是连续的,那么咱们说它是一个线性地址空间。为了简化讨论,咱们老是假设使用的是线性地址空间。在一个带虚拟存储器的系统中,CPU从一个有N=2^n个地址的地址空间中生成虚拟地址,这个地址空间称为虚拟地址空间:{0,1,2,...,N-1},一个地址空间的大小是由表示最大地址所须要的位数来描述的。例如,一个包含N=2^n个地址的虚拟地址空间就叫作一个n位地址空间。现代系统典型的支持32位或者64位虚拟地址空间。

            一个系统还有一个物理地址空间 ,它与系统中物理存储器的M个字节相对应:{0,1,2,...,M-1},M不要求是2的幂,可是为了简化讨论,咱们假设M=2^m。

            地址空间的概念是很重要的,由于它清楚地区分了数据对象(字节)和它们的属性(地址)。一旦认识到了这种区别,那么咱们就能够将其推广,容许每一个数据对象有多个独立的地址,其中每一个地址都选自一个不一样的地址空间。这就是虚拟存储器的基本思想。主存中的每一个字节都有一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址。

虚拟存储器做为缓存的工具

            概念上而言,虚拟存储器被组织为一个由存放在磁盘上的N个连续的字节带下的单元组成的数组。每字节都有一个惟一的虚拟地址,这个惟一的虚拟地址是做为到数组的索引的。磁盘上数组的内容被缓存在主存中。和存储器层次结构中的其余缓存同样,磁盘上的数据被分割成块,这些块做为磁盘和主存之间的传输单元。VM系统经过将虚拟存储器分割为称为虚拟页的大小固定块来处理这个问题。每一个虚拟页的大小为P=2^p字节。相似的,物理存储器被分割为物理页,大小也为P字节(物理页也称为页帧)。

DRAM缓存的组织结构

            为了有助于清晰的理解存储层次结构中不一样的缓存概念,咱们将使用术语SRAM缓存来表示位于CPU和主存之间的L一、L2和L3高速缓存,并用术语DRAM缓存来表示虚拟存储器系统的缓存,它在主存中缓存虚拟页。