操作系统-虚拟存储

为什么要虚拟存储

我们直到,内存虽然快但是容量小,且价格高。所以我们出于理想化,就会对内存产生更高的需求,比如我们希望有一种容量更大,速度更快,价格更偏移的非易失性的存储器。

实际中的存储器的层次结构:
这里写图片描述

覆盖和交换

覆盖技术:在较小的可用内存中允许较大的进程。
方法:依据程序逻辑结构,将程序划分为若干功能相对独立的模块,将不会同时执行的模块共享同一块内存区域。
也就是说,将常用的部分装入内存中,使它们常驻内存,将不常用的部分放在其他模块中,待需要时在装入内存中。
不存在调用关系的模块可相互覆盖,公用同一块内存区域。

举例说明:
第一次,A可以被装入第一个分区。 B和D分别被装入第二,三个覆盖区。然后B和D换出去,将C和E换进来,最后将F交换进来。总共占用110k。
可能会有不同的调用方法。会造成更少的内存。
这里写图片描述

交换技术:增加正在允许或需要运行的程序的内存。
实现:可将暂时不能运行的程序放到外存。
换入换出的基本单位:整个进程的程序地址单位
换出:把一个进程的整个地址空间保存到外存。
换入:将外存中某进程的地址空间读入到内存。
交换时机:只当内存空间不够或有不够的可能时换出。
交换区大小:存放所有用户进程的所有内存映像的
程序换入时的重定位:采用动态地址映射的方法。

覆盖于交换的比较:
覆盖:
- 只能发生在没有调用关系的模块间
- 程序员须给出模块间的逻辑覆盖结构
- 发生在运行程序的内部模块间。

交换:
- 以进程为单位
- 不需要模块间的逻辑覆盖结构
- 发生在内存进程间

局部性原理

只把部分程序放到内存中,从而运行比物理内存大的程序。
由操作系统自动完成,无需程序员的干涉。
实现进程在内存与外存之间的交换,从而获得更多的空闲内存分空间。
局部性原理:
程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址,分别局限于一定区域。

  • 时间局部性
    -一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短时期内。
  • 空间局部性
    -当前指令和邻近的几条指令,当前访问的数据和邻近的几个数据都集中在以恶搞较小区域内。
  • 分支局部性
    -一条跳转指令的两次执行,很可能调到相同的内存位置。

意义:如果能对局部性进行推测,就可以将那些最常用的部分放入内存,从而加快速度。说明了虚拟存储的可行性。

虚拟存储

思路:将那些不常用的内存块放入外存中。
原理:加载时,只将当前指令执行需要的部分页面加载 至内存。
但是,在某些指令执行时,需要的指令或数据不在数据中,就会产生中断,称为缺页中断。那么处理器就会通知操作系统,将相应的页或段调入内存。为了提高效率,就将内存中暂时不用的页面或段保存到外存。

虚拟存储的基本特征

扫描二维码关注公众号,回复: 864071 查看本文章
  • 不连续:物理内存分配不连续;虚拟地址空间不连续。
  • 大用户空间:提供给用户的虚拟内存可大于实际的物理内存。
  • 部分交换:虚拟存储只对部分虚拟地址空间进行调入和调出。

虚拟存储主要依赖于两方面技术的支持,首先,硬件的支持,需要页式或段式的地址转换机制。其次是,操作系统的支持,需要管理何时调入调出页面或段。

虚拟页式存储

在页式存储管理的基础上,增加请求页面置换算法。
思路:当用户程序需要装载内存运行时,只装入部分页面,然后启动程序运行。
进程在运行中发现有需要的代码或数据不在内存中,则像操作系统发出缺页异常请求。
操作系统接受到该缺页异常请求,将外存中相应的页面导入内存。
这里写图片描述

缺页异常

缺页中断的处理流程:
这里写图片描述

虚拟页式存储管理的性能:
有效存储访问时间:EAT=访存时间*(1-p)+缺页异常处理时间+缺页率p

猜你喜欢

转载自blog.csdn.net/mxrrr_sunshine/article/details/80142997
今日推荐