当前位置:   article > 正文

操作系统——7.虚拟存储技术_虚拟存储技术是扩充什么的技术

虚拟存储技术是扩充什么的技术

JAVA后端开发知识总结(持续更新…)


虚拟内存与虚拟存储技术


参考文档

B站:《王道考研 操作系统》
《现代操作系统》

《虚拟内存的那点事儿》



一、虚拟内存基本概念

  虚拟存储技术内存空间扩充的相关技术,在传统存储管理方式的基础上,结合内存扩充技术从逻辑上扩充内存容量。

  • 传统存储管理方式的缺点

  一次性:作业必须一次性全部装入内存后才能开始运行,造成两个问题:①作业很大时,不能全部装入内存;②当大量作业要求运行时,无法容纳所有作业,只有少量作业能运行,导致多道程序并发度下降。

  驻留性:一旦作业被装入内存,就会一直驻留在内存中,直至作业运行结束。但在一个时间段内,只需要访问作业的一小部分数据即可正常运行,这就导致了内存中会驻留大量的、暂时用不到的数据,浪费了宝贵的内存资源。

  上述问题可以通过虚拟存储技术解决,可以只装入部分程序到内存就开始运行,虚拟存储技术是基于局部性原理的:

  • 局部性原理

  时间局部性 :如果执行了程序中的某条指令,那么不久后这条指令很有可能再次执行;如果某个数据被访问过,不久之后该数据很可能再次被访问。(因为程序中存在大量的循环)

  空间局部性 :一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问(因为很多数据在内存中都是连续存放的,并且程序的指令也是顺序地在内存中存放的)。

  • 应用局部性原理

  高速缓冲技术:时间局部性是通过将近期会频繁访问到的指令和数据放到更高速的缓存存储器中,暂时用不到的数据放在更低速存储器中。空间局部性通常是使用较大的高速缓存,并将预取机制集成到高速缓存控制逻辑中实现。
  虚拟内存技术实际上就是建立了“内存一外存”的两级存储器的结构,利用局部性原理实现髙速缓存。

  • 虚拟内存

  基于局部性原理,在程序装入时,可以将程序中很快会用到的部分装入内存,暂时用不到的部分留在外存,然后就可以让程序开始执行。
  在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。
  若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存。在操作系统的管理下,在用户看来似乎有一个比实际内存大得多的内存,这就是虚拟内存
  虚拟内存的重要意义是它定义了一个连续的虚拟地址空间,把内存扩展到硬盘空间是使用虚拟内存的必然结果。实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。
  虚拟内存为每个进程提供了一个一致的、私有的地址空间,它让每个进程产生了一种自己在独享主存的错觉(每个进程拥有一片连续完整的内存空间)。

  虚拟内存的实现需要建立在离散分配的内存管理方式的基础上,与传统离散内存管理技术的区别是新增了两大功能:

  1. 操作系统提供请求调页(或请求调段)功能:当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。
  2. 操作系统提供页面置换(或分段置换)的功能:若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存。

二、请求分页管理方式

  请求分页存储管理与基本分页存储管理的主要区别在于新增了请求调页页面置换功能,根本区别在于是否将程序所需的全部地址空间都装入内存。请求分页是目前最常用的一种实现虚拟存储器的方法。请求分页存储管理系统中,在作业开始运行之前,仅装入当前要执行的部分页即可运行。

2.1 请求页表机制

在这里插入图片描述

2.2 缺页中断机构

  缺页中断是因为当前执行的指令想要访问的目标页面未调入内存而产生的,因此属于内中断。一条指令在执行期间,可能产生多次缺页中断。

基本流程

  1. 在请求分页系统中,每当要访问的页面不在内存时,便产生一个缺页中断,然后由操作系统的缺页中断处理程序处理中断。
  2. 此时缺页的进程阻塞,放入阻塞队列,调页完成后再将其唤醒,放回就绪队列。
  3. 如果内存中有空闲块,则为进程分配一个空闲块,将所缺页面装入该块,并修改快表和页表中相应的页表项
  4. 如果内存中没有空闲块,则由页面置换算法选择一个页面淘汰,若该页面在内存期间被修改过,则要将其写回外存,未修改过的页面不用写回外存。

相应的地址变换机构

在这里插入图片描述

2.3 页面置换算法

  • 最佳置换算法(OPT)

  每次选择淘汰的页面将是以后永不使用,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率。但是,最佳置换算法是无法实现的。

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

  每次选择淘汰的页面是最早进入内存的页面。把调入内存的页面根据调入的先后顺序排成一个队列,需要换出页面时选择队头页面即可。

  • 最近最久未使用置换算法(LRU)

  每次淘汰的页面是最近最久未使用的页面。赋予每个页面对应的页表项中,用访问字段记录该页面自上次被访问以来所经历的时间t。当需要淘汰一个页面时,选择现有页面中 t 值最大的,即最近最久未使用的页面。

  最佳置换算法性能最好,但无法实现;先进先出置换算法实现简单,但算法性能差;最近最久未使用置换算法性能好,是最接近OPT算法性能的,但是实现起来需要专门的硬件支持,算法开销大。

  时钟置换算法是一种性能和开销较均衡的算法,又称CLOCK算法,或最近未用算法(LFU)。

  • 时钟置换算法(CLOCK)

  为每个页面设置一个访问位和修改位,再将内存中的页面都通过链接指针链接成循环队列
  访问位为1,表示最近访问过,访问位为0,表示最近没访问过。
  在其它条件都相同时,应优先淘汰没有修改过的页面,避免I/O操作。修改位=0,表示页面没有被修改过,修改位=1,表示页面被修改过。改进型CLOCK置换算法选择一个淘汰页面最多会进行四轮扫描

对比

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/163502
推荐阅读
相关标签
  

闽ICP备14008679号