4 被挂起的进程 交换的需要 前面描述的三个基本状态(就绪态、运行态和阻塞态)提供了一种为进程行为建立模型的系统方法,并指导操作系统的实现
许多实际的操作系统都是按照这样的三种状态进行具体构造的
但是,可以证明往模型中增加其他状态也是合理的
为了说明加入新状态的好处,考虑一个没有使用虚拟内存的系统,每个被执行的进程必须完全载入内存,因此,图3
8b 中,所有队列中的所有进程必须驻留在内存中
所有这些设计机制的原因都是由于I/O 活动比计算速度慢很多,因此在单道程序系统中的处理器在大多数时候是空闲的
8b 的方案并没有完全解决这个问题
在这种情况下,内存保存有多个进程,当一个进程正在等待时,处理器可以转移到另一个进程,但是处理器比I/O要快得多,以至于内存中所有的进程都在等待I/O 的情况很常见
因此,即使是多道程序设计,大多数时候处理器仍然可能处于空闲状态
一种解决方法是内存可以被扩充以适应更多的进程,但是这种方法有两个缺陷
首先是内存的价格问题,当内存大小增加到兆位及千兆位时,价格也会随之增加;再者,程序对内存空间需求的增长速度比内存价格下降的速度快
因此,更大的内存往往导致更大的进程,而不是更多的进程
另一种解决方案是交换,包括把内存中某个进程的一部分或全部移到磁盘中
当内存中没有处于就绪状态的进程时,操作系统就把被阻塞的进程换出到磁盘中的“挂起队列”( suspendqueue) ,这是暂时保存从内存中被“驱逐”出的进程队列,或者说是被挂起的进程队列
操作系统在此之后取出挂起队列中的另一个进程,或者接受一个新进程的请求,将其纳入内存运行
“交换”(swapping)是一个I/O 操作,因而也可能使问题更加恶化
但是由于磁盘I/O 一般是系统中最快的I/O(相对于磁带或打印机I/O),所以交换通常会提高性能
为使用前面描述的交换,在我们的进程