进程(第一部分)
进程这一块包括了进程的基本概念、进程的状态转换、进程的互斥同步死锁以及PV操作等等等等,与进程相关的我们都归结为考点一.
第二块就是存储相关的,存储相关的有虚存的管理,以及分页分段管理等等,接下来就是一些小的考点了,你比如说有作业的调度,有I/O操作,有目录的管理等等等等.
进程的考点:
尤其是PV原语现在基本上年年都会考.而且这一块考生丢分现象还比较严重因为PV原语算是操作系统这一块最难的一个考点了.
进程是操作系统当中一个资源分配的一个最小单位.其实进程还有另外一种图:五态图.五态图会比三态图更详细主要就是增加了两种状态.
这一块的要求是:熟练地掌握三态图,了解五态图.五态图主要是对几个概念的了解:挂起的含义、
当就绪态得到CPU的调度的时候,当进程处于就绪态并且得到CPU的调度的时候,它就变为了运行态.
当中就绪和等待有什么区别呢?就绪状态和等待状态它的最大的区别:就绪状态是等待CPU的调度,就是只缺CPU的调度,批准CPU就可以了.等待状态是等除CPU以外的其他资源。除CPU以外的资源有哪些资源呢?你比如说用的最多的就是打印机。我可能一个进程,这个进程的作用是做统计报表它同时要进行打印,当用户点到了打印这一个动作的时候,进程就要判断这个打印机是否空闲,如果说打印机空闲,那么资源就已经冲突了就只需要CPU的调度你就可以进行一系列的工作了.但是如果说打印机处于忙的状态,那么我们就需要等待,等待是等待打印机资源.等到打印机空闲出来,已经系统把打印机分配给了A进程的时候,我们就可以进入就绪态了,就只等待CPU的调度了.等待态是等待CPU以外的资源,而就绪态是专门等待CPU资源.
等待状态的另外一种说法就是阻塞状态.阻塞状态和等待状态是等价的.当你运行的时候突然要用到某一个资源但是这个资源它还没有空闲出来它不能为你所用的时候你就要等待这个资源等待这个事件的发生,就要进入等待状态.刚才举了一个例子我运行的时候要用到打印机但是打印机现在有人在用它不是空闲状态所以我们就要等到打印机空闲出来的时候,打印机空闲了(事件发生)就进入了就绪状态.
还比如说我们要计算一个结果,但是运算过程当中要从一个外设得到一些数据值.你比如说是一个红外探测器,探测某一个东西的状态,然后我们的运算需要这个状态值来执行,然而红外线的设备它还没有把这个结果传送过来,这种情况我们也需要等待,也就是从运行状态到了等待状态.然后数据得到的时候事件发生的时候就到了就绪状态.就绪状态如果说轮到你这个进程执行,系统把你这个进程进行调度的时候,就到了运行状态.
那么运行状态到就绪状态是怎样的一个过程呢?什么情况下运行状态会到就绪状态?
因为我们要考虑的一点就是运行状态是所有资源都充分的时候,而就绪状态是缺CPU资源的状态,也就是说如果要从运行状态到就绪状态,就是系统剥夺了CPU的资源.
系统什么情况下会剥夺掉这个进程的CPU资源呢?有好几种情况,比如说我进程A在执行,但是现在进入了一个进程B,进程B的优先级比进程A高,那么系统就会把A调整到就绪状态,也就是把A的CPU资源剥夺掉.然后把这个资源给B来使用.那么A就从运行态到了就绪态.
另外还有一种形式,比如说系统的进程调度算法是用的时间片轮转,也就是,比如说A、B、C、D四个进程都是就绪状态,现在使用时间片轮转算法,那么就是A执行比如说1毫秒,1毫秒时间片到达的时候,A就自动从运行状态到了就绪状态,让B来使用.B使用了1毫秒又从运行状态变为了就绪状态,接下来C、D.D运行完毕之后又轮到了A来运行,这样子时间片轮到的时候它也可能从运行状态到就绪状态.
进程的五态图:
五态图的活跃就绪和三态图的就绪是一样的.而五态图的活跃阻塞和三态图的阻塞是一样的.因为刚才我们也提到了,等待状态也称为阻塞状态.
五态图比三态图多出来的两个是静止就绪和静止阻塞.由三态图变成五态图之后这个状态的转换就比以前复杂多了.
这里面多次提到了挂起状态.从活跃就绪到静止就绪称为挂起,从活跃阻塞到静止阻塞它也叫做挂起.那么挂起它到底是怎样的一个操作过程呢?
其实挂起是把内存当中的进程映射到外存的一个过程.也就是说进程A我现在挂起它,进程A就从内存中转移到了外存当中.
然后激活刚好是一个逆过程,相反的,就是从外存当中把进程拷贝到内存当中来.
只要了解了这一点就可以了,五态图不做过多的要求.主要就是对一些概念的理解,你要清楚活跃就绪是可以和静止就绪相互转换的,活跃阻塞与静止阻塞也是可以互相转换的.同时静止阻塞可以向静止就绪进行转换,也可以从运行状态直接挂起形成静止就绪状态.
例题:
这8个命题都是与进程转换相关的.6、7、8这三个命题的形式的是比较相似的.这三句话的意思是:用户进程是不是可以引起进程的状态转换,哪些操作可以由用户进程来处理、影响?这个我们要结合静态的转换图来看.我们看这个五态图,用户进程是否可以激活调度进程呢?就是说用户进程是否可以控制一个就绪到运行的一个状态呢?是否定的,因为就这一块的调度而言,是完全由操作系统来完成的,由操作系统来控制的.因为CPU这个资源它是由操作系统来控制的.同时这个超时也是用户进程它不能控制的,因为我们开始说的就比如说一个进程它时间片轮到了它就超时了,超时了就必须要从运行状态到就绪状态.这个过程是由CPU来进行调度,进行判断的.由系统进程来进行调度的,而不是用户进程.
而唤醒操作就不同了.其实挂起状态可以理解为一种人为的一种状态,你就比如说你在听歌,你在听一个MP3的歌,它现在是一个运行的状态,它在放音乐出来,突然你要接一个电话你不想这个MP3的歌声影响到你接电话,所以你按了一下暂停键.按暂停键其实就是一种挂起的行为.挂起的行为可以由用户来进行操作的.就是用户来控制是否挂起.然后这种情况下用户也可以进行唤醒,就是我再按一下暂停键,按一下暂停键它就会开始运行这个程序了.就是继续播放歌曲.这样子也就是进行激活.
唤醒:挂起->就绪.因为静止就绪和静止阻塞都可以理解为一个挂起状态,所以说从挂起->就绪可以称为恢复/激活.这个是大家一个习惯的问题,因为这些术语都是从外国翻译过来.翻译过来叫法有些不同而已,其实是一个含义,就是唤醒.它也就是恢复,也就是激活.
封锁:就绪->挂起.应该是挂起状态,没有封锁这个说法.
调度:就绪->运行.调度就是进程获取CPU的一个过程.它是从就绪状态到运行状态.
超时:运行->挂起.
超时:运行->就绪.超时的含义是时间片轮到也就是超过了用户可用的时间,这就是超时.超时应该是从运行态->就绪态的一个过程.
静态转换讲完了