操作系统——存储管理

文章目录

  • 1.存储管理概述
    • 1.1存储层次结构
    • 1.2存储器管理的功能
      • 1.2.1内存分配
      • 1.2.2地址映射
      • 1.2.3存储保护
      • 1.2.4内存扩充
    • 1.3地址重定位
      • 1.3.1名字空间、地址空间和存储空间
      • 1.3.2地址重定位
        • 1.3.2.1静态重定位
        • 1.3.2.2动态重定位
  • 2.存储器连续分配
    • 2.1单一连续分配管理方式
    • 2.2分区存储管理方式
      • 2.2.1固定分区分配方式
      • 2.2.2可变(动态)分区分配方式
        • 2.2.2.1可变分区概述
        • 2.2.2.2可变分区的数据结构
        • 2.2.2.3可变分区分配算法
          • 1.最佳适应算法BF
          • 2.首次适应算法FF
          • 3.循环首次适应算法NF
          • 4.最坏适应法
        • 2.2.2.4可变分区回收算法
        • 2.2.2.5可变分区的零头
        • 2.2.2.6分区存储保护
  • 3.存储器的离散分配
    • 3.1纯分页存储管理方式
      • 3.1.1分页存储管理原理
      • 3.1.2页表
      • 3.1.3地址变换机构
      • 3.1.4快表
    • 3.2分段存储管理方式
      • 3.2.1分段存储方式的引入
      • 3.2.2分段系统基本原理
      • 3.2.3段表
      • 3.2.4共享
      • 3.2.5分页和分段的主要区别
    • 3.3段页式存储管理
      • 3.3.1基本原理
      • 3.3.2地址变换过程
  • 4.虚拟存储器管理技术
    • 4.1虚拟存储器的基本概念
      • 4.1.1局部性原理
      • 4.1.2虚拟存储器的定义
      • 4.1.3虚拟存储器实现方式
      • 4.1.4虚拟存储器的特征
    • 4.2请求分页存储管理
      • 4.2.1请求分页的硬件支持
        • 4.2.1.1请求分页的页表机制
        • 4.2.1.2缺页中断机构
      • 4.2.2请求分页存储管理应考虑的问题
        • 4.2.2.1最少物理块数的确定
        • 4.2.2.2物理块的分配和置换策略
        • 4.2.2.3物理块分配算法
        • 4.2.2.4调页策略
      • 4.2.3页面置换算法
        • 4.2.3.1最佳置换(OPT)算法
        • 4.2.3.2先进先出(FIFO)置换算法
        • 4.2.3.3最近最久未使用置换(LRU)算法
        • 4.2.3.4最少使用置换(LFU)算法
      • 4.2.4性能分析
        • 4.2.4.1缺页率对有效访问时间的影响
        • 4.2.4.2工作集
    • 4.3请求分段存储管理
      • 4.3.1段表机制
      • 4.3.2缺段中断机构
      • 4.3.3分段的共享
      • 4.3.4存储保护
        • 4.3.4.1越界检查
        • 4.3.4.2存取控制检查

1.存储管理概述

1.1存储层次结构

  • 存储器是处理所处理信息的来源归宿,占据重要地位。
  • 为解决速度和容量的矛盾,冯·诺依曼计算机系统中,采用了三级或更多级的存储器来组成存储层次结构,高一级为CPU寄存器和高速缓存器,中间是主存,最低一级为辅存
  • 存储器的功能是保存数据
  • 存储组织是指在存储技术和CPU寻址技术许可范围内组织合理的存储结构
  • 存储层次结构图如下:

操作系统——存储管理_第1张图片

1.2存储器管理的功能

操作系统为了有效地管理计算机的内存资源,应该具备以下四大功能:内存分配内存保护地址映射内存扩充

1.2.1内存分配

主要任务:为每一道程序分配内存空间,当程序撤消时,则收回它占用的内存空间。

1.2.2地址映射

