覆盖与交换
覆盖
追根溯源——早期计算机系统内存容量小,虽然内存中只有一道用户程序,内存存储空间仍有可能放不下。覆盖的基本思想是:程序运行时并非任何时候都要访问程序及数据的各个部分,因此可以把用户空间分成一个固定区和若干个覆盖区。经常活跃的部分放在固定区,其余部分按调用关系分段。在覆盖区和外存(即磁盘)中屡次调入调出。
特点是打破了必须将一个进程的全部信息装入主存后才能运行的限制。
交换
交换的基本思想是: 把处于等待状态(比如说等待IO, 网络等阻塞的线程)的程序从内存移出,腾出内存空间,这个过程叫换出。把准备好竞争CPU的程序从辅存移动到内存,这个过程叫换入。
需要注意几个问题:
交换需要备份存储,通常是快速磁盘
为了有效使用CPU,每个进程的执行时间需要比交换时间长。
如果换出进程,必须确保该进程是处于完全空闲状态
普通的交换使用不多,但交换策略的某些变种在许多系统(比如UNIX系统)仍发挥作用。
两者区别: 交换技术主要是在不同进程(或作业之间),而覆盖则用于同一个进程中。对于主存无法存放用户程序的矛盾,现代操作系统是通过虚拟内存技术来解决的,覆盖技术已成为历史,而交换技术在现代操作系统仍有较强的生命力。