覆盖与交换技术是多道程序环境下用来扩充内存的两种方法
覆盖
早期的计算机系统中,主存容量很小,虽然主存中仅存放一道用户程序,但存储空间放不下用户进程的现象也经常发生,这一矛盾可以用覆盖技术来解决
覆盖技术的思想如下:由于程序运行时并非任何时候都要访问程序及数据的各个部分(尤其是大程序),因此可把用户空间分成一个固定去和若干覆盖区。将经常活跃的部分放在固定区,其余部分按调用关系分段。首先将那些即将要访问的段放入覆盖区其他段放在外存中,在需要调用前,系统再将其调入覆盖区,替换覆盖区中原有的段
覆盖技术的特点是,打破了必须将一个进程的全部信息装入主存后才能运行的限制,但当同时运行程序的代码量大于主存时仍然不能运行,此外,内存中能够更新的地方只有覆盖区的段,不在覆盖区中的段会常驻内存。覆盖技术对用户和程序员不透明
交换
交换(对换)的基本思想是,把处于等待状态(或在CPU调度原则下被剥夺运行权利)的程序从内存移到辅存,把内存空间腾出来,这一过程又称换出;把准备好竞争CPU运行的程序从辅存移到内存,这一过程又称为换入。中级调度采用的就是交换技术
有关交换,需要注意以下几个问题:
1:交换需要备份存储,通常是磁盘,它必须足够大,并提供对这些内存映像
的直接访问
2:为了有效使用CPU,需要使每个进程的执行时间比交换时间长
3:若换出进程,则必须确保该进程完全处于空闲状态
4:交换空间通常作为磁盘的一整块,且独立于文件系统,因此使用起来可能很快
5:交换通常在有许多进程运行且内存空间吃紧时开始启动,而在系统负荷降低低时就暂停
6:普通的交换使用不多,但交换策略的某些变体在许多系统(如UNIX)中仍发挥作用
交换技术主要在不同进程(或作业)之间进行,而覆盖则用于同一个进程或程序。对于主存无法存放用户程序的矛盾,现代操作系统是通过虚拟内存技术来解决的,覆盖技术则已成为历史