目标程序所访问的地址是逻辑地址集合的地址空间,而内存空间是内存中物理地址的集合,在多道程序环境下,这两者是不一致的。
因此,存储管理必须提供地址映射功能,用于把程序地址空间中的逻辑地址转换为内存空间中对应的物理地址。

1.2.3存储保护

内存保护的任务就是确保每道程序都在自己的内存空间运行,互不干扰。

1.2.4内存扩充

内存扩充的任务是从逻辑上来扩充内存容量,使用户认为系统所拥有的内存空间远比其实际的内存空间(硬件RAM)大的多。

1.3地址重定位

1.3.1名字空间、地址空间和存储空间

  • 名字空间:在源程序中,是通过符号名来访问子程序和数据的,我们把程序中符号名的集合称为“名字空间”

  • 把目标模块中的地址称为相对地址(或称为“逻辑地址”),而把相对地址的集合称为**“相对地址空间/逻辑地址空间”**或简称为“地址空间”

三者关系如图:

操作系统——存储管理_第2张图片

1.3.2地址重定位

地址重定位完成把相对地址转换成内存中的绝对地址,这个过程称为地址映射(map)。按照重定位的时机,可分为静态重定位动态重定位

1.3.2.1静态重定位
  • 静态重定位是在程序执行之前进行重定位。

  • 根据装配模块将要装入的内存起始地址,直接修改装配模块中的有关使用地址的指令。

    原理如图:

    操作系统——存储管理_第3张图片

    eg:LOAD 1,2500 这条指令是把相对地址为2500的存储单元的内容365装入1号累加器。而这时内容为365的存储单元的实际物理地址为12500(起始地址10000+相对地址2500),所以LOAD 1,2500 这条指令中的直接地址码要作相应的修改,即改为LOAD 1,12500

1.3.2.2动态重定位
  • 动态重定位是指在程序执行过程中进行地址重定位,即在每次访问内存单元前才进行地址变换。但是它需要硬件—重定位寄存器的支持

    原理如图:

    操作系统——存储管理_第4张图片

在图3-4中LOAD 1,2500这条指令中仍保持相对地址2500。当该指令被操作系统取到中央处理器指令寄存器上执行时,操作系统首先把该模块装入的实际起始地址减去目标模块的相对基地址(图3-4中该模块的基地址为0),然后将其差值10000装入重定位寄存器。

  • 动态重定位的好处
    • 目标程序装入内存时无需任何修改,所以装入之后再移动也不会影响其正确运行,这便于存储器用紧缩来解决存储器的碎片问题
    • 一个程序由若干个相对独立的目标模块组成时,每个目标模块各装入一个存储区域,这些存储区域可以不相邻接,只要各个模块有自己对应的重定位寄存器就可以了。

2.存储器连续分配

2.1单一连续分配管理方式

该存储管理方式只能用于单用户、单任务的操作系统。它将内存分为两个区:

  • 系统区:仅供操作系统使用,通常设置在内存的低段。
  • 用户区:指除系统区以外的全部内存空间,提供给用户使用。

2.2分区存储管理方式

分区存储管理是能够满足多道程序运行的存储器管理方案,其基本思想是将内存划分成若干个连续的区域,称为分区

  • 每个分区只能储存一个程序,而且程序也只能在它所驻留的分区中运行。
  • 根据分区个数及分区大小的可变性分为固定式分区可变式分区两种

2.2.1固定分区分配方式

  • 固定分区是在作业装入之前,内存就被划分成若干个分区。

  • 划分工作可以由系统管理员完成,也可以由操作系统实现。

  • 一旦划分完成,在系统运行期间不再重新划分,即分区的个数不可变,分区的大小不可变,所以,固定式分区又称为静态分区

  • 系统有一张分区说明表,每个表目说明一个分区的大小、起始地址和是否已分配的使用标志。分区说明表和内存分配图如下所示。

操作系统——存储管理_第5张图片

  • 固定式分区实现技术简单,但是内存的利用率不高

  • 采用这种技术,虽然可以使多个作业共驻内存,但每个被分配的分区总有一部分被浪费,这部分被浪费的存储区称为内零头内碎片

