CPU是个很聪明的东西,他知道如何充分利用内存去提高程序运行的效率,当然其中功不可没的就是阻塞队列和就绪队列。CPU通过利用阻塞,就绪,执行三种基本状态去使得程序有序快速的进行。进程只有获得CPU才能执行,每个程序可以看做是一辆运货的小推车,装有货物(数据等);小推车上有货物单(PCB),用来记录货物搬运情况;小推车上的货物搬运过程就相当于程序运行过程;而摆放货物的工人就相当于是CPU。假如3辆小推车到了工厂,3辆小推车装的货物规格分别为大、中、小,负责摆放的工人始终只有一个,这时候就有两种摆放方式,一种是一种货物一种货物摆放完,依次摆放每种货物,一次运的货物不够也要等着再次运过来摆,这种方式可以描述为程序的顺序执行;另一种方式是考虑到每种货物都要摆,而且要考虑到时间问题,那么先后顺序就很重要了,不可能依次搬运,那么此时不能忽略每辆车,为了让等待时间相对公平,就要采取间断摆放。刚开始3个小推车都处于就绪状态,当摆放一辆小推车的大货物时该小推车就处于执行状态,之后发现大货物不够,那么工人就选择摆放下一辆小推车的货物,并且记录下搬了多少大货物,下一辆小推车又处于执行状态,运大货物的小推车就回到仓库继续拉大货物,此时就相当于被放入阻塞队列,然后运回大货物后就等着被重新调到就绪队列,就按这种方式搬运,此时能充分利用时间,这种方式可以描述为程序的并发执行。当然对于第二种方式,为了准确记录搬运进度,需要将每次搬运到多少做一个记录,就不会出现多搬运或少搬运的情况,那么每次搬运到多少就要在货物单上做一个记录,就不会导致从头开始数,也就是把程序执行的进度记录在PCB上,这样就大大提高程序运行效率。
当然,在程序运行过程中总会有一个终止状态。有三种情况是导致进程终止的条件。第一种,当进程的任务完成后进程也就正常结束了,于是就退出运行。第二种进程在运行过程中可能发生某种异常,迫使进程无法继续进行。通常有以下异常:越界,程序访问存储区越出该进程的区域,比如小推车进错仓库就无法再继续了,很可能就找不到货物;保护,进程试图访问一个不允许被访问的资源,那么肯定是无法访问的;非法指令,程序执行一条不存在的指令;特权指令,执行只允许OS执行的指令;运行超时,进程执行时间超过指定最大值,比如小推车耗费大量时间,而工人下班了则无法继续;等待超时,进程等待时间超过规定最大值;算术运算错,程序试图执行一个被禁止的运算,比如说除法运算中被零除的运算;I/O过程发生错误。第三种是外界的干预,包括操作员、操作系统的干预,父进程的请求,父进程终止等。