操作系统——进程状态图解(两状态进程模型,五状态进程模型,含挂起态的进程模型)
操作系统——进程状态图解
两状态进程模型,进程被分为运行态和非运行态,这两个状态就是字面意思很好理解。
当一个处于运行态的进程终止后,我们就要选一个处于非运行态的进程进入运行态,按照道理,我们应该选非运行态队列中第一个进程,但是,如果队列第一个进程正在进行I/0操作,那么它就要等待I/O操作完成,这时我们就不能单纯地按照队列顺序选择,还要考虑进程是否等待I/O操作
于是我们引入了就绪态和阻塞态
- 就绪态:无需等待其他操作,可以直接进入运行态
- 阻塞态:需等待其他操作完成,如I/O操作
那么我们的五状态进程模型就出来了
现在又有一个问题,如果非运行态的进程都处于阻塞态,没有处于就绪态的进程怎么办?为了不让cpu闲着,我们要让一个新进程进入内存,调出一个处于阻塞态进程进入磁盘,那被调入磁盘的进程状态我们就称为挂起态
这是含挂起态的进程模型:
我们注意到图中有两个挂起态,分别是阻塞/挂起态、就绪/挂起态,它们的区别是什么呢?
- 阻塞/挂起态:进程在外存中,并且仍在等待其他操作完成,如I/O操作
- 就绪/挂起态:进程在外存中,只要载入内存就可以运行(此时原本在等待的操作已经完成)
一个有趣的小问题:单cpu系统,如果内存中有100个进程,那么,
同时处于运行态的进程最多有几个? 1
同时处于就绪态的进程最多有几个? 99
同时处于阻塞态的进程最多有几个?100
解析:单cpu,那么一次执行执行一个进程,所以同时处于运行态的进程有1个,所有进程都可以处于阻塞态,但是不可能所有进程都处于就绪态,因为cpu如果有空闲,那必然要就绪态的一个进程进入运行态