进程三态状态装换图
注意:创建和退出不是进程的状态。创建操作不做重点解释。阻塞也叫等待,和就绪的区别:等待是等待除CPU以外的资源,而就绪等待的是CPU资源。
用户发出命令,我要运行这个程序,然后,操作系统会就会创建进程,并为它分配资源(主要是内存空间),进程创建成功,此时把该进程插入到就绪队列中,进程的就绪状态的意思是,告诉操作系统我现在可以执行了,给我CPU让我运行吧; 操作系统的一个程序给就绪队列中的进程分配一定的时间让他们轮流占用CPU资源,一个就绪进程得到CPU资源后,就变成了运行状态; CPU执行某进程中的指令要求调用某一资源时,且该资源别的进程正在用,那么操作系统的这个程序会把该进程的状态变为阻塞状态,例如:指令要求用打印机,但是打印机正在打印东西,无法现在用,那么,操作系统会修改该进程的状态,并把他由就绪队列变为阻塞队列中; 当那个进程中的事件请求完成,操作系统的一个程序会把该进程的状态就会由阻塞状态变为就绪状态,然后循环; 当进程的程序正常运行结束后(可以指程序自动的关闭,也可以指用户正常关闭),进程中有一些事后处理的指令,会把队列中记录去掉。
进程五态状态装换图
注意:在进程的五态图中引入了挂起和激活的操作,另外,进程创建时可以先到静止就绪(主要是内存资源不足),其他的和三态图的操作一样。
挂起:把该进程从内存中搬到外存上。
激活:又叫唤醒或恢复,操作是一样的,只是叫法不一样而已,该操作是把外存上的某个进程弄到内存上。
为什么要引入挂起和激活操作呢?
1、用户的需要。用户调试一个程序的时候,运行该程序一多半了,但是,忽然发现该程序此时有Bug,用户想停下来修改,但是修改后,用户又不想从头开始运行该程序,此为一因。
2、操作系统的需要。操作系统管理着资源的分配,它无法忍受那些占着资源而不运行的程序,另外,这些进程也会妨碍系统的运行速度,此为一因。等等。
题目:某系统的状态转换图如图所示。
(1)分别说明引起状态转换1、2、3、4的原因,并各举一个事件。
(2)为什么在转换图中没有就绪到阻塞和阻塞到运行的转换方向?
(3)一个进程的状态变换能够引起另一个进程的状态变换,说明下列因果变迁是否可能发生,原因是什么?
(a)3→1(b)2→1(c)3→2(d)3→4(e)4→1
答: (1)
1:就绪->执行, 当前运行进程阻塞,调度程序选一个优先权最高的进程占有处理机;
2:执行->就绪, 当前运行进程时间片用完;
3:执行->阻塞,当前运行进程等待键盘输入,进入了睡眠状态。
4:阻塞->就绪,I/O操作完成,被中断处理程序唤醒。
(2)就绪进程没有占有处理机,也即没有经过运行,其状态就不会改变。
阻塞状态进程唤醒后先要进入就绪队列,才会被调度程序选中,进入了执行状态。
(3)
(a) 3→1: 可能,当前运行进程阻塞,调度程序选一个优先级最高的进程占有处理机。
(b)2→1:可能,当前运行进程优先级下降,调度程序选一个优先级最高的进程占有处理机。
(c)3→2: 不可能,占有CPU的一个进程不能同时进入两个状态;在单CPU的系统中,状态3发生后,cpu没有执行进程,故不会发生状态转换2。
(d)3→4:一般不可能,不相干的两个事件。状态转换3是由于运行进程等待资源而发生的,这并不会使得阻塞队列中的进程得到资源而进入就绪队列。但在Unix中,当系统的0#进程因runin标志而睡眠时,有(在内存)进程睡眠,就会唤醒0#进程,使其进入就绪状态,以便将该进程和在盘交换区就绪进程交换位置。
(e)4→1:一般无关,但当就绪队列为空时,一个进程被唤醒转入就绪队列后,调度程序使该进程占有处理机(但是同一个进程)。