操作系统(五)-虚拟存储器

1. 虚拟存储器概述

  1. 传统存储管理方式的特征
  • 一次性。作业必须一次装入内存后才能运行;
  • 驻留性。作业被装入内存后,就一直驻留在内存中,其任何部分都不会被换出。
  1. 局部性原理
  • 时间局部性。某数据被访问过,不久后该数据可能再次被访问;
  • 空间局部性。一旦程序访问了某个存储单元,在不久后,其附近的存储单元也将被访问。
  1. 虚拟存储器
  • 在程序装入时,将程序的一部分装入内存,而将其余的部分留在外存,就可以启动程序执行。
  • 在程序执行的过程中,当所访问的信息不再内存时,由操作系统将所需要的部分调入内存,然后继续执行程序;操作系统将内存中暂时不使用的内容换出到外存上
  • 系统好像为用户提供了一个比实际内存大得多的存储器,即称为虚拟存储器。
  • 虚拟内存的容量在逻辑上等于内存+外存的大小,但实际上,其容量受到地址结构的限制。如一个32位地址结构虚拟内存容量为2^32。
  • 虚拟存储器有以下三个特征:
    ①多次性。作业可分多次调入内存运行;
    ②对换性。允许在作业运行的过程中进行换入和换出(与传统段页式管理方式最大的区别);
    ③虚拟性。用户看到的内存容量远大于实际容量。
  1. 虚拟内存技术的实现
    需要一定的硬件支持,主要包括:
  • 内存和外存。
  • 页表机制(或段表机制)。
  • 中断机构。用户程序访问的部分尚未调入内存时产生中断。
  • 地址变换机构。逻辑地址到物理地址的转换。

2. 请求分页存储管理方式

  1. 页表机制在这里插入图片描述
  • 状态位P:记录该页是否已经调入内存;
  • 访问字段A:记录本页在一段时间内被访问的次数或多长时间未被访问,供置换算法换出页面时参考;
  • 修改位M:标识该页调入内存后是否被修改过;
  • 外存地址:记录该页在外存上的地址。
  1. 缺页中断机构
    当要访问的页面不在内存中,便产生一个缺页中断,请求操作系统将所缺的页调入内存。若内存中有空闲块则直接分配,若内存中无空闲块则要按照一定的规则淘汰某页
  2. 地址变换机构
    在这里插入图片描述

3. 页面置换算法

  1. 最佳(OPT)置换算法
  • 淘汰选择:以后永不使用的页面,或在最长时间内不被访问的页面;
  • 由于现在没有能够预知以后不被访问页面的技术,所以该算法无法实现。
  1. 先进先出(FIFO)置换算法
  • 淘汰选择:最早进入内存的页面,即在内存中驻留最久的页面
  • FIFO算法会产生所分配的物理块数增大而缺页中断次数不减反增的异常,称为Belady异常只有FIFO算法会出现Belady异常。
  1. 最近最久未使用(LRU)置换算法
  • 淘汰选择:最近最长时间未访问过的页面。
  1. 时钟(CLOCK)置换算法
  • 淘汰选择:某页首次装入内存时,使用位置1;该页随后被访问到时,使用位也置1;需要替换一页时,指针查找使用位被置为0的页帧进行替换;指针每当遇到一个使用位为1的页帧时,将其置0
  • 又称最近未用(NRU)算法
  1. 改进CLOCK算法
  • 在使用位的基础上增加修改位;
  • 页帧处于以下四种情况:
    ①最近未被访问,也未被修改(u=0,m=0)
    ②最近被访问,但未被修改(u=1,m=0)
    ③最近未被访问,但被修改(u=0,m=1)
    ④最近被访问,也被修改(u=1,m=1)
  • 淘汰选择:
    ①从指针所指示的当前位置开始,扫描循环队列,寻找 A=0 且 M=0 的第一类页面,将所遇到的第一个页面作为所选中的淘汰页。在第一次扫描期间不改变访问位 A。
    ②如果第一步失败,即查找一周后未遇到第一类页面,则开始第二轮扫描,寻找 A=0 且 M=1 的第二类页面,将所遇到的第一个这类页面作为淘汰页。在第二轮扫描期间,将所有扫描过的页面的访问位都置 0。
    ③如果第二步也失败,亦即未找到第二类页面,则将指针返回到开始的位置,并已将所有的访问位复 0。然后重复第一步,如果仍失败,必要时再重复第二步,此时就一定能找到被淘汰的页。
  • 该算法与简单 Clock 算法比较,可减少磁盘的 I/O 操作次数。但为了找到一个可置换的页,可能须经过几轮扫描,实现该算法本身的开销将有所增加。

