虚拟存储器

一、虚拟存储器工作原理
页式虚拟存储器是虚拟存储器中用得比较广泛的一种,另外的段式虚拟存储器和段页式虚拟存储器主要是因为地址变换方法不同产生的。 
页式虚拟存储器:把主存储器、磁盘存储器和虚拟存储器都划分成固定大小的块--页(Page).
   主存储器的页称为实页,虚拟存储器中的页称为虚页。
 

内部地址变换:多用户虚拟地址Av变换成贮存实地址A
  多用户虚拟地址中的页内偏移量D直接作为主存实地址中的页内偏移d
  主存实页号p与它的页内偏移d直接拼接就得到主存是地址A

一个用户程序要访问虚拟存储器时,必须给出多用户虚拟地址Av。在操作系统和有关硬件的共同管理下,首先进行内部地址变换。

 如果变换成功(命中),得到主存实页号p。把主存实页号p与它的页内偏移d直接拼接起来就得到主存实地址A,访问主存储器。
 如果内部地址变换失败(未命中),表示要访问数据不在主存储器中,必须访问磁盘存储器。这时,进行外部地址变换。

 外部地址变换主要用软件实现,首先查外页表得到与虚页号P相对应的磁盘存储器的实地址,然后再查内页表(主存实页表),看主存储器中是否有空页。如果主存储器中还有空页,只要找到空页号。把磁盘存储器的实地址和主存储器的实页号送入输入输出处理机(输入输出通道)等,在输入输出处理机的控制下,把要访问数据所在的一整页都从磁盘存储器调入到主存储器。

 如果主存储器中已经没有空页,则要采用某种页面替换算法,先把主存中暂时不用的一页写回到磁盘存储器中原来的位置上,以便腾出空位置来存放新的页。

 在进行外部地址变换时,如果没有命中,则表示所需要的页还不在磁盘存储器中。这时,要在操作系统控制下,启动磁带机、光盘存储器等海量存储器,先把与所需要数据相关的文件从海量存储器中调入磁盘存储器。

二、地址映像与变换

 虚拟存储器中有三种地址空间,对应三种地址。

   虚拟地址空间:虚存空间或虚拟存储器空间,是应用程序员用来编写程序的地址空间,这个地址空间非常大。
    主存储器的地址空间:主存地址空间、主存物理空间或实存地址空间
    辅存地址空间:磁盘存储器的地址空间
    虚拟地址:虚存空间上的地址,又称为虚存地址或者虚地址
    主存地址:又称为主存实地址、主存物理地址、主存储器地址
    磁盘存储器地址:又称为磁盘地址、辅存地址

l地址映像:把虚拟地址空间映象到主存地址空间,具体地说,就是把用户用虚拟地址编写的程序按照某种规则装入到主存储器中,并建立多用户虚地址与主存实地址之间的对应关系。
l地址变换:在程序被装入主存储器之后,实际运行时把多用户虚地址变换成主存实地址(内部地址变换)或磁盘存储器地址(外部地址变换)。

三、虚拟存储方法

l根据所采用的地址映象和地址变换方法不同,目前主要有页式虚拟存储器、段式虚拟存储器和段页式虚拟存储器等三种。

1、段式虚拟存储器

l 程序按模块划分,主存按段分配
l 地址映像方法:每个程序从0地址开始编址,长度可长可短,可以在程序执行过程中动态调整程序段的长度。
l每一道程序(或一个用户、一个进程等)由一张段表控制,每个程序段在段表中占一行。 



l 段式虚拟存储器的主要优点如下:
  1、程序的模块化性能好。
  2、便于程序和数据的共享。
  3、程序的动态链接和调度比较容易。
  4、便于实现信息保护。在一般情况下,一段程序是否需要保护是根据这个段程序的功能来决定的。
l 段式虚拟存储器的主要缺点是:
  1、地址变换所花费的时间比较长。从多用户虚地址变换到主存实地址需要查两次表,做两次加法运算。
  2、主存储器的利用率往往比较低。
  3、对辅存(磁盘存储器)的管理比较困难。磁盘存储器通常是按固定大小的块来访问的,如何把不定长度的程序段映象到固定长度的磁盘存储器中,需要做一次地址变换。 

2、页式虚拟存储器

l 程序按页(虚页)划分,贮存按页(实页)分配
l 页面大小固定,一般指定为0.5KB的整倍数,通常为1KB至16KB。
l与段式虚拟存储器相比,由于页长度固定,因此,不需要象段式虚拟存储器中的段长度这一字段,另外,主存地址这一字段只需要指出主存储器的页号,与段式虚拟存储器中的主存地址必须指出整个主存地址长度相比要节省很多。
l 地址映像方法:




4、外部地址变换

  前面介绍了内部地址映象和变换方法,即把虚拟地址空间映象到主存物理地址空间,以及把虚拟地址变换成主存实地址。当页表或段表中的有效位指示发生页面失效时,表示需要访问的那一页或那一个程序段还没有装入到主存储器中,这时必须进行外部地址变换。

l   外部地址变换的目的是要找到辅存(磁盘存储器)的实地址,并且把需要访问的那一页或那一个程序段调入到主存储器中。
l 外页表:因为它是在外部地址变换中使用的,与在内部地址变换中使用的页表被称为内页表相对应。
l 磁盘存储器每一个物理块的大小是512字节。在页式和段页式虚拟存储器中,页面大小固定,通常是磁盘物理块的整数倍,段式虚拟存储器,在段表中有段长度,根据段长度和磁盘物理块大小就能计算出本次页面失效需要调入的磁盘存储器的物理块数。因此, 在进行外部地址变换时只要给出磁盘存储器的起始地址,就能把一整页或一整个程序段调入主存中
l    虚拟地址空间中的每一个页面或每一个程序段,在外页表中都有对应的一个存储字。在每一个存储字中除了必须有磁盘存储器的地址之外,至少还应该包括一个装入位。 