2.2.2可变(动态)分区分配方式

2.2.2.1可变分区概述
  • 可变分区是指在作业装入内存时,从可用的内存中划出一块连续的区域分配给它,且分区大小正好等于该作业的大小,且分区大小和分区个数都是可变的。

  • 优点:可以获得较大的灵活性,又能提高内存的利用率

  • 系统初始化后,内存被划分成两块,一块用于常驻的操作系统,另一块则是完整的空闲区(用户区)。如图:512KB内存中除20KB操作系统外,装入作业2、3、4、6四个,有空闲区1、2、3三个。

操作系统——存储管理_第6张图片

2.2.2.2可变分区的数据结构
  • 空闲区表形式
    空闲分区表为每个尚未分配的分区设置一个表项,包括分区的序号、大小、始址和状态

  • 空闲区链形式

    在每个分区的起始部分,设置一些用于控制分区分配的信息,以及用于链接其它分区的前向指针;在分区尾部,则设置了一个后向指针,为了检索方便也设置了控制分区分配的信息。将所有的分区链接成一个双向链表。

2.2.2.3可变分区分配算法
1.最佳适应算法BF
  • 空闲分区表(空闲区链)中的空闲分区要按大小从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留大的空闲区,但造成许多小的空闲区的浪费。
2.首次适应算法FF
  • 从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区。
3.循环首次适应算法NF
  • 该算法是首次适应算法的一种转化,它把空闲分区表(空闲区链)中的空闲分区按地址递增构成一个循环链。在分配内存空间时,不再每次从表头(链首)开始查找,而是从上次找到的空闲区的下一个空闲区开始查找,直到找到第一个能满足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作业。该算法能使内存中的空闲区分布得比较均匀
4.最坏适应法
  • 从所有未分配的分区中挑选最大的且大于等于作业大小的分区分给要求的作业;空闲分区按大小由大到小排序。该算法使小的空闲区减少,但造成大的空闲区不够大。
2.2.2.4可变分区回收算法

当一个作业运行完毕释放内存时,系统根据释放区的首地址,从空闲区说明表中找到相应的插入点,此时可能出现下列四种情况,如图,其中F1,F2表示回收区的前、后空闲区。

操作系统——存储管理_第7张图片

  1. 当回收区既不与F1邻接,又不与F2邻接时(如图(a)),应为回收区单独建立一项新表目,填写回收区的起址和大小,并根据其起址,插入到空闲区说明表的适当位置。
  2. 当回收区只与插入点的前一个分区F1相邻接时(如图(b)),应将回收区与插入点的前一个分区合并,不再为回收区分配新的表目,而只需修改F1分区表目的大小即可。
  3. 当回收区只与插入点的后一个分区F2相邻接时(如图(c)),将把两个空闲区合并,修改F2分区的表目,把回收区的起址作为新空闲区的起址,大小为两个分区之和。
  4. 当回收区与插入点的前、后两个分区(F1和F2)都相邻接时(如图(d)),合并三个分区,用F1表目的起址作为新空闲区的起址,修改其大小为三块分区之和,最后取消F2的表目。
2.2.2.5可变分区的零头
  • 可变分区也有零头问题。在系统不断地分配和回收中,必定会出现一些不连续的小的空闲区,称为外零头外碎片
  • 解决零头的方法是拼接或紧凑,即向一个地址方向移动已分配的作业,使那些零散的小空闲区在另一方向连成一片。
  • 一方面是要求能够对作业进行重定位,另一方面系统在拼接时要耗费较多的时间。采用拼接技术的可变分区又称可重定位分区
2.2.2.6分区存储保护
  • 分区的存储保护是用户程序只能访问自己的用户分区,不能访问系统分区和其它程序的分区
  • 分区存储保护常用方法是界地址法界限寄存器

3.存储器的离散分配

为了减少碎片提高存储器的利用率而引入了离散分配方式,它将一个用户的程序划分成若干个大小相等的页再离散地分配到内存的多个不相邻的区域中。

