1 进程的状态
运行态(Running):占有CPU,并在CPU上运行。
就绪态(Ready):具有运行条件,但是不占有CPU。是万事俱备,只欠CPU。
阻塞态(Waiting/Blocked):因等待某一时间暂时不能运行。
终止态(Terminated):进程运行结束或者因异常而无法继续运行,需要撤销进程,操作系统需要完成撤销进程的相关操作,如将分配给进程的资源回收,撤销进程的PCB等。
创建态(New):进程正在被创建,操作系统为进程分配资源、始化PCB。
其中,运行态、就绪态和阻塞态称为进程基本状态。
2 进程状态的转换
3 进程控制
3.1 进程控制的过程
进程控制就是进程状态的转换。
进程的组织中提到,操作系统会将处于不同状态的进程的PCB放在不同的状态的队列中来管理PCB。
创建进程:操作系统初始化PCB,并分配系统资源,当上述工作完成后,会把进程的PCB放入到就绪队列中,实现了从创建态到就绪态的转换。
就绪态转换为运行态:如果一个进程被CPU调度,那么操作系统会恢复进程运行的环境(由于进程之前可能运行过,但还没有运行完,所以再次运行时需要将进程恢复到上次中断时的状态继续运行)、修改PCB的内容(将PCB中的状态标志位从就绪态改为运行态等)和将PCB从就绪队列中取出来,那么该进程就可以被处里。进程就由就绪态转换为运行态
运行态转换为阻塞态:当一个进程在执行过程中,使用系统调用的方式发送了等待某个事件的请求,那么就需要将进程当前运行的环境保存,修改PCB的内容(将PCB状态标志位从运行态改为阻塞态),再将进程的PCB放入到相应事件的阻塞队列中。
阻塞态转换为就绪态:需要修改PCB的内容,并且将进程的PCB放入到就绪队列中,如果等待的是资源,则还需要为进程分配系统资源。
运行态到就绪态:当一个进程的CPU时间片耗尽或者CPU被抢占,需要进程切换,同样需要保存进程的运行环境、修改PCB的内容并将进程的PCB放入到就绪队列中。
运行态转换为终止态:当进程完成或者异常结束,需要回收进程拥有的资源,同时还要撤销PCB。
如果在进程转换时,某个进程将其PCB从一个队列放入到另一个队列,但是却没有修改状态标志位,那么就极有可能导致系统错误,为了防止出现这种问题,进程控制就使用原语实现。
3.2 进程控制的实现
进程控制实现:进程控制是用原语实现的。原语的特点是具有原子性,即执行期间不允许中断。
原语采用“关中断指令和开中断指令实现。
当原语相关的代码执行前,会先执行关中断指令,在原语代码执行期间,外部中断指令进入,这个外部中断指令会被忽略,暂时不会处理,所以原语代码不会被中断。在执行了开中断指令后,在接收到外部中断指令后,才能对中断进程处理。
关/开中断是权限非常大,是只允许在核心态下执行的特权指令。
3.2 进程控制的相关的原语
首先,一个原语需要的工作有:
(1) 更新PCB中的信息(如修改进程的状态标志位、将进程的环境保存到PCB、从PCB回复运行环境)。
(2) 将PCB插入到合适的队列。
(3) 分配/回收资源。
操作系统提供的进程控制的原语:创建原语、撤销原语、阻塞/唤醒原语、切换原语。
阻塞原语和唤醒原语要成对出现,因何事阻塞,就应由何事唤醒。
4 小结
(1) 进程的控制就是要实现进程状态的转换。
(2) 进程控制用原语实现,原语用关/开中断指令来实现。
(3) 与进程控制相关的原语:进程的创建、进程的终止、进程的阻塞、进程的唤醒和进程的切换。
本文完
如发现错误,请指正!!!
网友评论