四、页面替换算法

l页面替换发生时间:当发生页面失效时,要从磁盘中调入一个页面到主存,如果主存中所有页面都已经被占用,必须从主存中淘汰掉一个已有页面,以便存放新调入页面。
l 评价页面替换算法好坏的标准:命中率要高,算法要容易实现。
l 目前。在虚拟存储器常用的页面替换算法有如下几种:

 1、随机算法,即RAND算法(Random algorithm)。
    利用软件或硬件的随机数发生器来确定主存储器中被替换的页面。这种算法最简单,而且容易实现。但这种算法完全没有利用主存储器中页面调度情况的历史信息,也没有反映程序的局部性,所以命中率比较低。
  2、先进先出算法,即FIFO算法(First-In First-Out algorithm)。
 这种算法选择最先调入主存储器的页面作为被替换的页面。它的优点是比较容易实现,能够利用主存储器中页面调度情况的历史信息,但是,没有反映程序的局部性。因为最先调入主存的页面,很可能也是经常要使用的页面。

  3、近期最少使用算法,LFU算法(LeastFrequently Used algorithm)。
    这种算法选择近期最少访问的页面作为被替换的页面。显然,这是一种非常合理的算法,因为到目前为止最少使用的页面,很可能也是将来最少访问的页面。该算法既充分利用了主存中页面调度情况的历史信息,又正确反映了程序的局部性。但是,这种算法实现起来非常困难。它要为每个页面设置一个很长的计数器,并且要选择一个固定的时钟为每个计数器定时计数。在选择被替换页面时,要从所有计数器中找出一个计数值最大的计数器。因此,通常采用另外一种变通的办法,就是下面的LRU算法。
  4、最久没有使用算法,LRU算法(LeastRecently Used algorithm)。
    这种算法把近期最久没有被访问过的页面作为被替换的页面。它把LRU算法中要记录数量上的""""简化成判断"""",因此,实现起来比较容易。

  5、最优替换算法,OPT算法(OPTimal replacemant algorithm)。
    上面介绍的几种页面替换算法主要是以主存储器中页面调度情况的历史信息为依据的,它假设将来主存储器中的页面调度情况与过去一段时间内主存储器中的页面调度情况是相同的。显然,这种假设不总是正确的。最好的算法应该是选择将来最久不被访问的页面作为被替换的页面。这种替换算法的命中率一定是最高的。这就是最优替换算法,简称OPT算法。
   要实现OPT算法,唯一的办法是让程序先执行一遍,记录下实际的页地址流情况。根据这个页地址流才能找出当前要被替换的页面。显然,这样做是不现实的。因此,OPT算法只是一种理想化的算法,实际上,经常把这种算法用来作为评价其它页面替换算法好坏的标准。在其它条件相同的情况下,哪一种页面替换算法的命中率与OPT算法最接近,那么,它就是一种比较好的页面替换算法。

l 虚拟存储器中,实际上可能采用的只有 FIFO LRU 两种算法。

例1:一个程序共有5个页面组成,分别为P1~P5。程序执行过程中的页地址流(即程序执行中依次用到的页面)如下:P1,P2,P1,P5,P4,P1,P3,P4,P2,P4,假

设分配给这个程序的主存储器共有3个页面。图中,用"*"号标记下次将要被替换掉的页面。


就本例而言,FIFO命中次数2次,命中率Hp=2/10=0.2

            LRU命中次数4次,命中率Hp=4/10=0.4

            OPT命中次数5次,命中率Hp=5/10=0.5

  假设每个数据平均被访问30次,为了使LRU算法的失效率小于10-5,页面应该至少多大?

   (1-Hp)/n =(1-0.4)/30P <10-5  

    解得P>2000字,页面大小应该为2K字

l FIFO算法的命中率最低,LRU算法的命中率与OPT算法很接近。这一结论具有普遍意义。因此,在实际使用中,LRU算法是一种比较好的算法。目前,许多机器的虚拟存储器都采用LRU算法。

五、影响主存命中率的因素

l 影响主存命中率的主要因素有如下几个:
    1、程序在执行过程中的页地址流分布情况。
    2、所采用的页面替换算法。
     3 、页面大小。
     4 、主存储器的容量
     5 、所采用的页面调度方法
l 页地址流的分布情况是由程序本身决定的,系统设计人员一般无能为力。
l 页面替换算法,目前多数机器都采用LRU算法。它是一种堆栈型算法。在当前看来,已经是一种比较好的算法了。
l 存储区域保护:对于非虚拟存储器,采用界限寄存器方式;对于虚拟存储器,采用页表保护、键式保护等。
l页表保护:虚拟存贮器系统本身固有的保护机能为了更便于实现这种保护,还可在段表中的每行内,不仅设置页表起点,还设置段长(页数)项。若出现该段内的虚页号大于段长,则可发越界中断。
l键方式由操作系统按当时主存的使用分配状况给主存的每页配一个键, 称为存贮键,所有页的存贮键存在主存相应的快速寄存器内,每个用户(任务)的各实页的存贮键都相同。为了打开这把锁,需要有把“钥匙”,称为访问键。 每个用户的访问键由操作系统给定,存在处理机的程序状态字(PSW)或控制寄存器中。程序每次访问主存前,要核对主存地址所在页的存贮键是否与该程序的访问键相符,只有相符,才准访问。
l  对正在执行的程序本身保护:环状保护
l 访问方式的限制(保护):对主存信息的使用可以有读(R)、写(W)和执行(E)3种方式。 “执行”指的是作为指令来用。相应的就有R、W和E访问方式保护。 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值