4. 页面分配策略

  1. 驻留集大小
    给一个进程分配的物理页框的集合就是这个进程的驻留集。
    内存分配策略。
  2. 页面分配和置换策略
  • 固定分配局部置换
    ①策略:为每个进程分配一定数目的物理块,在整个运行期间都不再改变。发现缺页时只从分配给该进程的 n 个页面中选出一个页进行对换。
    ②弊端:为每个进程分配多少个物理块难以确定。
  • 可变分配全局置换
    ①策略:先为系统中的每个进程分配一定数目的物理块,操作系统自身也保持一个空闲物理块队列,当某进程发生缺页时,取出一块分配给该进程。
    ②弊端:盲目给进程增加物理块导致系统多道程序并发能力下降。
  • 可变分配局部置换
    ①策略:为每个进程分配一定数目的物理块,但当某进程发现缺页时,只允许从该进程在内存的页面中选出一页换出,这样就不会影响其它进程的运行。如果进程在运行中频繁地发生缺页中断,则系统须再为该进程分配若干附加的物理块,直至该进程的缺页率减少到适当程度为止;反之,若一个进程在运行过程中的缺页率特别低,则此时可适当减少分配给该进程的物理块数,但不应引起其缺页率的明显增加。
    ②弊端:需要更大的开销更复杂的实现。
  1. 物理块分配算法。
    在采用固定分配策略时,如何分配物理块采用以下算法:
  • 平均分配算法。
  • 按比例分配算法。
    即根据进程的大小按比例分配物理块的算法。
  • 考虑优先权的分配算法。
  1. 页面调入策略
  • 调入页面的时机
    ①预调页策略。(运行前调入)
    一次调入若干个相邻的页,可用于进程的首次调入时或采用工作集的系统。
    ②请求调页策略。(运行中调入)
    进程在运行中提出缺页请求时调入。

  • 从何处调入页面。
    ①系统拥有足够的对换区空间,这时可以全部从对换区调入所需页面,以提高调页速度。
    ②系统缺少足够的对换区空间,这时凡是不会被修改的文件都直接从文件区调入;但对于那些可能被修改的部分,在将它们换出时,便须调到对换区,以后需要时,再从对换区调入。
    ③UNIX 方式。凡是未运行过的页面,都应从文件区调入。而对于曾经运行过但又被换出的页面,由于是被放在对换区,因此在下次调入时,应从对换区调入。

  1. 缺页率。
  • 进程的运行过程中,访问页面成功(在内存中)的次数为S,访问页面失败(不在内存中)的次数为F,总的页面访问次数为A = S + F,缺页率为 f=F/A
  • 缺页率受以下因素的影响:
    ①页面大小。
    ②进程所分配物理块的数目。
    ③页面置换算法。缺页率是衡量页面置换算法的重要指标。
    ④程序固有特性。
    事实上选择被置换页面还需要考虑置换的代价,如页面是否被修改过。

5. 抖动

  1. 抖动:刚刚换出的页面马上又要换入主存,刚刚换入的页面马上又要换出主存,这种频繁的页面调度行为成为抖动。
  2. 抖动产生的主要原因:同时在系统中运行的进程太多,由此分配配给每一个进程的物理块太少,不能满足进程正常运行的基本要求,致使每个进程在运行时,频繁地出现缺页,必须请求系统将所缺之页调入内存。
  3. 抖动解决方法:
  • 采取局部置换策略。
    把该进程“抖动”所造成的影响限制在较小的范围内。
  • 把工作集算法融入到处理机调度中
    在从外存调入作业之前,必须检查每个进程在内存的驻留页面是否足够多。
  • 利用“L=S”准则调节缺页率。
    L:缺页之间的平均时间,S:平均缺页服务时间(置换一个页面所需时间)。
    ①L>>S,说明很少发生缺页,磁盘的能力尚未得到充分的利用;
    ②L<<S,则说明频繁发生缺页,缺页的速度已超过磁盘的处理能力。
    ③L≈S,磁盘和处理机都可达到它们的最大利用率。
  • 选择暂停进程。
    基于某种原则选择暂停某些进程。将它们调出到磁盘上,以便腾出内存空间分配给缺页率发生偏高的进程。

6. 地址翻译

虚实地址的变换过程,结合Cache
王道《2020操作系统》P191

猜你喜欢

转载自blog.csdn.net/qq_43681073/article/details/111446077