3.1纯分页存储管理方式

3.1.1分页存储管理原理

  • 分页存储管理是将一个进程的地址空间划分成若干个大小相等的片,称为页面或页,相应地,将内存空间划分成与页相同大小的若干个块,称为**(物理)块或页框**。
  • 分页存储管理解决了“碎片”问题,提高了存储器的利用率。
  • 纯分页存储管理是指一个进程的所有页全部装入内存的物理块中才能运行。
  • 分页系统的地址结构由两部分组成:前一部分为页号P后一部分为页内位移量W,即页内地址

3.1.2页表

  • 将进程的每一页离散地分配到内存的各个物理块中后,为了保证进程的正确运行,能在内存中找到该进程每个页面所对应的物理块,系统需为每页配一个重定位寄存器,由于重定位寄存器是硬件,在页面数很多时实现困难。
  • 为此,系统在内存为每个进程建立了一张页面映射表,简称页表,每个页在页表中占一个表项,记录该页在内存中对应的物理块号(页号可以省略)。

如图:

操作系统——存储管理_第8张图片

3.1.3地址变换机构

  • 地址变换机构的基本任务:利用硬件实现查页表,把用户程序中的逻辑地址变换成内存中的物理地址。

  • 为了实现该功能,在系统中设置页表寄存器:用来存放页表的始址页表的长度

  • 在进程未执行时,每个进程对应的页表的始址和长度存放在进程的PCB中,当该进程被调度时,就将它们装入页表寄存器

  • 在进行地址变换的步骤

  1. 系统将逻辑地址截成页号页内地址两部分
  2. 页号页表长度进行比较:如果页号大于等于页表寄存器中的页表长度,则访问越界,产生越界中断。如未出现越界,则根据页表寄存器中的页表始址和页号计算出该页在页表项中的位置,查页表得到该页的物理块号
  3. 将物理块号与逻辑地址中页内地址二者拼接成物理地址。

计算案例:假设页长为1KB(1024字节),逻辑地址为2500(十进制)。利用页表把逻辑地址变换成物理地址计算步骤如下:
​ (1)将虚地址分离成页号P和页内地址d:
​ 页号P=(逻辑地址/页大小)取整=(2500/1024)取整=2
​ 页内地址d=逻辑地址 mod 页大小=2500 mod 1024=452
​ (2)根据页号查页表,由页表项读出块号:
​ 由页号 P=2查页表得块号为5
​ (3)块号和页内地址构成物理地址:
​ 物理地址=块号×页大小+页内地址= 5*1024+452 =5572

3.1.4快表

  • 为了提高地址变换的速度,在地址变换机构中增设了一个具有按内容查找、并行查询功能的特殊的高速缓冲存储器,称为“联想存储器” 或“快表”,或称为“关联存储器” ,用以存放当前访问的那些页表项,每个页表项包括页号和相应的块号(页号不能省略)。

  • 原理:在快表的输入寄存器输入页号后,输入页号与快表中的各页表项中的页号同时比较,如有相同,快表的输出寄存器输出相应的块号,如都不相同,快表的输出寄存器不输出。

3.2分段存储管理方式

3.2.1分段存储方式的引入

  • 从固定分区到可变分区,进而又发展到分页系统的目的都是为了提高内存的利用率,然而分段存储管理的引入,是为了满足用户需要
  • 分页存储管理时的进程地址空间结构都是线性的,这要求对各段源程序编译成目标程序后还要静态链接

案例:把四个源程序段编译后的目标程序段:主程序段main(15KB)、子程序段X(5KB)、数据段D(6KB)、堆栈段S(7KB)按线性空间的一维地址顺序排列起来,再分成8页,每页为4KB。如图:

操作系统——存储管理_第9张图片

这时一个页面中可能装有两个不同子程序段的指令代码

