1、第4章存储系统4.5虚拟存储器4.5.1虚拟存储器的概念 虚拟存储技术是为了克服内存空间不足而提出的,由于软件功能越来越强,程序员编程时会觉得主存容量不够用。这样就提出了虚拟存储技术,将辅存和主存结合,两者的地址空间统一编址,形成比实际主存空间大得多的逻辑地址空间。将程序中出现的地址称为“虚拟地址”,而实际主存的地址称“物理地址”。虚拟存储技术是在主存和辅存之间,增加软件及硬件,使主存辅存之间信息交换,程序再定位,地址转换都能自动进行。程序员可以使用的空间比实际的主存空间大得多,称为虚拟存储器(Virtual Memory),简称VM。4.5.2虚拟存储器的基本管理方法 虚拟存储器的管理方式有
2、段式、页式和段页式三种。(1)段式虚拟存储器 一个程序往往包含着逻辑上相互独立的程序段(如过程、子程序等)。段式虚拟存储器就是将程序按其逻辑功能分段,程序按段装入主存,在内存中建立段表。运行程序时先查段表,将虚拟地址转换为实际内存地址。段式虚拟存储器通过段表实现虚实地址转换。每一程序段在段表中都占有一个表目,记录各段是否装入内存的标记、装入内存后的实际地址以及该段的长度。虚地址包括段号和段内地址。当访问程序段时,首先根据段号查找到段表中表目地址,查该段的装入位,若该段已经在内存,则由该表目中取出该段在实存中的首地址与段内地址相加,得到实际地址。若装入标记表明该段不在主存中,则要从辅存中调入。4
3、.5.2虚拟存储器的基本管理方法 段式虚拟存储器中虚拟地址向实存地址转换的过程如图4-30。4.5.2虚拟存储器的基本管理方法 段式虚拟存储器的优点是段的分界和程序的自然分界对应,段的逻辑独立性使它易于编译、管理、修改和保护,也便于多道程序共享。缺点是整个段必须一起装入或调出主存,这使得段长不能大于主存容量,从而限制了虚拟空间的容量;而且各段的长度不相同,段的起点和终点不定,给主存空间分配带来麻烦,容易在实存中留下零碎存储空间,造成浪费。4.5.2虚拟存储器的基本管理方法(2)页式虚拟存储器 将辅存和主存空间都分成大小相同的存储空间,称为“页”。辅存的页是虚页,主存的页是实页。虚存地址包括逻辑
4、页号和页内地址;实存地址包括物理页号和页内地址。虚存地址到主存地址的转换是由主存中的页表来实现的。当程序的某一页调入主存时,将主存实际地址的页号记录在页表中,并将装入标记设为“1”,表明该页已经在主存中。当访问主存时,根据逻辑页号查找页表,若该页已装入主存,将页表中查到的实际页号与页内地址组装起来,即得到实际地址。若装入标记为“0”,即该页未装入主存,则产生缺页中断,需要根据替换算法将需要的页调入。4.5.2虚拟存储器的基本管理方法 页式管理的地址转换如图4-31。4.5.2虚拟存储器的基本管理方法 页式虚拟存储器中,虚存、实存页面大小都相等,便于主存辅存间信息调进调出,另外各个页面不要求占用
5、连续主存空间,每页运行完后,可以分配给其他程序调入,主存空间利用率高。但是由于页不是逻辑上独立的,所以处理、保护和共享都不如段式方便。4.5.2虚拟存储器的基本管理方法(3)段页式虚拟存储器 将段式虚拟存储器和页式虚拟存储器结合起来,可以充分发挥两种管理方式的优点。段页式虚拟存储器中,把程序按逻辑分段后,再把每段分成固定大小的页。程序调入主存按页面进行,但是又可以按段实现共享和保护。程序虚拟地址包括段号、页号和页内地址。实地址包括物理页号和页内地址。内存中用段表和页表实现虚拟地址到实地址的转换。每个程序可由若干段组成,每段又由若干页组成。在主存中,每个程序都有一张段表,每段都有一张页表,由段表指明该段页表的起始地址,由页表指明该段各页在主存中的位置以及装入标记等信息。4.5.2虚拟存储器的基本管理方法 段页式虚拟存储器的地址转换过程如图4-32。4.5.2虚拟存储器的基本管理方法 当进行地址转换时,由段表基址寄存器给出段表的首地址,虚地址的段号指明要访问的段表中的哪个表目,两者相加找到该段相应的页表在主存中的首地址。将首地址再与虚地址中的段内虚页号相加,找到页表中的某一表目,将该表目中登记的实页号与虚地址中的页内地址组装后,得到实存地址。段页式虚拟存储器的缺点是地址转换过程中需要多次查表,这样地址变换的速度将会影响存储器的访问速度。