第46章操作系统课程.ppt
4.6 虚拟存储器,1 虚拟存储器概述2 请求分页存储管理方式3 页面置换算法4“抖动”与工作集5 请求分段存储管理方式,4.6虚拟存储器,1 虚拟存储器概述,1.1 常规存储管理方式的特征和局部性原理,1.常规存储器管理方式的特征 一次性,是指作业必须一次性地全部装入内存后,方能开始运行。这一特征导致了下述两种情况的发生:当作业很大时,它所要求的内存空间超过了内存总容量,无法将全部作业装入内存,致使该作业无法运行;当有大量作业要求运行的情况下,由于每一个作业都需要全部装入内存后方能运行,所以每次只能装入少量的作业,导致多道程序度的下降。驻留性,是指作业被装入内存后,整个作业都一直驻留在内存中,其中任何部分都不会被换出,直至作业运行结束。,2.局部性原理 程序执行时,除了少部分的转移和过程调用指令外,在大多数情况下是顺序执行的。过程调用将会使程序的执行轨迹,由一部分区域转至另一部分区域。即程序将会在一段时间内,都局限在这些过程的范围内运行。程序中存在许多循环结构,这些虽然只由少数指令构成,但是它们将多次执行。程序中还包括许多对数据结构的处理,如对数组进行操作,它们往往都局限于很小的范围内。局限性又表现在下述两个方面:时间局限性:如果程序中的某条指令一旦执行,则不久以后该指令可能再次执行;如果某数据被访问过,则不久以后该数据可能再次被访问。空间局限性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问,即程序在一段时间内所访问的地址,可能集中在一定的范围之内。,1.1 常规存储管理方式的特征和局部性原理,3.虚拟存储器的基本工作情况 应用程序在运行之前,仅须将那些当前要运行的少数页面或段,先装入内存便可运行,其余部分暂留在盘上。程序在运行时,如果它所要访问的页(段)已调入内存,便可继续执行下去;但如果程序所要访问的页(段)尚未调入内存(称为缺页或缺段),便发出缺页(段)中断请求,此时OS将利用请求调页(段)功能,将它们调入内存,以使进程能继续执行下去。如果此时内存已满,无法再装入新的页(段),OS还须再利用页(段)的置换功能,将内存中暂时不用的页(段)调至盘上,腾出足够的内存空间后,再将要访问的页(段)调入内存,使程序继续执行下去。,1.1 常规存储管理方式的特征和局部性原理,1.2 虚拟存储器的定义和特征,1.虚拟存储器的定义 具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。其逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存速度,而每位的成本却又接近于外存。虚拟存储技术是一种性能非常优越的存储器管理技术,故被广泛地应用于大、中、小型机器和微型机中。,1.2 虚拟存储器的定义和特征,2.虚拟存储器的特征 多次性 对换性 虚拟性 虚拟性是以多次性和对换性为基础的,或者说,仅当系统允许将作业分多次调入内存,并能将内存中暂时不运行的程序和数据换至盘上时,才有可能实现虚拟存储器;而多次性和对换性,显然又必须建立在离散分配的基础上。,1.分页请求系统 在分页系统的基础上,增加了请求调页功能和页面置换功能,所形成的页式虚拟存储系统。置换时以页面为单位。(1)硬件支持:请求分页的页表机制、缺页中断机构、地址变换机构。(2)实现请求分页的软件:实现请求调页的软件和实现页面置换的软件。2.请求分段系统 在分段系统的基础上,增加了请求调段及分段置换功能后,所形成的段式虚拟存储系统。置换是以段为单位进行的。为了实现请求分段,系统同样需要必要的硬件和软件支持。(1)硬件支持:请求分段的段表机制、缺段中断机构、地址变换机构。(2)实现请求分段的软件:实现请求调段的软件和实现段置换的软件。,1.3 虚拟存储器的实现方法,返回,4.6 虚拟存储器,2 请求分页存储管理方式,2.1 请求分页中的硬件支持 1.请求页表机制 2.缺页中断机构 3.地址变换机构2.2 请求分页中的内存分配2.3 页面调入策略,2.1 请求分页中的硬件支持,1.请求页表机制,状态位(存在位)P:仅有一位,故又称位字,用于指示该页是否已调入内存,供程序访问时参考。访问字段A:记录本页在一段时间内被访问的次数,或记录本页最近已有多长时间未被访问,提供给置换算法(程序)选择换出页面时参考。修改位M:标识该页在调入内存后是否被修改过。供置换页面时参考。外存地址:用于指出该页在外存上的地址,通常是物理块号,供调入该页时参考。,2.1 请求分页中的硬件支持,2.缺页中断机构 缺页中断作为中断,同样需要经历诸如保护CPU环境、分析中断原因、转入缺页中断处理程序进行处理,以及在中断处理完成后再恢复CPU环境等几个步骤。缺页中断又是一种特殊的中断,它与一般的中断相比,有着明显的区别:在指令执行期间,产生和处理中断信号。一条指令在执行期间,可能产生多次缺页中断。,2.1 请求分页中的硬件支持,3.地址变换机构,1.最小物理块数的确定 随着为每个进程所分配的物理块的减少,将使进程在执行中的缺页率上升,从而会降低进程的执行速度。最小物理块数是指,能保证进程正常运行所需的最小物理块数,当系统为进程分配的物理块数少于此值时,进程将无法运行。进程应获得的最少物理块数,与计算机的硬件结构有关,取决于指令的格式、功能和寻址方式。对于某些简单的机器,若是单地址指令,且采用直接寻址方式,则所需的最少物理块数为2。其中,一块是用于存放指令的页面,另一块则是用于存放数据的页面。如果该机器允许间接寻址时,则至少要求有三个物理块。对于某些功能较强的机器,其指令长度可能是两个或多于两个字节,因而其指令本身有可能跨两个页面,且源地址和目标地址所涉及的区域,也都可能跨两个页面。,2.2 请求分页中的内存分配,2.内存分配策略(1)固定分配局部置换 固定分配是指,为每个进程分配一组固定数目的物理块,在进程运行期间不再改变。局部置换是指,如果进程在运行中发现缺页,则只能从分配给该进程的n个页面中,选出一页换出,然后再调入一页。(2)可变分配全局置换 可变分配是指,先为每个进程分配一定数目的物理块,在进程运行期间,可根据情况做适当地改变。全局置换是指,如果进程在运行中发现缺页,则将OS所保留的空闲物理块或者以所有进程的全部物理块为标的,选择一块换出,然后将所缺之页调入。(3)可变分配局部置换 为每个进程分配一定数目的物理块,但当某进程发现缺页时,只允许从该进程在内存的页面中,选择一页换出,如果进程在运行中,频繁地发生缺页中断,则系统须再为该进程分配若干附加的物理块,直至该进程的缺页率减少到适当程度为止。,2.2 请求分页中的内存分配,3.物理块分配算法(1)平均分配算法:将系统中所有可供分配的物理块,平均分配给各个进程。(2)按比例分配算法:根据进程的大小按比例分配物理块的算法。系统中各进程页面数的总和为:每个进程所能分到的物理块数为bi:(3)考虑优先权的分配算法:把内存中可供分配的所有物理块分成两部分:一部分按比例地分配给各进程;另一部分则根据各进程的优先权进行分配,为高优先进程适当地增加其相应份额。,2.2 请求分页中的内存分配,1.何时调入页面 预调页策略:那些预计在不久之后便会被访问的页面,预先调入内存。请求调页策略:当进程在运行中需要访问某部分程序和数据时,若发现其所在的页面不在内存,便立即提出请求,由OS将其所需页面调入内存。2.从何处调入页面 在请求分页系统中的外存分为两部分:用于存放文件的文件区和用于存放对换页面的对换区。系统拥有足够的对换区空间。系统缺少足够的对换区空间。UNIX方式。,2.3 页面调入策略,3.页面调入过程 每当程序所要访问的页面未在内存时(存在位为“0”),便向CPU发出一缺页中断,中断处理程序首先保留CPU环境,分析中断原因后,转入缺页中断处理程序。该程序通过查找页表,得到该页在外存的物理块后,如果此时内存能容纳新页,则启动磁盘I/O,将所缺之页调入内存,然后修改页表。如果内存已满,则须先按照某种置换算法,从内存中选出一页准备换出;如果该页未被修改过(修改位为“O”),可不必将该页写回磁盘;但如果此页已被修改(修改位为“1”),则必须将它写回磁盘,然后再把所缺的页调入内存,并修改页表中的相应表项,置其存在位为“1”,并将此页表项写入快表中。在缺页调入内存后,利用修改后的页表,去形成所要访问数据的物理地址,再去访问内存数据。整个页面的调入过程对用户是透明的。,2.3 页面调入策略,返回,4.6 虚拟存储器,3 页面置换算法,3.1 最佳置换算法和先进先出置换算法,1.最佳置换算法 由Belady于1966年提出的一种理论上的算法。其所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保证获得最低的缺页率。假定系统为某进程分配了三个物理块,并考虑有以下的页面号引用串:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1 进程运行时,先将7,0,1三个页面装入内存。以后,当进程要访问页面2时,将会产生缺页中断。此时OS根据最佳置换算法,将选择页面7予以淘汰。,3.1 最佳置换算法和先进先出置换算法,2.先进先出页面置换算法 置换时,选择在内存中驻留时间最长的页并予以淘汰。,3.2 最近最久未使用和最少使用置换算法,1.LRU置换算法的描述 选择最后一次访问时间距离当前时间最长的一页并淘汰之。即淘汰没有使用的时间最长的页。实现代价很高(时间戳或硬件方法)。,3.2 最近最久未使用和最少使用置换算法,2.LRU置换算法的硬件支持 寄存器 为了记录某进程在内存中各页的使用情况,须为每个在内存中的页面配置一个移位寄存器,可表示为:R=Rn-1Rn-2Rn-3 R2R1R0。,3.2 最近最久未使用和最少使用置换算法,2.LRU置换算法的硬件支持(2)栈,3.2 最近最久未使用和最少使用置换算法,3.最少使用LFU置换算法 选择在最近时期使用最少的页面作为淘汰页。LFU置换算法的页面访问图,与LRU置换算法的访问图完全相同;或者说,利用这样一套硬件既可实现LRU算法,又可实现LFU算法。这种算法并不能真正反映出页面的使用情况,因为在每一时间间隔内,只是用寄存器的一位来记录页的使用情况,因此,在该时间间隔内,对某页访问一次和访问1000次是完全等效的。,4.3.3 Clock置换算法,1.简单的Clock置换算法,4.3.3 Clock置换算法,2.改进型Clock置换算法 由访问位A和修改位M可以组合成下面四种类型的页面:1类(A=0,M=0):该页最近既未被访问,又未被修改,是最佳淘汰页。2类(A=0,M=1):该页最近未被访问,但已被修改,并不是很好的淘汰页。3类(A=1,M=0):最近已被访问,但未被修改,该页有可能再被访问。4类(A=1,M=1):最近已被访问且被修改,该页可能再被访问。其执行过程可分成以下三步:(1)从指针所指示的当前位置开始,扫描循环队列,寻找A=0且M=0的第一类页面,将所遇到的第一个页面作为所选中的淘汰页。在第一次扫描期间不改变访问位A。(2)如果第一步失败,则开始第二轮扫描,寻找A=0且M=1的第二类页面,将所遇到的第一个这类页面作为淘汰页。在第二轮扫描期间,将所有扫描过的页面的访问位都置0。(3)如果第二步也失败,则将指针返回到开始的位置,并将所有的访问位复0。然后重复第一步。,4.3.4 页面缓冲算法PBA,1.影响页面换进换出效率的若干因素 页面置换算法:影响页面换进换出效率最重要的因素,直接影响进程在运行过程中的缺页率,影响页面换进换出的开销。写回磁盘的频率:如果是采取每个页面换出时,就将它写回磁盘的策略,这意味着每换出一个页面,便需要启动一次磁盘。但如果在系统中建立了一个已修改换出页面链表,对每一个要被换出的页面(已修改),系统可暂不把它们写回磁盘,而是将它们挂在已修改换出页面链表上,仅当被换出页面数目达到一定值时,再将它们一起写回到磁盘上,这样就显著地减少了磁盘I/O的操作次数。或者说,减少已修改页面换出的开销。读入内存的频率:在设置了已修改换出页面链表后,在该链表上就暂时有一批装有数据的页面,如果需要再次访问这些页面时,就不需从外存上调入,而直接从已修改换出页面链表中获取,这样也可以减少将页面从磁盘读入内存的频率,减少页面换进的开销。或者说,只需花费很小的开销,便可使这些页面,又回到该进程的驻留集中。,4.3.4 页面缓冲算法PBA,2.页面缓冲算法PBA 页面缓冲算法PBA的主要特点 显著地降低了页面换进、换出的频率,使磁盘I/O的操作次数大为减少,因而减少了页面换进、换出的开销;由于换入换出的开销大幅度减小,才能使其采用一种较简单的置换策略,如先进先出(FIFO)算法,它不需要特殊硬件的支持,实现起来非常简单。VAX/VMS操作系统中所使用页面缓冲算法 在该系统中,内存分配策略上采用了可变分配和局部置换方式。为了能显著地降低了页面换进、换出的频率,在内存中设置了如下两个链表:空闲页面链表:是一个空闲物理块链表,用于分配给频繁发生缺页的进程,以降低该进程的缺页率。当有一个未被修改的页要换出时,实际上并不将它换出到外存,而是把它们所在的物理块,挂在空闲链表的末尾。修改页面链表:由已修改的页面所形成的链表。设置该链表的目的,是为了减少已修改页面换出的次数。降低将已修该页面写回磁盘的频率,以及降低将磁盘内容读入内存的频率。,返回,4.6虚拟存储器,4“抖动”与工作集,1.多道程序度与“抖动”,多道程序度与处理机的利用率 由于虚拟存储器系统能从逻辑上扩大内存,人们希望在系统中能运行更多的进程,即增加多道程序度,以提高处理机的利用率。在虚存中,页面在内存与外存之间频繁调度,以至于调度页面所需时间比进程实际运行的时间还多,此时系统效率急剧下降,甚至导致系统崩溃。这种现象称为颠簸或抖动。产生“抖动”的原因 页面淘汰算法不合理 分配给进程的物理页面数太少,2.工作集,工作集的基本概念 进程发生缺页率的时间间隔,与进程所获得的物理块数有关。图6-10示出了缺页率与物理块数之间的关系。基于程序运行时的局部性原理,得知程序在运行期间,对页面的访问是不均匀的,在一段时间内仅局限于较少的页面,在另一段时间内,又可能仅局限于对另一些较少的页面进行访问。这些页面被称为活跃页面。如果能够预知程序在某段时间间隔内,要访问哪些页面,并将它们调入内存,将会大大降低缺页率,从而可显著地提高处理机的利用率。,4.4.2 工作集,工作集的定义 在某段时间间隔里,进程实际要要访问页面的集合。具体地说,是把某进程在时间t的工作集记为w(t,),其中的变量称为工作集的“窗口尺寸”。图6-11示出了某进程访问页面的序列和窗口大小分别为3、4、5时的工作集。由此可将工作集定义为:进程在时间间隔(t-,t)中引用页面的集合。工作集w(t,)是二元函数,即在不同时间t的工作集大小不同,所含的页面数也不同;与窗口尺寸有关。工作集大小是窗口尺寸的非降函数:,3.“抖动”的预防方法,采取局部置换策略 在页面分配和置换策略中,如果采取的是可变分配方式时,为了预防发生“抖动”,可采取局部置换策略。把工作集算法融入到处理机调度中 在调度中融入了工作集算法,则在调度程序从外存调入作业之前,必须先检查每个进程在内存的驻留页面是否足够多。利用“L=S”准则调节缺页率 于1980年Denning提出了“L=S”的准则,来调节多道程序度,其中L是缺页之间的平均时间,S是平均缺页服务时间,即用于置换一个页面所需的时间。利用“L=S”准则,对于调节缺页率是十分有效的。选择暂停的进程 当多道程序度偏高时,已影响到处理机的利用率,为了防止发生“抖动”,系统必须减少多道程序的数目。,返回,4.6 虚拟存储器,5 请求分段存储管理方式,请求分段中的硬件支持分段的共享与保护,1.请求分段中的硬件支持,请求段表机制,在段表项中,除了段名(号)、段长、段在内存中的起始地址外,还增加了以下字段:存取方式:由于在应用程序的段是信息的逻辑单位,可根据该信息的属性,对它实施保护,故在段表中增加存取方式字段,如果该字段为两位,则存取属性是只执行、只读,还是允许读/写。访问字段A:记录该段被访问的频繁程度。提供给置换算法选择换出页面时参考。修改位M:用于表示该页在进入内存后,是否已被修改过,供置换页面时参考。存在位P:用于指示本段是否已调入内存,供程序访问时参考。增补位:用于表示本段在运行过程中,是否做过动态增长。外存始址:指示本段在外存中的起始地址,即起始盘块号。,1.请求分段中的硬件支持,缺段中断机构,1.请求分段中的硬件支持,地址变换机构,2.分段的共享与保护,共享段表 在系统中配置一张共享段表,所有各共享段都在共享段表中占有一表项。在表项的上面记录了共享段的段号、段长、内存始址、状态(存在)位、外存始址以及共享计数等信息。接下去就是记录了共享此分段的每个进程的情况。,共享进程计数count:记录有多少进程正在共享该分段。存取控制字段:对于一个共享段,应为不同的进程赋予不同的存取权限。段号:每个进程可用自己进程的段号,去访问该共享段。,2.分段的共享与保护,共享段的分配与回收 共享段的分配:在为共享段分配内存时,对第一个请求使用该共享段的进程,由系统为该共享段分配一物理区,当又有其它进程需要调用该共享段时,无须再为该段分配内存。共享段的回收:当共享此段的某进程不再需要该段时,若无其他进程使用该段,则由系统回收该共享段的物理内存,否则只是取消调用者进程在共享段表中的有关记录。,2.分段的共享与保护,分段保护 由于每个分段在逻辑上是相对独立的,因而比较容易实现信息保护:越界检查:在进行地址变换时,利用地址变换机构完成的,从而保证了每个进程只能在自己的地址空间内运行。存取控制检查:以段为基本单位进行,在段表的每个表项中,都设置了一个“存取控制”字段,用于规定对该段的访问方式。通常的访问方式有:只读、只执行、读/写。环保护机构:低编号的环具有高优先权。在环系统中,程序的访问和调用应遵循以下规则:一个程序可以访问驻留在相同环或较低特权环(外环)中的数据;一个程序可以调用驻留在相同环或较高特权环(内环)中的服务。,返回,