3.2.2分段系统基本原理

  • 在分段存储管理方式中,作业的地址空间按逻辑信息完整性被划分为若干个段,每个段都有自己的名字,编译后都是从零开始编成的一段连续的地址空间,段的长度由相应逻辑信息组的长度决定,因而各段长度是不等的。

  • 逻辑地址由段号和段内地址两部分组成

3.2.3段表

  • 类似分页式存储管理,在分段式存储管理系统中为每个进程建立一张段映射表,简称为“段表”。每个段在表中占有一表项,在其中记录了该段在内存中的起始地址(又称为“基址”)和段的长度
  • 为实现从逻辑地址到物理地址的变换功能,系统中设置了段表寄存器,用于存放段表始址段表长度
  • 在进行地址变换时,系统会将逻辑地址截成段号S段内地址d

3.2.4共享

  • 段是信息的逻辑单位,因此分段系统的一个突出的优点是易于实现段的共享。(即允许若干个进程共享一个或多个段)

  • 在实现段共享时,需要用到可重入代码又称为**“纯代码”。它是一种允许多个进程同时访问的代码,是一种不允许任何进程对其进行修改**的代码。

3.2.5分页和分段的主要区别

操作系统——存储管理_第10张图片

操作系统——存储管理_第11张图片

3.3段页式存储管理

  • 它是一种以分页的方式管理内存,具有分页系统能有效地提高内存利用率的优点;又以分段的方式管理用户的逻辑地址空间,具有分段系统能很好地满足用户需要的长处

3.3.1基本原理

  1. 内存空间划分相同大小的若干个块,将用户程序按逻辑完整性分为若干个段,并为每个段赋予一个段名

  2. 再把每个段划分成若干个与块大小相同的页,将进程中的若干页离散装入不相邻接的块中

    如图:

    操作系统——存储管理_第12张图片

  3. 为了实现从逻辑地址到物理地址的变换,系统中必需同时配置段表和页表,由于将段中的页进行离散地分配,段表中的内容不再是段的内存始址和段长,而是页表始址和页表长度

    如图:

在这里插入图片描述

3.3.2地址变换过程

  • 在段页式系统中,有一个段表寄存器,存放段表始址段长TL
    • 在进行地址变换时,系统将逻辑地址截成段号S、段内页号P与页内地址W。
    • 先用段号S与段长TL进行比较:若 S≥TL,表示段号太大,访问越界,于是产生越界中断信号;若S<TL,表示未越界,于是利用段表始址和段号求出该段对应的段表项在段表中的位置,从中得到该段的页表始址。
    • 利用逻辑地址中的段内页号P来获得对应页的页表项在页表中位置,从中读出该页所在的物理块号b,再用块号 b和页内地址W拼成物理地址。
  • 在段页式系统中,为了获得一条指令或数据,需三次访问内存:
    • 第一次访问内存中的段表,从中取得页表始址;
    • 第二次访问内存中的页表,从中取出该页所在的物理块号,并将该块号与页内地址一起形成指令或数据的物理地址;
    • 第三次访问才是真正根据所得的物理地址取出指令或数据。显然,这使访问内存的次数增加了近两倍。
  • 为了提高执行的速度,在地址变换机构中增设一高速缓冲寄存器。每次访问它时,都同时利用段号和页号去检索高速缓存。

4.虚拟存储器管理技术

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

对此,虚拟存储技术通过在逻辑上扩充内存容量来解决这一问题。

4.1虚拟存储器的基本概念

4.1.1局部性原理

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

4.1.2虚拟存储器的定义

  • 仅将那些当前要运行的那部分页面或段,先装入内存便可启动运行,其余部分暂时留在磁盘上

  • 如果程序所要访问的页(段)尚未调入内存(称为缺页缺段),此时程序应利用操作系统所提供的请求调页(段)功能,将它们调入内存,以使进程能继续执行下去。

  • 如果此时内存已满,无法再装入新的页(段),则还须再利用页(段)的置换功能,将内存中暂时不用的页(段)调出至磁盘上

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

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

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

4.1.3虚拟存储器实现方式

  • 请求分页系统

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

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

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

