虚拟存储器
虚拟存储器作为现代操作系统中存储器管理的一项重要技术,实现了对内存的扩充功能。该功能并非物理上实际扩大内存的容量,而是从逻辑上实现对内存容量的扩充,让用户感觉到内存容量比实际容量大得多。
虚拟存储器概述
将作业一次性装入内存会出现两种情况:
1. 有的作业很大,作业不能全部被装入内存。
2. 由大量作业要求运行,但是内存不足以容纳所有作业。
常规存储管理方式的特征和局部性原理
- 常规存储器管理方式的特征
我们把前面提到的各种存储器管理方式称为:传统存储器方式
其特点:1. 一次性,是指作业必须一次性全部装入内存后方能开始运行。2. 驻留性,是指作业被装入内存后,整个作业都被驻留在内存中,其中任何部分都不会被换出,直至作业结束。 - 局部性原理
程序运行时存在局部性现象:程序在执行时将呈现出局部性规律,即在一较短时间内,程序的执行仅局限于某个部位,相应地它所访问的存储空间也局限于某个区域。局限性又包括:时间局限,空间局限。
- 虚拟存储器的基本工作情况
基于局部性原理可知,应用程序在运行之前没必要全部装入内存,仅需将那些当前要运行的少数页面或段先装入内存便可运行。
虚拟存储器的定义和特征
- 虚拟存储器的定义
虚拟存储器是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。其逻辑容量是由内存和外存容量之和所决定的,其速度接近于内存速度。
- 虚拟存储器的特征
- 多次性:一个程序中的程序和数据分多次调入内存。
- 对换性:指一个程序中的程序和数据无须在作业运行时常驻内存,而是允许在作业的运行过程中进行换进,换出。
- 虚拟性:虚拟性是以多次性和对换性为基础的。
虚拟存储器的实现方法
虚拟存储器的实现毫无例外的都建立在离散分配存储管理方式的基础上。
- 分页请求系统
分页请求系统是在分页系统的基础上增加了请求调页功能和页面置换功能所形成的页式虚拟存储系统。
- 硬件支持
1)请求分页的页表机制。
2)缺页中断机制。
3)地址变换机制。 - 实现请求分页的软件
- 硬件支持
- 请求分段系统
请求分段系统是分段系统的基础上,增加了请求调段及分段置换功能后形成的段式虚拟存储系统。它允许用户程序只要装入少数段的程序和数据即可启动运行。
- 硬件支持
1)请求分段的段表机制。
2)缺段中断机制。
3)地址变换机制。 - 软件支持
- 硬件支持
请求分页存储器管理方式
请求分页是建立在基本分页的基础上,为了能支持虚拟存储器功能,而增加了请求调页功能和页面置换功能。比分段系统简单,是目前最常用的一种实现虚拟存储器的方式。
请求分页中的硬件支持
- 请求页表机制
- 状态位:只有一位,表示它用于指示该页是否已调入内存。
- 访问字段:用于记录本页在一段时间内被访问的次数,或记录本页最近有多长时间未被访问。
- 修改位:标识该页在调入内存后是否被修改过。
- 外存地址:用于指出该页在外存上的地址,通常是物理块号。
- 缺页中断机构
在请求分页系统中,每当所要访问的页面不存在时,便产生一缺页中断。缺页中断作为中断,同样需要经历“保护CPU环境”,“分析中断原因”,“转入缺页中断处理程序进行处理”。区别:
1. 在指令执行期间产生和处理中断信号。
2. 一条指令在执行期间可能产生多次缺页中断。 - 地址变换机构
请求分页中的内存分配
进程分配内存时,涉及三个问题:1. 为保证进程能正常运行,所需要最小物理块数的确定;2. 在选取进程块时应选择什么样的策略;3. 为不同进程所分配的物理块数,是平分还是按大小比例分。
- 最小物理块数的确定
最小物理块数是指能保证进程正常所需的最小物理块数。
- 内存分配策略
在请求分页系统中,可采取两种内存分配策略,即固定和可变分配策略。
- 固定分配局部置换
每个进程分配一组固定数目的物理块,进程运行期间不再改变。所谓局部置换,是指如果进程在运行中发现缺页,则只能从分配该进程的n个页面中选出一页换出,然后再调入一页,以保证分配给该进程的内存空间不变。
- 可变分配全局置换
所谓可变分配,是指先为每个进程分配一定数目的物理块,在进程运行期间,可根据情况做适当的增加或减少。所谓全局置换,是指如果进程在运行中发现缺页,则将OS所有保留的空闲物理块(一般组织为一个空闲物理块队列)取出一块分配给该进程,或者以所有进程的全部物理块Wie标的,选择一块换出。
- 可变分配局部置换
该策略同样是基于进程的类型或根据程序员的需求,为每个进程分配一定数目的物理块,但当某进程发现缺页时,只允许该进程在内存的页面中选择一页换出。
- 固定分配局部置换
- 物理块分配算法
在采用固定分配策略时,采用以下算法:
- 平均分配算法
- 按比例分配算法
- 考虑优先权的分配算法
页面调入策略
为了使进程能够正常运行,必须事先将要执行的那部分程序和数据所在的页面调入内存。
- 何时调入页面
- 预调页策略
- 请求调页策略
当进程在运行中需要访问某部分程序和数据时,若发现其所在的页面不在内存,便会立即提出请求,将OS将其所需页面调入内存。
- 从何处调入页面
将请求分页系统中的外存分为两部分:文件区和对换区。
- 系统拥有足够的对换空间
- 系统缺少足够的对换空间
不会被修改的文件,都直接从文件区调入,由于未被修改,则不必重写到磁盘。
- UNIX方式
与进程有关的文件都放在文件区,凡是为运行过的页面都应从文件区调入。
- 页面调入过程
先保留CPU环境,分析中断原因后转入缺页中断处理程序,如果内存能容纳新页,则启动磁盘I/O,将所缺之页调入内存,然后修改页表。如果内存以满,则用置换算法从内存中选出一页将其换出。
- 缺页率
f = F A f=\frac{F}{A} f=AF
其中,f是缺页率,F是访问页面失败的次数,A是访问总次数。
缺页率受以下大小影响:- 页面大小
- 进程所分配物理块的数目
- 页面置换算法
- 程序的固有特性
页面置换算法
在程序运行过程中,若其索要访问的页面不在内存,而需把它们调入内存,但内存以无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据送到磁盘对换区中。把选择换出页面的算法叫做:页面置换算法。
最佳置换算法和先进先出置换算法
最佳置换算法是一种理想化的算法,具有好的性能,但是无法实现。先进先出置换算法最直观,但是与规律不符,可能是性能最差的算法。
- 最佳置换算法(Optimal)
选择的被淘汰页面是以后永不使用的,也许是最长时间内不再被访问的页面。
- 先进先出页面置换算法(FIFO)
最先淘汰最先进入内存的页面。
最近最久未使用和最少使用置换算法
- LRU置换算法的描述
选择最近最久未使用的界面予以淘汰。
- LRU置换算法的硬件支持
LRU置换算法虽然是一种较好的算法,但要求系统由较多的支持硬件。
- 寄存器
为了记录某进程在内存中各页的使用情况,须为每个内存中的页面配置一个移位寄存器。
- 栈
- 寄存器
- 最少使用置换算法
在内存中每个页面设置一个移位寄存器,来记录该页面的被访问频率。
Clock置换算法
LRU需要较多的硬件支持,所以采用LRU的近似算法:Clock算法
- 简单的Clock算法
需要一个循环队列,给放过的页面置位1,循环查找。
- 改进型Clock置换算法
页面缓冲算法
在分页系统中,由于进程在进行时经常会发生页面换进换出的情况,所以一个十分明显的事实就是,页面的换进换出所付出的开销将对系统性能产生重大影响。
- 影响页面换进换出效率的若干因素
- 页面置换算法
- 写回磁盘的频率
- 读入内存的频率
- 页面缓冲算法PBA
显著地降低了页面换进、换出的频率,使用磁盘I/O的操作次数大大减少,因而减少了页面换进、换出的开销。不需要特殊硬件的支持,实现起来比较简单。
访问内存的有效时间
设内存有效访问时间为EAT,查找快表时间为λ,实际物理访问为t。
- 被访问页在内存中,且也在快表中:EAT=λ+t
- 在内存不在快表:EAT=2(λ+t)
- 不在内存:~~(好长,不写)
“抖动”与工作集
由于请求分页式模拟存储器系统的性能优越,能有效减少内存碎片,提高处理机的利用率和吞吐量,所以是一种常用的系统。但是会频繁发生缺页的情况。
多道程序度与“抖动”
- 多道程序度与处理机的利用率
- 产生“抖动”的原因
同时在系统中运行的进程太多,由此分配给每一个进程的物理块太少,不能满足进程正常运行的基本要求,致使每个进程在运行时,频繁地出现缺页、必须请求系统将所缺之页调入内存。
工作集
- 工作集的基本概念
基于程序运行时的局部性原理可知,程序在运行期间,对页面的访问是不均匀的,在一段时间内仅局限于较少的页面。这些页面成为“活跃页面”。
- 工作集的定义
所谓工作集,是指在某段时间间隔里,进程实际所要访问页面的集合。
“抖动”的预防方法
- 采取局部置换策略
- 把工作集算法融入到处理机调度中
- 利用“L=S”准则调节缺页率
- 选择暂停的进程
请求分段存储管理方式
在分页基础上建立的请求分页式虚拟存储器系统,是以页面为单位进行换入、换出的。而分段基础上所建立的请求分段式虚拟存储系统,则是以分段为单位进行换入、换出的。
请求分段中的硬件支持
- 请求段表机制
在段表项中,处理段号、段长、段在内存中的起始地址外,还增加了:存取方式、访问字段A、修改位M、存在位P、增补位、外存始址
- 缺段中断机构
- 地址变换机构
分段的共享与保护
- 共享段表
为了实现共享,可在系统中配置一张共享表,所有各共享段表中占有一表项。在表项的上面记录了共享段的:段长、段号、内存始址、状态位、外存始址。
- 共享段的分配与回收
- 分段保护
- 越界检查
- 存取控制检查
- 环保护机构
习题
-
常规存储器管理方式具有哪两大特点?它对系统有何影响?
1. 一次性:进程必须全部装入内存,对空间浪费很大。 2. 驻留性:在程序运行过程中,进程全部驻留内存,暂时不用的数据无法释放
-
什么是程序的时间局限性和空间局限性?
1. 时间局限性:如果程序中的某条指令一旦执行,则不就的将来该指令可能再次执行;如果某个存储单元被访问,则不久的将来,该存储单元可能再次被访问。产生时间局限性的典型原因是在程序中存在着大量的循环操作。 2. 空间局限性:一旦程序访问了某个存储单元,则在不久的将来,其附近的存储单元也最有可能被访问,即程序在一段时间内所访问的地址,可能集中在一定的范围内。产生空间局限性的典型原因是程序是顺序执行的。
-
虚拟存储器由那些特征?其中最本质的特征是什么?
虚拟存储器具有多次性、对换性、虚拟性三大特征,其中呢最本质的特征是虚拟性。
-
实现虚拟存储器需要那些硬件支持?
1. 请求分页(段)的页(段)表机制 2. 页(段)中断机制 3. 地址变换机构
-
实现虚拟存储器都需要那几个关键技术?
(1)在分页请求系统中是在分页的基础上,增加了请求调页功能和页面置换功能所形成的页式虚拟存储系统。允许只装入少数页面的程序(及数据),使启动运行。 (2)在请求分段系统中是在分段系统的基础上,增加了请求调段及分段置换功能后形成的段式虚拟存储系统。允许只装入少数段(而非所有段)的用户程序和数据,即可启动运行。
-
在请求分页系统中,页表应包括哪些数据项,每一项的作用是什么?
页表应包括:页号、物理块号、状态位P、访问字段A、修改位M和外存地址。
-
试比较缺页中断机制和一般中断机制,它们之间有什么区别?
一般中断机制只需要保护现场然后就可以直接调到需及时处理的地方。 缺页中断除了保护现场外,还要判断内存中是否有足够的空间存储所需的页或段,然后再把所需页调进来再使用。
-
试说明请求分页系统中的地址变换过程:
1)取逻辑地址分解为页号P和页内偏移w; 2)根据页号查找页表,获得该页的描述信息; 3)若该页中断位为1,产生缺页中断; 4)更新该页的描述信息; 5) 根据页块号和页内偏移w,计算物理地址。
-
何谓固定分配局部置换和可变分配和全局置换的内存分配策略?
(1)固定分配局部置换固定分配是指,为每个进程分配一组固定数目的物理块,在进程运行期间不再改变。 局部置换是指,如果进程在运行中发现缺页,则只能从分配给该进程的n个页面中,选出一页换出,然后再调入一页。 (2)可变分配全局置换可变分配是指,先为每个进程分配一定数目的物理块,在进程运行期间,可根据情况做适当地改变。 全局置换是指,如果进程在运行中发现缺页,则将0S所保留的空闲物理块或者以所有进程的全部物理块为标的,选择一块换出,然后将所缺之页调入。
-
在请求分页系统中,常采用哪几种页面置换算法?
答:采用的页面置换算法有:最佳置换算法和先进先出置换算法,最近最久未使用(LRU)置换算法,Clock置换算法,最少使用置换算法,页面缓冲算法等。
-
当前可以利用哪几种方法来防止“抖动”?
(1)采取局部置换策略(2)把工作集算法融入到处理机调度中(3)利用“L=S”准则调节缺页率(4)选择暂停的进程