来源:https://www.bilibili.com/video/BV1YE411D7nH
在操作系统中解决"程序大小超过物理内存总和"的几种技术
一、覆盖技术
基本思想:将一个程序分为多段,对于常用的段应当常驻内存,不常用的段在需要的时候进入内存
采用这种技术的时候,内存中被划分为:一个固定区 + N个覆盖区。常驻内存的段进入固定区(进入之后只有在程序结束时调出);不常用的段进入覆盖区(需要的时候进入,不需要的时候调出)。
**注意:**覆盖技术应用于一个进程中
二、交换技术
基本思想:在内存空间不足的时候,将内存中某些作业暂时放置到外存(存放在磁盘上面的对换区,这个区的IO效率高于磁盘上的文件区),将外存中需要进入内存中的作业调入内存。(在内存和磁盘间频繁调度)
注意:
-
进程被放置在外存的时候,进程的PCB会留在内存(不然追踪不到当前作业了)
-
交换技术应用于多个进程中
三、虚拟存储技术
传统存储管理方式的缺点
传统存储方式包括连续分配和非连续分配方式,连续分配方式包括:单一连续分配、固定分区分配、动态分区分配三种方式,而非连续分配包括:页式存储、段式存储、段页式存储三种方式。
传统存储方式要求一次性将作业加载进内存。这会导致两个问题:
- 当作业很大时,无法全部装入内存,导致不能运行(一个作业的角度)
- 大作业要求运行时,如果内存无法容纳所有作业,那么就只有少量作业能够运行,导致多道程序并发度下降 (多个作业的角度)
- 一个作业放入内存中,会全部驻留在内存中,但是实际上,可能在一个时间段只需要一部分的数据就可以正常运行了,这会导致内存在某个时间段被大量无用的数据占用。
总结:传统存储管理方式具有一次性、驻留性的缺点
高速缓存技术
思想:将近期会频繁访问的数据放到更高速的存储器中,暂时用不到的数据放到更低速的存储器中。
虚拟内存的定义和特征
虚拟内存的定义
基于局部性原则,在程序装入的时候,可以将程序中很快就会使用到的部分装入内存,暂时用不到的留在外存,就可以让程序开始运行。
在程序执行的时候,当所访问的信息不在内存的时候,由操作系统负责将所需要的信息由外存调入内存,然后继续执行程序。
若内存空间不足了,就由操作系统负责将内存中暂时用不到的信息换出到外存
在操作系统的管理下,在用户看来似乎有一个比实际内存大得多的内存,这就是虚拟内存
虚拟内存的特征
- 多次性:一个作业可以被分成多次载入内存
- 对换性:允许在一个作业运行过程中,将作业换入、换出
- 虚拟性:在逻辑上扩充了内存
虚拟内存技术的实现
虚拟内存技术的实现建立在==离散分配==的存储管理方式之上。传统的离散分配方式(非连续分配)包括:基本分页存储管理、基本分段存储管理、基本段页存储管理。在这三种方式上应用了虚拟技术后,分别形成了:请求分页存储管理、请求分段存储管理、请求段页式存储管理。
上面两大类存储管理的主要区别在于:
1、虚拟内存技术在程序执行过程中,当访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序(请求调页、请求调段功能);
2、在内存空间不够时,操作系统会将内存中暂时用不到的信息换出到外存(页面置换、段置换功能)
如何实现基于虚拟内存技术的页表机制呢?
要实现该机制,那么要考虑两点:①在请求分页存储管理中,要实现"请求调页",操作系统需要知道每个页面是否调入内存;如果没有调入,那么还应知道该页面在外存中存储的地址。②当内存空间不足时,要实现"页面置换"功能,操作系统会根据一些指标决定到底选择哪些页面进行置换;同时对于置换出去的页面检查是否被修改过,如果没有被修改,则不用再次写入外存;如果被修改过,那么就要重新写入外存。因此,操作系统还需要记录每个页面是否被修改过的信息。
于此。请求分页存储管理的页表结构如下:
什么是缺页中断机构?
假设此时要访问的逻辑地址 = (页号, 页内偏移量) = (0, 1024)
在请求分页系统中,每当要访问的页面不在内存时,便会产生一个缺页中断,然后由操作系统的缺页中 断处理程序处理该中断,这时候有两种情况:
情况一:如果内存中有空闲块,则为进程分配一个空闲块,将所缺页面装入该块,并修改页表中对应的页表项(还需要将页表项写入到快表),如下图所示:
情况二:如果内存中没有空闲块,那么会根据一定的算法(如LRU)淘汰一个页面,对应该淘汰的页面,会检查其是否被修改,若修改了,则还需要写回外存,若没修改,则什么也不做。最后将该页装入内存块 中,同时还需要更新当前页表,(还需要将页表项写入到快表)。
寻址过程: