虚拟存储管理方式

        前面的所有管理方式都需要将一个作业全部装入内存才能运行,对内存消耗很大。

对此,能否将暂时不需要访问的数据/代码放到外存,将马上/不久将来要访问的数据/代码装入主存。----虚拟存储技术

目录

1、虚拟存储的基本概念

2、虚拟存储管理方式类别 

(1)页式虚拟存储管理

          页面置换算法

(2)请求分段存储管理


1、虚拟存储的基本概念


局部性原理
程序在执行时将呈现出局部性规律,即在一段时间内程序的执行仅局限于某个部分。
局部性表现为:
时间局限性:程序中存在着大量的循环操作。
空间局限性:程序是顺序执行的,所以一段时间内程序会集中在一定的范围内。

虚拟存储实现

  • 仅将那些当前要运行的那部分页面或段,先装入内存便可启动运行,其余部分暂时留在外存上
  • 如果程序所要访问的页(段)尚未调入内存(称为缺页或缺段),此时程序应利用操作系统所提供的请求调页(段)功能,将它们调入内存,以使进程能继续执行下去。
  • 如果此时内存已满,无法再装入新的页(段),则还须再利用页(段)的置换功能,将内存中暂时不用的页(段)调出至磁盘上

虚拟存储是采用请求调入和置换功能,将内存和外存统一管理,达到把作业的一部分装入内存便可运行,给用户提供的一个比内存容量大的一维的逻辑地址空间。容量由内存和外存容量之和、计算机的地址结构二者所决定,其运行速度接近于内存速度。

实现虚拟存储技术的物质基础:

  1. 有相当容量的辅助存储器,以存放所有并发作业的地址空间
  2. 有一定容量的内存,来存放运行作业的部分程序
  3. 有动态地址转换机构,实现逻辑地址到物理地址的转换

        虚拟存储技术是一种性能非常优越的存储器管理技术,故被广泛地应用于大、中、小型机器和微型机中。

2、虚拟存储管理方式类别 

  • 请求分页式:

在页式存储管理的基础上,增加了请求调页和页面置换功能所形成的页式虚拟存储管理

  • 请求分段式:

在段式存储管理的基础上,增加了请求调段和分段置换功能所形成的段式虚拟存储管理。

  • 请求段页式:

在段页式存储管理的基础上,增加了请求调页和页面置换功能所形成的段页式虚拟存储管理。

(1)页式虚拟存储管理

        在页式存储管理的基础上,增加了请求调页和页面置换功能所形成的页式虚拟存储管理。

为实现调页和置换功能,系统提供:扩充页表机制和缺页中断机制。

  • 请求分页的页表机制

        需在页表中再增加若干项,供程序(数据)在换进、换出时参考。在请求分页系统中的每个页表项如图所示:

在这里插入图片描述其中各字段说明如下:

  1. 状态位(中断位P):用于指示该页是否已调入内存,供程序访问时参考。
  2. 访问字段A:用于记录本页在一段时间内被访问的次数,或最近已有多长时间未被访问,提供给置换算法选择换出页面时参考。
  3. 修改位M:表示该页在调入内存后是否被修改过。
  4. 外存(辅存)地址:用于指出该页在外存上的地址,通常是物理块号,供调入该页时使用
  • 缺页中断机构

​ 在请求分页系统中,每当所要访问的页面不在内存时,便要产生一缺页中断,请求OS将所缺页调入内存。

​ 与一般中断的主要区别在于:

  1. 缺页中断在指令执行期间产生和处理中断信号,而一般中断在一条指令执行完后检查和处理中断信号。
  2. 缺页中断返回到该指令的开始重新执行该指令,而一般中断返回到该指令的下一条指令执行。
  3. 一条指令在执行期间,可能产生多次缺页中断。

缺页时的地址转换问题:

逻辑地址-->LAR-->页号-->查快表(未查到)-->页表-->不在主存-->产生缺页中断-->将所缺页面装入主存-->块号-->物理地址

   产生的问题:

  •      频繁的缺页中断将产生抖动现象,抖动现象将大幅度的影响CPU执行速度;
  •     如果系统给作业的块数固定,主存中已经装满,此时需要置换一个新的页面,如何淘汰主存中的一个页面,让出空间。(页面置换过程)

为解决以上问题,我们需要相应的页面置换算法。

页面置换算法

  • 先进先出(FIFO)算法

思路:先进先出,采取队列实现,产生缺页中断时选取最早进入主存的页面进行页面淘汰。

例:假设某个作业的页面访问序列为:0 2 1 2 3 1 0 2 4 5 2,系统给作业的块数固定为3块。则其的页面置换实现过程为:

虚拟存储管理方式_第1张图片

        首次装入的作业也会产生缺页中断(作业的装入就是通过缺页中断实现的);在这个访问序列中有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块

虚拟存储管理方式_第2张图片

缺页中断率为: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:记录有多少个进程需要共享该分段。
  • 存取控制字段:说明不同的进程对该分段不同的存取权限。
  • 段号:对于同一个共享段,不同的进程可以使用不同的段号去共享该段。

  • 存储保护

存储保护是存储管理的重要任务,常用保护措施有越界检查、存取控制检查和环保护机构。在分段系统中,由于每个分段在逻辑上是独立的,因而实现信息共享保护有意义。

  • 越界检查

在段表寄存器中放有段表长度信息,在段表中也为每个段设置有段长字段。
分段地址映射及存储保护机制:

在这里插入图片描述

  • 存取控制检查

在段表的每个表项中,都设置了一个“存取控制”字段,用于规定对该段的访问方式:

  • 只读,即只允许进程对该段中的程序或数据进行读访问
  • 只执行,即只允许进程调用该段去执行,但不允许执行读写操作
  • 读/写,即允许进程对该段进行读写访问

你可能感兴趣的:(windows)