覆盖技术
早期计算机内存很小,因此经常出现内存大小不够使用的情况,因此人们引入了覆盖技术,用来解决“程序大小超过物理内存总和”的问题
覆盖技术的思想在于,将程序分为多个段(多个执行模块),常用的模块常驻在内存中,不常用的模块在需要时调入,使用后调出。实现这种功能还需要将内存划分为固定区和若干个覆盖区
需要常驻在内存的模块进入固定区后就不再调出,直到整个程序运行结束,不常用的模块在需要时调入覆盖区,用不到时调出
以上图为例,A模块作为需要常驻的模块,在程序开始运行后就进入常驻区,直到程序运行结束。B,C模块只能由A调用,并且不可能同时调用,所以B,C共用一个覆盖区,覆盖区大小由最大模块决定,而D模块只能由B模块调用,E,F模块只能由C模块调用,显而易见,DEF三个模块同一时间只可能有一个运行,所以DEF可以共用一个覆盖区,同时由最大的程序D决定覆盖区大小
这种覆盖技术的缺点在于:必须由程序员声明覆盖结构,操作系统完成自动覆盖。对用户不透明,增加了用户编程负担。覆盖技术只用于早期的操作系统中,现在已成为历史。
交换技术
交换(对换)技术的设计思想:内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)
之前所讲过的中级调度(内存调度),就是要决定哪个处于挂起状态的进程重新调入内存
可以看到,在将进程存入外存的过程中,内存保留了这些进程的PCB,并将他们添加到挂起队列中,这是因为PCB中保存了这些进程的运行情况以及在外存中的位置信息,必须保留它们才能重新将这些挂起进程调回内存中
回忆部分: 暂时换出外存等待的进程状态称为挂起状态(挂起态,suspend)挂起态又可以进一步细分为就绪挂起、阻塞挂起两种状态
进程的状态,控制与通信
交换技术需要考虑的问题
- 应该在外存(磁盘)的什么位置保存被换出的进程?
- 具有对换功能的操作系统中,通常把磁盘空间分为文件区和对换区两部分。文件区主要用于存放文件,主要追求存储空间的利用率,因此对文件区空间的管理采用离散分配方式。对换区空间只占磁盘空间的小部分,被换出的进程数据就存放在对换区。由于对换的速度直接影响到系统的整体速度,因此对换区空间的管理主要追求换入换出速度,因此通常对换区采用连续分配方式。总之,对换区的I/O速度比文件区的更快。
- 什么时候应该交换?
- 交换通常在许多进程运行且内存吃紧时进行,而系统负荷降低就暂停。例如:在发现许多进程运行时经常发生缺页,就说明内存紧张,此时可以换出一些进程;如果缺页率明显下降,就可以暂停换出。
- 应该换出哪些进程?
- 可优先换出阻塞进程;可换出优先级低的进程;为了防止优先级低的进程在被调入内存后很快又被换出,有的系统还会考虑进程在内存的驻留时间…
需要注意的一点就是整个过程中,进程的PCB始终还是存放在内存队列中的,不会被换出到外存中