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