内存交换
把所有进程一直保存在内存中需要巨大的内存,当然我们也不会这么做。那么我们是怎么做的呢?
最简单的策略是交换(swapping)技术,即把一个进程完整调入内存,使该进程运行一段时间,然后把它存回磁盘。空闲进程主要存储在磁盘上,所以当它们不运行时就不会占用内存(尽管其中的一些进程会周期性地被唤醒以完成相关工作,然后就又进入睡眠状态)。另一种策略是虚拟内存,该策略甚至能使程序在只有一部分被调人内存的情况下运行。下面先讨论交换技术,虚拟内存可以看这篇总结。
交换系统的操作如上图所示。开始时内存中只有进程A。之后创建进程B和C或者从磁盘将它们换入内存。上图显示A被交换到磁盘。然后D被调入,B被调出,最后A再次被调入。由于A的位置发生变化,所以在它换入的时候通过软件或者在程序运行期间通过硬件对其地址进行重定位。例如,基址寄存器和界限寄存器。
当进程被创建或换入时应该为它分配多大的内存?
若进程创建时其大小是固定的并且不再改变,则分配很简单,操作系统准确地按其需要的大小进行分配。
如果进程的数据段可以增长,例如,很多程序设计语言都允许从堆中动态地分配内存,那么当进程空间试图增长时,就会出现问题。
解决