操作系统-- 虚存技术

一、虚存技术的起因

理想中的存储器:更大、更快、更便宜的非易失性存储
但这个是目前达到不了的,我们只能采用多级存储机制,达到一个大、快、便宜的一个感觉:
在这里插入图片描述寄存器、缓存、主存这都是比较快的,但价格较高,所以不可能很大。我们的外存硬盘很大,但是又很慢。我们的虚存技术,就是将这两个的特点有机的结合在一起,实现给人的感觉大、快、便宜。

在这里插入图片描述以设计了三种技术:
1)手动覆盖技术:只把指令和数据保存在内存中
2)自动交换技术:将程序导出内存到硬盘上,程序大小为粒度
3)虚拟内存技术(前两种是虚拟内存还没出现的情况下诞生的):以更小的粒度把数据在内存和硬盘间换入换出。是前两种方法的合体版。

二、覆盖技术

1、了解覆盖技术

目标:是在较小的可用内存中运行较大的(相对而言)的程序。因为覆盖技术需要分区所以需要和分区存储管理配合使用

原理:把程序按照其自身的逻辑结构,划分为若干个功能上相对独立的程序模块,那些不会同时执行的模块共享同一块内存区域,按时间先后来运行。

  • 必要部分(常用功能)的代码和数据常驻内存;
  • 可选部分(不常用内存)在其他程序模块中实现,平时存放在外存中,在需要用到时才装入内存;
  • 不存在调用关系的模块不必同时装入到内存,从而可以相互覆盖,既这些模块共有一个分区。

2、实战演练

在这里插入图片描述我们先看下调用关系:
A可以分别(注意不是同时)调用B、C,B调用D,C可以分别调用E、F。
不存在调用关系可以放到一个覆盖区里。
下面还有一种更好的方案:
A不变(20K),BEF在覆盖区0(50K),CD在覆盖区1(30K)。这样也是可以,需要的内存更小

缺点:
由程序员来把一个大的程序划分为若干个小功能模块,并确定各个模块之间的覆盖技术,费时费力,增加了编程的复杂度。

三、交换技术

1、交换技术的基础

目标:多道程序在内存中时,让正在运行的程序或需要运行的程序获得更多的内存资源。
方法:
1)可将暂时不能运行的程序送到外存,从而获得空闲内存空间
2)操作系统把一个进程的整个地址空间的内容保存到外存中(换出swap out),而将外存中的某个进程的地址空间读入到内存中(换入swap in)。换入换出内容的大小为整个程序的地址空间。

2、交换技术实现的几个问题

1)交换时机的确定:何时发生交换?只当内存空间不够或有不够危险的时候才换出。
2)交换区的大小:必须足够大以存放所以用户进程的所有内存映射的拷贝;必须能对这些内存映像进行直接存取。
3)程序换入时的重定位:换出后再换入的内存位置一定要在原来的位置上吗,寻址可能会出现问题?最好采用动态地址映射的方法,建好页表就行。

3、交换技术的缺点

以一个程序的大小为单位进行换入换出,开销太大!

四、小结–覆盖与交换的比较

  • 覆盖只能发生在那些相互之间没有调用关系的程序模块之间,因此程序员必须给出程序内的各个模块之间的逻辑覆盖结构。
  • 交换技术是以内存中的程序大小为单位来进行的,它不需要程序员给出各个模块之间的逻辑覆盖结构。换言之,交换发生在内存中程序与管理程序或操作系统之间,而覆盖则发生在运行程序内部。

五、虚存技术

针对覆盖技术和交换技术的缺点,和特点,发明了虚存技术
目标:
1)像覆盖技术那样,不是把程序的所有内容都放在内存中,因而能够运行比当前的空闲内存空间还要大的程序。但做得更好,由操作系统自动来完成,无须程序员的干涉;
2)像交换技术那样,能够实现进程在内存与外存之间的交换,因而获得更多的空闲内存空间。但做得更好,只对进程的部分内容在内存和外存之间进行交换。
在这里插入图片描述
如图所示:程序只有少部分在内存中,而大部分都是在外存中存储。

1、程序的局部性原理

定义:程序的局部性原理(principle of locality),指程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址,分别局限于一定的区域,这个可以表现为:

  • 时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下一次访问都集中在一个较短时期内。
  • 空间局部性:当前指令和邻近的几条指令,当前访问的数据和邻近的几个数据都集中在一个较小区域内。

程序的局部性原理表明,从理论上说,虚拟存储技术是能够实现的,而且在实现了以后应该是能够取得一个满意的效果。访问的速度更快,并且可以提供一个很多的空间。

2、虚拟技术的大致流程

前提:操作系统有了硬件支持分段/分页机制,在此内存管理基础之上来实现一个以页或者是段为单位的虚存管理。
过程:
1)在装入程序的时候,不必将所有的程序和数据装入内存中去,而只需将当前需要执行的部分的代码数据放在相关的段或者是页中,这样可以是的一小部分的代码放在内存中去了。
2)在程序执行过程中,如果需要执行的指令或访问的数据尚未在内存中(称为缺页或缺段),则由处理器通知操作系统将相应的页面或段调入到内存,然后继续执行程序。
3)另一方面。操作系统将内存中暂时不使用的页面或段调出保存在外存上,从而腾出更多空闲空间存放将要装入的程序以及将要调入的页面或段。

3、虚拟内存的基本特征

1)较大的用户空间:
通过把物理内存与外存结合,提供给用户的虚拟内存空间通常大于实际的物理内存,既实现了这两者的分离。如32位的虚拟地址理论上可以访问4GB,而可能计算机上仅有256M的物理内存,但硬盘的容量大于4GB
2)部分交换:
与交换技术相比较,虚拟存储的调入和调出是对部分虚拟地址空间进行的,其每次的换入换出是非常规整的,要么是段或者是页。不需要将整个程序交换出去。力度更小,但是效率更高。
3)不连续性:
物理内存分配不连续,虚拟地址空间使用也是不连续的。本来所有的数据都是连续的放在虚拟内存中的,但是操作系统要把某些数据换出去,而造成的不连续。操作系统会弥补好,正常的访问。

4、虚拟内存技术的具体实现

具体实现:虚拟页式内存管理。
虚拟页式内存管理,即在页式内存管理的基础上增加了请求调页页面置换的功能。
请求调页:产生缺页中断,向操作系统请求从硬盘调页
页面置换:应用页面置换算法,决定把那个页从内存放到硬盘

5、页表表项解析

在这里插入图片描述

  • 驻留位:表示该页是在内存还是外存。如果该位等于1,表示该页位于内存当中,既该页表项是有效的,可以使用;如果改为为0,表示该页当前还在外存当中,如果访问该页表项,将导致缺页中断。
  • 保护位:表示允许对该页做何种类型的访问,如只读,可读写,可执行等。
  • 修改位:表面此页面在内存中是否被修改过,当系统回收该物理页面时,根据此位来决定是否把他的内容写回外存。位为0就表示数据一样的,不需要写回外存中。
  • 访问位:如果该页面被访问过(包括读操作或写操作),则设定词尾,用于页面的置换算法。
发布了200 篇原创文章 · 获赞 151 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_44571270/article/details/105703351