4.1.4虚拟存储器的特征

  • 离散性:内存分配时采用离散的分配方式,它是虚拟存储器的最基本的特征

  • 多次性:一个作业被分成多次调入内存运行,即在作业运行时没有必要将其全部装入,多次性是虚拟存储器最重要的特征

  • 对换性:允许在作业的运行过程中在内存和外存的对换区之间换进、换出

  • 虚拟性:能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量。

4.2请求分页存储管理

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

4.2.1请求分页的硬件支持

为了能实现请求调页和置换功能,系统必须提供必要的硬件支持:扩充的页表机制缺页中断机制

4.2.1.1请求分页的页表机制

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

在这里插入图片描述

其中各字段说明如下:

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

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

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

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

4.2.2请求分页存储管理应考虑的问题

4.2.2.1最少物理块数的确定

物理块数目的下限:一条指令及其操作数可能涉及的页面数目的上限,以保证每条指令都能被执行。

4.2.2.2物理块的分配和置换策略
  • 在请求分页系统中,可采取两种分配策略:固定可变分配策略。

  • 在进行置换时,也可采取两种策略:全局置换局部置换。于是可组合成以下三种策略:

    1. 固定分配局部置换策略:基于进程的类型(交互型或批处理型等),或根据程序员、系统管理员的建议,为每个进程分配一固定页数的内存空间,在整个运行期间都不再改变。
    2. 可变分配全局置换策略:当某进程发现缺页时,由系统从空闲物理块队列中,取出一物理块分配给该进程,并将欲调入的缺页装入其中。当空闲物理块队列中的物理块用完时,OS才能从内存中选择一页调出,该页可能是系统中任一进程的页。
    3. 可变分配局部置换:为每个进程分配一定数目的内存空间,但当某进程发生缺页时,只允许从该进程在内存的页面中选出一页换出,而不影响其它进程的运行。
4.2.2.3物理块分配算法

在采用固定分配策略时,可采用以下几种物理块分配方法

  • 平均分配算法:将系统中所有可供分配的物理块,平均分配给各个进程。
  • 按比例分配算法:这是根据进程的大小按比例分配物理块。
  • 考虑优先权的分配算法:该方法是把内存中可供分配的所有物理块分成两部分:一部分按比例分配给各进程;另一部分则根据各进程的优先权,适当地增加其相应份额后,分配给各进程。
4.2.2.4调页策略
  1. 调入页面的时机

为了将进程运行时所缺的页面调入内存,可采取预调页策略请求调页策略两种方法。

  • 预调页策略:是一种主动的缺页调入策略,由于预测的准确率不高(50%),所以这种策略主要用于进程的首次调入
  • 请求调页策略:是指当进程在运行中发生缺页时,就立即提出请求,由系统将缺页调入内存。
  1. 从何处调入页面
    在虚拟存储系统中,外存(硬盘)常常被分成两部分:文件区(用于存放文件)和对换区(用于存放对换页面)。
    通常,对换区的磁盘I/O速度比文件区要高

对于每当进程发出缺页请求时,系统应从何处将缺页调入内存

  • 在UNIX系统中,对于从未运行过的页面,都应从硬盘文件区调入
  • 对于曾经运行过而又被换出的页面,可以从对换区调入
  • 对于共享页面,该页面可能已由其它进程调入内存,此时就无须再从对换区调入

4.2.3页面置换算法

  • 页面置换算法的性能指标:

    缺页率( page fault rate )=“缺页次数 / 内存访问次数” (比率) 或“缺页的平均时间间隔的倒数”。

4.2.3.1最佳置换(OPT)算法
  • 它是一种理想化的算法,性能最好,但在实际上难于实现。

例:假定系统为某进程分配了3个物理块,并考虑有以下的页面号引用串:
7,0,l,2,0,3,0,4,2,3,0,3,2,l,2,0,l,7,0,1。

操作系统——存储管理_第13张图片

其中在刚刚开始的前三个页面进入物理块,因为此时物理块为空所以没有发生页面置换。

4.2.3.2先进先出(FIFO)置换算法

