前面的所有管理方式都需要将一个作业全部装入内存才能运行,对内存消耗很大。
对此,能否将暂时不需要访问的数据/代码放到外存,将马上/不久将来要访问的数据/代码装入主存。----虚拟存储技术
目录
1、虚拟存储的基本概念
局部性原理
程序在执行时将呈现出局部性规律,即在一段时间内程序的执行仅局限于某个部分。
局部性表现为:
时间局限性:程序中存在着大量的循环操作。
空间局限性:程序是顺序执行的,所以一段时间内程序会集中在一定的范围内。
虚拟存储实现
- 仅将那些当前要运行的那部分页面或段,先装入内存便可启动运行,其余部分暂时留在外存上
- 如果程序所要访问的页(段)尚未调入内存(称为缺页或缺段),此时程序应利用操作系统所提供的请求调页(段)功能,将它们调入内存,以使进程能继续执行下去。
- 如果此时内存已满,无法再装入新的页(段),则还须再利用页(段)的置换功能,将内存中暂时不用的页(段)调出至磁盘上
虚拟存储是采用请求调入和置换功能,将内存和外存统一管理,达到把作业的一部分装入内存便可运行,给用户提供的一个比内存容量大的一维的逻辑地址空间。容量由内存和外存容量之和、计算机的地址结构二者所决定,其运行速度接近于内存速度。
实现虚拟存储技术的物质基础:
- 有相当容量的辅助存储器,以存放所有并发作业的地址空间
- 有一定容量的内存,来存放运行作业的部分程序
- 有动态地址转换机构,实现逻辑地址到物理地址的转换
虚拟存储技术是一种性能非常优越的存储器管理技术,故被广泛地应用于大、中、小型机器和微型机中。
2、虚拟存储管理方式类别
- 请求分页式:
在页式存储管理的基础上,增加了请求调页和页面置换功能所形成的页式虚拟存储管理
- 请求分段式:
在段式存储管理的基础上,增加了请求调段和分段置换功能所形成的段式虚拟存储管理。
- 请求段页式:
在段页式存储管理的基础上,增加了请求调页和页面置换功能所形成的段页式虚拟存储管理。
(1)页式虚拟存储管理
在页式存储管理的基础上,增加了请求调页和页面置换功能所形成的页式虚拟存储管理。
为实现调页和置换功能,系统提供:扩充页表机制和缺页中断机制。
- 请求分页的页表机制
需在页表中再增加若干项,供程序(数据)在换进、换出时参考。在请求分页系统中的每个页表项如图所示:
其中各字段说明如下:
- 状态位(中断位P):用于指示该页是否已调入内存,供程序访问时参考。
- 访问字段A:用于记录本页在一段时间内被访问的次数,或最近已有多长时间未被访问,提供给置换算法选择换出页面时参考。
- 修改位M:表示该页在调入内存后是否被修改过。
- 外存(辅存)地址:用于指出该页在外存上的地址,通常是物理块号,供调入该页时使用
-
缺页中断机构
在请求分页系统中,每当所要访问的页面不在内存时,便要产生一缺页中断,请求OS将所缺页调入内存。
与一般中断的主要区别在于:
- 缺页中断在指令执行期间产生和处理中断信号,而一般中断在一条指令执行完后检查和处理中断信号。
- 缺页中断返回到该指令的开始重新执行该指令,而一般中断返回到该指令的下一条指令执行。
- 一条指令在执行期间,可能产生多次缺页中断。
缺页时的地址转换问题:
逻辑地址-->LAR-->页号-->查快表(未查到)-->页表-->不在主存-->产生缺页中断-->将所缺页面装入主存-->块号-->物理地址
产生的问题:
- 频繁的缺页中断将产生抖动现象,抖动现象将大幅度的影响CPU执行速度;
- 如果系统给作业的块数固定,主存中已经装满,此时需要置换一个新的页面,如何淘汰主存中的一个页面,让出空间。(页面置换过程)
为解决以上问题,我们需要相应的页面置换算法。
页面置换算法
- 先进先出(FIFO)算法
思路:先进先出,采取队列实现,产生缺页中断时选取最早进入主存的页面进行页面淘汰。
例:假设某个作业的页面访问序列为:0 2 1 2 3 1 0 2 4 5 2,系统给作业的块数固定为3块。则其的页面置换实现过程为:
首次装入的作业也会产生缺页中断(作业的装入就是通过缺页中断实现的);在这个访问序列中有6个页面,序号为0-5;当系统给出的物理块中已装入该页面,如果CPU访问的是物理块中已有的页面,则不会产生缺页中断,可直接进行访问;
缺页中断率:作业执行过程中出现缺页中断的次数/总页面访问次数
此例中的缺页中断率为:8/11
由于缺页中断率较高,容易产生抖动现象。
对FIFO算法的改进:
增加访问标志,建立循环队列,淘汰时检查最早进入主存页面是否被访问了,如果是则选择下一次早进入的页面进行淘汰,以此类推。
时钟置换算法:
类似一个钟表,一个块指向一个页面,块在循环队列中,指针从队头开始指向;如果指到的块的标记是1,则指针指向下一块,如果是0,则淘汰该块指向的页面,循环如此,一直指向队尾。
FIFO算法可能使得马上访问的页面被淘汰。
- LRU算法----最近最久未访问淘汰算法
思路:局部性特征:在过去一段时间内,被访问的页面在不久的将来很可能被访问到,因此这些页面不该被淘汰。LRU算法不符合局部性特征。LRU认为:在过去一段时间内,被访问的页面在不久的将来很可能被访问不到,因此这些页面该被淘汰。
实现模型:栈
栈顶:最近访问的页面 栈底:最久未访问的页面
缺页中断淘汰栈底的页面
例:假定某个作业的页面访问序列为:0 2 1 2 3 1 0 2 4 5 2;系统给该作业的物理块数为:3块
缺页中断率为:8/11
容易出现抖动现象,且计算机在软硬件上实现困难。
- LFU算法----最近最少访问淘汰算法
思路:在最近一段时间内,访问频率最少的页面在不久的将来很可能访问不到,将其淘汰。
具体实现方式:扩充页表,增加页表访问计数,同样设置定时器。再一定时间内对页面的访问进行计数,产生缺页中断时,选择计数值最小的页面5淘汰。
计算机在软硬件上实现困难。
例:假定系统为某进程分配了3个物理块,并考虑有以下的页面号引用串:
7,0,l,2,0,3,0,4,2,3,0,3,2,l,2,0,l,7,0,1。
- OPT算法----最优最理想算法
思路:将未来访问不到的页面进行淘汰。
前面三种算法均是建立在过去执行过程中访问页面的情况,OPT算法是对未来没执行的页面进行估计。但作业执行过程中其页面序列是不确定的,故无法进行估计。
工作集
所谓工作集是指,在某段时间间隔(Δ)里,进程实际要访问的页面的集合。
缺页率随着所分得的物理块数目的减少而递增,并在所分到的物理块数目较少处,出现一个拐点。
在拐点下限以左时,随着分到的物理块数目的增加,缺页率明显地减少;
而过了拐点,在下限以右时,随着分到的物理块数目的增加,却对缺页率的改善并不明显。
所以,为进程分配的物理块数,应取在该曲线的拐点左右。
(2)请求分段存储管理
请求分段系统在分段系统的基础上实现的虚拟存储器,是以分段为单位进行换入、换出的,同样需要一定的硬件支持和相应的软件,有段表机制、缺段中断机构以及地址变换机构。
- 段表机制
在请求分段式管理中在段表中增加若干项,以供程序在调进、调出时参考。
- 存取方式:用于标识本分段的存取属性是只执行、只读,还是允许读/写。
- 访问字段A:用于记录该段被访问的频繁程度。
- 修改位M:用于表示该段进入内存后,是否已被修改过。
- 存在位P:说明本段是否已调入内存。
- 增补位:用于表示本段在运行过程中,是否进行过动态增长。
- 外存起址:指示本段在外存中的起始地址,即起始盘块号。
- 缺段中断机构
在请求分段系统中,采用的是请求调段策略。
缺段中断的处理过程如下图:
类同缺页中断机构,当进程所要访问的段未调入内存时,便由缺段中断机构在硬件指令中间产生一缺段中断信号,由缺段中断处理程序将所需的段调入内存。与缺页中断机构不同的是由于各段长不同,置换时对内存的管理采用可变分区管理。
- 分段的共享
在请求分段存储管理中为了实现分段共享,减少共享段的调进调出次数,应增加配置共享段表,用来对共享段进行管理
在系统中,用共享段表来记录每一个共享段的段号和段长、内存始址、存在位等信息,并记录共享此分段的每个进程的情况。
- 共享进程计数器COUNT:记录有多少个进程需要共享该分段。
- 存取控制字段:说明不同的进程对该分段不同的存取权限。
- 段号:对于同一个共享段,不同的进程可以使用不同的段号去共享该段。
- 存储保护
存储保护是存储管理的重要任务,常用保护措施有越界检查、存取控制检查和环保护机构。在分段系统中,由于每个分段在逻辑上是独立的,因而实现信息共享保护有意义。
- 越界检查
在段表寄存器中放有段表长度信息,在段表中也为每个段设置有段长字段。
分段地址映射及存储保护机制:
- 存取控制检查
在段表的每个表项中,都设置了一个“存取控制”字段,用于规定对该段的访问方式:
- 只读,即只允许进程对该段中的程序或数据进行读访问
- 只执行,即只允许进程调用该段去执行,但不允许执行读写操作
- 读/写,即允许进程对该段进行读写访问