虚拟存储器算法
第四章所介绍的各类存储器管理方式有一个共同的特色,即它们都要求将一个做业所有装入内存后方能运行。因而,出现了下面这样两种状况:安全
(1) 有的做业很大,其所要求的内存空间超过了内存总容量,做业不能所有被装入内存,导致该做业没法运行;数据结构
(2) 有大量做业要求运行,但因为内存容量不足以容纳全部这些做业,只能将少数做业装入内存让它们先运行,而将其它大量的做业留在外存上等待。函数
1. 常规存储器管理方式的特征post
咱们把前一章中所介绍的各类存储器管理方式统称为传统存储器管理方式,它们全都具备以下两个共同的特征:性能
(1) 一次性3d
(2) 驻留性指针
2. 局部性原理blog
程序运行时存在的局部性现象,很早就已被人发现,但直到1968年,P.Denning才真正指出:程序在执行时将呈现出局部性规律,即在一较短的时间内,程序的执行仅局限于某个部分,相应地,它所访问的存储空间也局限于某个区域。队列
局限性又表如今下述两个方面:
(1) 时间局限性。
(2) 空间局限性。
3. 虚拟存储器的基本工做状况
基于局部性原理可知,应用程序在运行以前没有必要将之所有装入内存,而仅须将那些当前要运行的少数页面或段先装入内存即可运行,其他部分暂留在盘上。
1. 虚拟存储器的定义
当用户看到本身的程序能在系统中正常运行时,他会认为,该系统所具备的内存容量必定比本身的程序大,或者说,用户所感受到的内存容量会比实际内存容量大得多。但用户所看到的大容量只是一种错觉,是虚的,故人们把这样的存储器称为虚拟存储器。
2. 虚拟存储器的特征
与传统的存储器管理方式比较,虚拟存储器具备如下三个重要特征:
(1) 屡次性。
(2) 对换性。
(3) 虚拟性。
1. 分页请求系统
1) 硬件支持
主要的硬件支持有:
(1) 请求分页的页表机制。
(2) 缺页中断机构。
(3) 地址变换机构。
2) 实现请求分页的软件
2. 请求分段系统
1) 硬件支持
主要的硬件支持有:
(1) 请求分段的段表机制。
(2) 缺页中断机构。
(3) 地址变换机构。
2) 软件支持
为了实现请求分页,系统必须提供必定的硬件支持。计算机系统除了要求必定容量的内存和外存外,还须要有请求页表机制、缺页中断机构以及地址变换机构。
1. 请求页表机制
在请求分页系统中须要的主要数据结构是请求页表,其基本做用仍然是将用户地址空间中的逻辑地址映射为内存空间中的物理地址。为了知足页面换进换出的须要,在请求页表中又增长了四个字段。这样,在请求分页系统中的每一个页表应含如下诸项:
2. 缺页中断机构
(1) 在指令执行期间产生和处理中断信号。
(2) 一条指令在执行期间可能产生屡次缺页中断。
图5-1 涉及6次缺页中断的指令
3. 地址变换机构
请求分页系统中的地址变换机构是在分页系统地址变换机构的基础上,为实现虚拟存储器,再增长了某些功能所造成的,如产生和处理缺页中断,以及从内存中换出一页的功能等等。图5-2示出了请求分页系统中的地址变换过程。
图5-2 请求分页中的地址变换过程
1. 最小物理块数的肯定
一个显而易见的事实是,随着为每一个进程所分配的物理块的减小,将使进程在执行中的缺页率上升,从而会下降进程的执行速度。为使进程能有效地工做,应为它分配必定数目的物理块,但这并非最小物理块数的概念。
2. 内存分配策略
在请求分页系统中,可采起两种内存分配策略,即固定和可变分配策略。在进行置换时,也可采起两种策略,即全局置换和局部置换。因而可组合出如下三种适用的策略。
1) 固定分配局部置换(Fixed Allocation,Local Replacement)
2) 可变分配全局置换(Variable Allocation,Global Replacement)
3) 可变分配局部置换(Variable Allocation,Local Replacement)
3. 物理块分配算法
在采用固定分配策略时,如何将系统中可供分配的全部物理块分配给各个进程,可采用下述几种算法:
(1) 平均分配算法,即将系统中全部可供分配的物理块平均分配给各个进程。
(2) 按比例分配算法,即根据进程的大小按比例分配物理块。若是系统中共有n个进程,每一个进程的页面数为Si,
则系统中各进程页面数的总和为:
又假定系统中可用的物理块总数为m,则每一个进程所能分到的物理块数为bi可由下式计算:
这里,bi应该取整,它必须大于最小物理块数。
(3) 考虑优先权的分配算法。在实际应用中,为了照顾到重要的、紧迫的做业能尽快地完成,应为它分配较多的内存空间。一般采起的方法是把内存中可供分配的全部物理块分红两部分:一部分按比例地分配给各进程;另外一部分则根据各进程的优先权进行分配,为高优先进程适当地增长其相应份额。在有的系统中,如重要的实时控制系统,则多是彻底按优先权为各进程分配其物理块的。
为使进程可以正常运行,必须事先将要执行的那部分程序和数据所在的页面调入内存。如今的问题是:
(1) 系统应在什么时候调入所需页面;
(2) 系统应从何处调入这些页面;
(3) 是如何进行调入的。
1. 什么时候调入页面
(1) 预调页策略。
(2) 请求调页策略。
2. 从何处调入页面
(1) 系统拥有足够的对换区空间,这时能够所有从对换区调入所需页面,以提升调页速度。
(2) 系统缺乏足够的对换区空间,这时凡是不会被修改的文件,都直接从文件区调入;而当换出这些页面时,因为它们未被修改,则没必要再将它们重写到磁盘(换出),之后再调入时,仍从文件区直接调入。但对于那些可能被修改的部分,在将它们换出时便须调到对换区,之后须要时再从对换区调入。
(3) NIX方式。
3. 页面调入过程
每当程序所要访问的页面未在内存时(存在位为“0”),便向CPU发出一缺页中断,中断处理程序首先保留CPU环境,分析中断缘由后转入缺页中断处理程序。
4. 缺页率
假设一个进程的逻辑空间为n页,系统为其分配的内存物理块数为m(m≤n)。若是在进程的运行过程当中,访问页面成功(即所访问页面在内存中)的次数为S,访问页面失败(即所访问页面不在内存中,须要从外存调入)的次数为F,则该进程总的页面访问次数为A ,那么该进程在其运行过程当中的缺页率即为
事实上,在缺页中断处理时,当因为空间不足,须要置换部分页面到外存时,选择被置换页面还须要考虑到置换的代价,如页面是否被修改过。没有修改过的页面能够直接放弃,而修改过的页面则必须进行保存,因此处理这两种状况时的时间也是不一样的。假设被置换的页面被修改的几率是β,其缺页中断处理时间为ta,被置换页面没有被修改的缺页中断时间为tb,那么,缺页中断处理时间的计算公式为
在进程运行过程当中,若其所要访问的页面不在内存,而需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据送到磁盘的对换区中。但应将哪一个页面调出,须根据必定的算法来肯定。一般,把选择换出页面的算法称为页面置换算法(Page-Replacement Algorithms)。置换算法的好坏将直接影响到系统的性能。
1. 最佳(Optimal)置换算法
最佳置换算法是由Belady于1966年提出的一种理论上的算法。其所选择的被淘汰页面将是之后永不使用的,或许是在最长(将来)时间内再也不被访问的页面。采用最佳置换算法一般可保证得到最低的缺页率。但因为人们目前还没法预知,一个进程在内存的若干个页面中,哪个页面是将来最长时间内再也不被访问的,于是该算法是没法实现的,但能够利用该算法去评价其它算法。
图5-3 利用最佳页面置换算法时的置换图
2. 先进先出(FIFO)页面置换算法
FIFO算法是最先出现的置换算法。该算法老是淘汰最早进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面按前后次序连接成一个队列,并设置一个指针,称为替换指针,使它老是指向最老的页面。但该算法与进程实际运行的规律不相适应,由于在进程中,有些页面常常被访问,好比,含有全局变量、经常使用函数、例程等的页面,FIFO算法并不能保证这些页面不被淘汰。
图5-4 利用FIFO置换算法时的置换图
1. LRU(Least Recently Used)置换算法的描述
FIFO置换算法的性能之因此较差,是由于它所依据的条件是各个页面调入内存的时间,而页面调入的前后并不能反映页面的使用状况。最近最久未使用(LRU)的页面置换算法是根据页面调入内存后的使用状况作出决策的。
图5-5 LRU页面置换算法
2. LRU置换算法的硬件支持
1) 寄存器
为了记录某进程在内存中各页的使用状况,须为每一个在内存中的页面配置一个移位寄存器,可表示为
当进程访问某物理块时,要将相应寄存器的Rn-1位置成1。此时,定时信号将每隔必定时间(例如100 ms)将寄存器右移一位。若是咱们把n位寄存器的数看做是一个整数,那么,具备最小数值的寄存器所对应的页面,就是最近最久未使用的页面。
图5-6 某进程具备8个页面时的LRU访问状况
2) 栈
可利用一个特殊的栈保存当前使用的各个页面的页面号。每当进程访问某页面时,便将该页面的页面号从栈中移出,将它压入栈顶。所以,栈顶始终是最新被访问页面的编号,而栈底则是最近最久未使用页面的页面号。假定现有一进程,它分有五个物理块,所访问的页面的页面号序列为:
4,7,0,7,1,0,1,2,1,2,6
图5-7 用栈保存当前使用页面时栈的变化状况
3. 最少使用(Least Frequently Used,LFU)置换算法
在采用LFU算法时,应为在内存中的每一个页面设置一个移位寄存器,用来记录该页面被访问的频率。该置换算法选择在最近时期使用最少的页面做为淘汰页。
1. 简单的Clock置换算法
当利用简单Clock算法时,只需为每页设置一位访问位,再将内存中的全部页面都经过连接指针连接成一个循
环队列。
图5-8 简单Clock置换算法的流程和示例
2. 改进型Clock置换算法
在将一个页面换出时,若是该页已被修改过,便须将该页从新写回到磁盘上;但若是该页未被修改过,则没必要将它拷回磁盘。换而言之,对于修改过的页面,在换出时所付出的开销比未修改过的页面大,或者说,置换代价大。在改进型Clock算法中,除须考虑页面的使用状况外,还须再增长一个因素——置换代价。
1. 影响页面换进换出效率的若干因素
(1) 页面置换算法。
(2) 写回磁盘的频率。
(3) 读入内存的频率。
2. 页面缓冲算法PBA
PBA算法的主要特色是:① 显著地下降了页面换进、换出的频率,使磁盘I/O的操做次数大为减小,于是减小了页面换进、换出的开销;② 正是因为换入换出的开销大幅度减少,才能使其采用一种较简单的置换策略,如先进先出(FIFO)算法,它不须要特殊硬件的支持,实现起来很是简单。
1) 空闲页面链表
2) 修改页面链表
与基本分页存储管理方式不一样,在请求分页管理方式中,内存有效访问时间不只要考虑访问页表和访问实际物理地址数据的时间,还必需要考虑到缺页中断的处理时间。
因为请求分页式虚拟存储器系统的性能优越,在正常运行状况下,它能有效地减小内存碎片,提升处理机的利用率和吞吐量,故是目前最经常使用的一种系统。但若是在系统中运行的进程太多,进程在运行中会频繁地发生缺页状况,这又会对系统的性能产生很大的影响,故还须对请求分页系统的性能作简单的分析。
1. 多道程序度与处理机的利用率
因为虚拟存储器系统能从逻辑上扩大内存,这时,只需装入一个进程的部分程序和数据即可开始运行,故人们但愿在系统中能运行更多的进程,即增长多道程序度,以提升处理机的利用率。但处理机的实际利用率却如图5-9中的实线所示。
图5-9 处理机的利用率
2. 产生“抖动”的缘由
发生“抖动”的根本缘由是,同时在系统中运行的进程太多,由此分配给每个进程的物理块太少,不能知足进程正常运行的基本要求,导致每一个进程在运行时,频繁地出现缺页,必须请求系统将所缺之页调入内存。这会使得在系统中排队等待页面调进/调出的进程数目增长。显然,对磁盘的有效访问时间也随之急剧增长,形成每一个进程的大部分时间都用于页面的换进/换出,而几乎不能再去作任何有效的工做,从而致使发生处理机的利用率急剧降低并趋于0的状况。咱们称此时的进程是处于“抖动”状态。
1. 工做集的基本概念
进程发生缺页率的时间间隔与进程所得到的物理块数有关。图5-10示出了缺页率与物理块数之间的关系。
图5-10 缺页率与物理块数之间的关系
2. 工做集的定义
所谓工做集,是指在某段时间间隔Δ里,进程实际所要访问页面的集合。Denning指出,虽然程序只须要少许的几页在内存即可运行,但为了较少地产生缺页,应将程序的所有工做集装入内存中。然而咱们没法事先预知程序在不一样时刻将访问哪些页面,故仍只有像置换算法那样,用程序的过去某段时间内的行为做为程序在未来某段时间内行为的近似。
图5-11 窗口为三、四、5时进程的工做集
1. 采起局部置换策略
在页面分配和置换策略中,若是采起的是可变分配方式,则为了预防发生“抖动”,可采起局部置换策略。
2. 把工做集算法融入处处理机调度中
当调度程序发现处理机利用率低下时,它将试图从外存调入一个新做业进入内存,来改善处理机的利用率。
3. 利用“L=S”准则调节缺页率
Denning于1980年提出了“L=S”的准则来调节多道程序度,其中L是缺页之间的平均时间,S是平均缺页服务时间,即用于置换一个页面所需的时间。若是是L远比S大,说明不多发生缺页,磁盘的能力还没有获得充分的利用;反之,若是是L比S小,则说明频繁发生缺页,缺页的速度已超过磁盘的处理能力。只有当L与S接近时,磁盘和处理机均可达到它们的最大利用率。理论和实践都已证实,利用“L=S”准则,对于调节缺页率是十分有效的。
4. 选择暂停的进程
当多道程序度偏高时,已影响处处理机的利用率,为了防止发生“抖动”,系统必须减小多道程序的数目。
为了实现请求分段式存储管理,应在系统中配置多种硬件机构,以支持快速地完成请求分段功能。与请求分页系统类似,在请求分段系统中所需的硬件支持有段表机制、缺段中断机构,以及地址变换机构。
1. 请求段表机制
在请求分段式管理中所需的主要数据结构是请求段表。在该表中除了具备请求分页机制中有的访问字段A、修改位M、存在位P和外存始址四个字段外,还增长了存取方式字段和增补位。这些字段供程序在调进、调出时参考。下面给出请求分段的段表项。
2. 缺段中断机构
在请求分段系统中采用的是请求调段策略。每当发现运行进程所要访问的段还没有调入内存时,便由缺段中断机构产生一缺段中断信号,进入OS后,由缺段中断处理程序将所需的段调入内存。与缺页中断机构相似,缺段中断机构一样须要在一条指令的执行期间产生和处理中断,以及在一条指令执行期间,可能产生屡次缺段中断。但因为分段是信息的逻辑单位,于是不可能出现一条指令被分割在两个分段中,和一组信息被分割在两个分段中的状况。缺段中断的处理过程如图5-12所示。
图5-12 请求分段系统中的中断处理过程
3. 地址变换机构
请求分段系统中的地址变换机构是在分段系统地址变换机构的基础上造成的。由于被访问的段并不是全在内存,因此在地址变换时,若发现所要访问的段不在内存,必须先将所缺的段调入内存,并修改段表,而后才能再利用段表进行地址变换。为此,在地址变换机构中又增长了某些功能,如缺段中断的请求及处理等。图5-13示出了请求分段系统的地址变换过程。
图5-13 请求分段系统的地址变换过程
1. 共享段表
(1) 共享进程计数count。
(2) 存取控制字段。
(3) 段号。
图5-14 共享段表项
2. 共享段的分配与回收
1) 共享段的分配
2) 共享段的回收
3. 分段保护
在分段系统中,因为每一个分段在逻辑上是相对独立的,于是比较容易实现信息保护。目前,常采用如下几种措施来确保信息的安全。
1) 越界检查
2) 存取控制检查
3) 环保护机构
图5-15 环保护机构
习 题 8:
1. 常规存储器管理方式具备哪两大特征? 它对系统性能有何影响?
2. 什么是程序运行时的时间局限性和空间局限性?
3. 虚拟存储器有哪些特征? 其中最本质的特征是什么?
4. 实现虚拟存储器须要哪些硬件支持?
5. 实现虚拟存储器须要哪几个关键技术?
6. 在请求分页系统中,页表应包括哪些数据项? 每项的做用是什么?
7. 试比较缺页中断机构与通常的中断,它们之间有何明显的区别?
8. 试说明请求分页系统中的地址变换过程。
9. 何谓固定分配局部置换和可变分配全局置换的内存分配策略?
10. 在请求分页系统中,应从何处将所需页面调入内存?
11. 试说明在请求分页系统中页面的调入过程。
12. 在请求分页系统中,常采用哪几种页面置换算法?
13. 在一个请求分页系统中,采用FIFO页面置换算法时,假如一个做业的页面走向为四、三、二、一、四、三、五、四、三、二、一、5,当分配给该做业的物理块数M分别为3和4时,试计算在访问过程当中所发生的缺页次数和缺页率,并比较所得结果。
14. 实现LRU算法所需的硬件支持是什么?
15. 试说明改进型Clock置换算法的基本原理。
16. 影响页面换进换出效率的若干因素是什么?
17. 页面缓冲算法的主要特色是什么? 它是如何下降页面换进、换出的频率的?
18. 在请求分页系统中,产生“抖动”的缘由是什么?
19. 何谓工做集? 它是基于什么原理肯定的?
20. 当前能够利用哪几种方法来防止“抖动”?
21. 试说明如何利用“L=S”准则来调节缺页率,以免“抖动”的发生。
22. 为了实现请求分段式存储管理,应在系统中增长配置哪些硬件机构?
23. 在请求段表机制中,应设置哪些段表项?
24. 说明请求分段系统中的缺页中断处理过程。
25. 请对共享段表中的各项做简要说明。
26. 如何实现共享分段的分配和回收?