定义:FIFO算法认为 最先进入内存的页面,其不再使用的可能性比最近调入的页面要大。所以该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。

  • 它是一种最直观的算法,但它性能最差,有Belady异常现象

4.2.3.3最近最久未使用置换(LRU)算法
  • 该算法是选择最近最久未使用的页面予以淘汰,这是局部性原理的合理近似,性能接近最佳算法。

硬件机构:

  • 一个特殊的:把被访问的页面移到栈顶,于是栈底的是最久未使用页面。
  • 每个页面设立移位寄存器:被访问时左边最高位置1,定期右移并且最高位补0,于是寄存器数值最小的是最久未使用页面。
4.2.3.4最少使用置换(LFU)算法

该算法选择使用次数最少的页面淘汰。

4.2.4性能分析

4.2.4.1缺页率对有效访问时间的影响

在请求分页系统中,假设:

存储器的访问时间Tr:100ns
缺页率p:0.1%
缺页中断时间Tt:20ms;
当页号在内存页表查到时存取内存一个数据时间:T1=Tr+Tr =2*Tr,
而页面失效时存取内存一个数据时间:T2=Tr+Tt+Tr+Tr ≈ Tt 。
则有效访问时间就可以表示为:有效访问时间(μs) =(1一p)×T1十p×T2

由此可见:有效访问时间与缺页率成正比

4.2.4.2工作集

所谓工作集是指,在某段时间间隔(Δ)里,进程实际要访问的页面的集合。

  • 缺页率随着所分得的物理块数目的减少而递增,并在所分到的物理块数目较少处,出现一个拐点。

    • 拐点下限以左时随着分到的物理块数目的增加,缺页率明显地减少
    • 过了拐点,在下限以右时,随着分到的物理块数目的增加,却对缺页率的改善并不明显

    所以,为进程分配的物理块数,应取在该曲线的拐点左右。

操作系统——存储管理_第14张图片

4.3请求分段存储管理

请求分段系统在分段系统的基础上实现的虚拟存储器,是以分段为单位进行换入、换出的,同样需要一定的硬件支持和相应的软件,有段表机制缺段中断机构以及地址变换机构

4.3.1段表机制

在请求分段式管理中在段表中增加若干项,以供程序在调进、调出时参考。

操作系统——存储管理_第15张图片

  • 存取方式:用于标识本分段的存取属性是只执行、只读,还是允许读/写
  • 访问字段A:用于记录该段被访问的频繁程度。
  • 修改位M:用于表示该段进入内存后,是否已被修改过。
  • 存在位P:说明本段是否已调入内存。
  • 增补位:用于表示本段在运行过程中,是否进行过动态增长。
  • 外存起址:指示本段在外存中的起始地址,即起始盘块号。

4.3.2缺段中断机构

在请求分段系统中,采用的是请求调段策略。

缺段中断的处理过程如下图:

操作系统——存储管理_第16张图片

类同缺页中断机构,当进程所要访问的段未调入内存时,便由缺段中断机构在硬件指令中间产生一缺段中断信号,由缺段中断处理程序将所需的段调入内存。与缺页中断机构不同的是由于各段长不同,置换时对内存的管理采用可变分区管理

4.3.3分段的共享

在请求分段存储管理中为了实现分段共享,减少共享段的调进调出次数,应增加配置共享段表,用来对共享段进行管理

在系统中,用共享段表来记录每一个共享段的段号和段长、内存始址、存在位等信息,并记录共享此分段的每个进程的情况。

操作系统——存储管理_第17张图片

  • 共享进程计数器COUNT:记录有多少个进程需要共享该分段。
  • 存取控制字段:说明不同的进程对该分段不同的存取权限。
  • 段号:对于同一个共享段,不同的进程可以使用不同的段号去共享该段。

4.3.4存储保护

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

4.3.4.1越界检查

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

操作系统——存储管理_第18张图片

4.3.4.2存取控制检查

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

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

end…

你可能感兴趣的:(操作系统,系统架构)