第四章 存储体系

4.2 虚拟存储器

4.2.1 虚拟存储器的管理方式

虚拟存储器通过增设地址映像表机构来实现程序在主存中的定位。

将程序分为若干段或页,用相应的映像表指明程序的某段/页是否装入内存。

已装入:指明其在内存中的起始地址

未装入:在辅存中调段/页,装入主存后在映像表中建立程序空间和实存空间的地址映像关系。

程序执行时通过查映像表将程序(虚)地址变换成实存(实)地址在访问主存。

根据存储映像算法的不同,可有多种不同的存储管理方式的虚拟存储器,主要有段式、页式、段页式3种。

1.段式管理

将主存按段分配的存储管理方式称为段式管理

程序有模块性,一个复杂的大程序可以分成多个逻辑上相对独立的模块。

模块大小各不相同,每个模块都是独立的段,都以该段的起点0相对编址。

当某段由辅存调入主存,系统赋予该段一个基址(该段在实存中的起始地址)。

就可以通过基址和单元在段内的相对位移来形成实存的实际地址。

每道程序在系统中都有一个段(映像)表来存放该道程序各段装入主存的状况信息。

段表的每一项(对应表中每一行)描述该道程序各段装入主存的状况信息。

段名字段用于存放段的名称,有逻辑意义可转换为段号指明。

装入位字段用于指示该段是否已经装入主存,1表示已装入,0表示未装入。

程序执行过程中,隔断的装入为应随着该段是否活跃而动态变换。

段长字段指明该段的大小,以字数/字节数为单位,取决于编址形式。同时提供界线保护检查。

访问方式字段用来标记该段允许的访问方式,提供段的访问方式保护。

段表本身也是一个段,一般常驻主存,也可由辅存调入。

多道程序由基号(程序)指明使用哪个段表基址寄存器。

段表操作不用用户程序原来管理(透明)。

分段方法能使大程序分模块编址,可使多个程序员并行编程,缩短编程实践,段修改、天剑不影响其他段,执行编译过程中变长字段也便于处理。

分段还便于多道程序共用已有主存内的程序和数据。

由于各段按其逻辑特点结合,容易以段为单位实现存储保护,违反规定就中断,这对发现程序设计错误和非法使用是很有用的。

段式管理中各段长度完全取决于段自身,这就为调入段高效分配主存区域带来困难,系统要为每道程序分别设置映像表外,还得由操作系统建立一个实存操作表,包含占用区域表和可用区域表两部分。

可用区域表指明每一个未占用区的基址和区域大小。

从辅存调入主存,占用表加一项,修改可用表。

当段从主存退出,占用表项移入可用表,并进行是否与其它区域归并的处理,修改可用表。

全部执行结束,将该道程序的全部项从占用表移入可用表,并修改可用表。

段在主存中的起点是随意的。

 

段式管理的定位映象机构及其地址的变换过程

段式管理的定位映象机构及其地址的变换过程

段式存贮分配算法

段式存贮分配算法

 


2.页式管理

因段式存储管理中的各段装入的起点是随意的,地址字段与段长字段都很长,增加了辅助硬件的开销,降低了查表速度,使管理麻烦,带来大量主存零头浪费,于是提出页式存储。

页式存储是把主存空间和程序空间都机械的等分成固定大小的页,按顺序编号。

任一主存单元的地址np就由实页号nv和页内位移nr两个字段组成。

每个独立的程序也有自己的虚页号顺序。
只要系统设置相应的页表,保存好虚页装入实页时的页面对应关系,就可有给定的程序(虚)地址查页表变成相应的实(主)存地址访问。

由于页式存储中程序的起点处于一个页面的起点,用户程序中每一个虚地址就由虚页号字段Nv`和页内位移字段Nr组成。

虚存和实存页面大小一致,所以页表中只需记录出虚页号Nv`和实存页号nv的对应关系,不用保存页内位移,虚页号与页表行号是相对应的,不用专设虚页号字段,页面大小固定,页长字段也省了,简化了映像表硬件,加快查表速度。

页表也有装入位字段,表示是否已装入主存,为便于存储保护,页表中可相应设置访问字段。

由虚地址查表变换成实地址过程,段式管理需要较长的加法器进行将段起始地址加段内位移的操作,页式管理只需将主存实页号与页内位移拼接在一起,大大加快了地址变换速度,利于提高形成实地址的可靠性。

若系统内最多可在主存中容纳N到程序,对每道程序都将有一个页表,由用户号u指明该道程序使用哪个页表基址寄存器,从而可以找到该道程序的页表在主存中的起点。就整个多用户虚拟存储的存储空间来说,其虚地址应有用户(进程、程序)标志号u、虚页号Nv`和页内位移Nr三个字段。

在装入和运行过程中,页表基址寄存器和页表的内容全部由存储层次来完成设定和修改,对用户完全透明。

系统专门设置了主存页面管理表,以指明主存中每个页面的位置的使用情况及其他信息。

页式管理的定位映象机构及其地址的变换过程

页式管理的定位映象机构及其地址的变换过程


3.段页式管理

段式和页式优点相结合的称作段页式存储管理

把实存机械地等分成固定大小的页,程序按模块分段,每个段又分厂与实存页面大小相同的页。

每道程序通过一个段表和相应的一组页表来进行定位。

段页式断的起点是位于主存中页面的起点。

对于多道程序,每道程序都需要一个用户标志号u(转换成基号b)以指明段表起点放在哪个基址寄存器中。

这样,多用户虚地址就由用户标志号u,段号s,页号p,页内位移d四个字段组成。

每访问一次,主存都要进行一次程序地址想实存地址的转换。

段页式的主要问题是至少需要查表两次,即查段表和页表,因此,想使速度接近主存,必须再结构中采取措施,以加快地址中查表的速度。

段页式管理的定位映象机构及其地址的变换过程

段页式管理的定位映象机构及其地址的变换过程

 

与本文相关的文章
版权声明
转载保留版权: 大D综合研究院 | 《《计算机系统结构》读书笔记(八)》
本文链接地址:https://www.dadclab.com/archives/3087.jiecao
转载须知:如果您需要转载本文,请将版权信息,版权授权方式,以及本文的链接地址注明,谢谢合作。
本文被贴上了: , , , , , 标签