进程的阻塞与唤醒 引起进程阻塞和唤醒的事件 ) 请求系统服务 ) 启动某种操作 ) 新数据尚未到达 ) 无新工作可做 进程阻塞过程 正在执行的进程当发现上述某事件时由于无法继续执行于是进程便通过调用阻塞原语block把自己阻塞可见进程的阻塞是进程自身的一种主动行为进入block过程后由于此时该进程还处于执行状态所以应先立即停止执行把进程控制块中的现行状态由执行改为阻塞并将PCB插入阻塞队列如果系统中设置了因不同事件而阻塞的多个阻塞队列则应将本进程插入到具有相同事件的阻塞(等待)队列最后转调度程序进行重新调度将处理机分配给另一就绪进程并进行切换亦即保留被阻塞进程的处理机状态(在PCB中)再按新进程的PCB中的处理机状态设置CPU的环境 进程唤醒过程 当被阻塞进程所期待的事件出现时如I/O完成或其所期待的数据已经到达则由有关进程(比如用完并释放了该I/O设备的进程)调用唤醒原语wakeup( )将等待该事件的进程唤醒唤醒原语执行的过程是首先把被阻塞的进程从等待该事件的阻塞队列中移出将其PCB中的现行状态由阻塞改为就绪然后再将该PCB插入到就绪队列中 进程的挂起与激活 进程的挂起 当出现了引起进程挂起的事件时比如用户进程请求将自己挂起或父进程请求将自己的某个子进程挂起系统将利用挂起原语suspend( )将指定进程或处于阻塞状态的进程挂起挂起原语的执行过程是首先检查被挂起进程的状态若处于活动就绪状态便将其改为静止就绪对于活动阻塞状态的进程则将之改为静止阻塞为了方便用户或父进程考查该进程的运行情况而把该进程的PCB复制到某指定的内存区域最后若被挂起的进程正在执行则转向调度程序重新调度 进程的激活过程 当发生激活进程的事件时例如父进程或用户进程请求激活指定进程若该进程驻留在外存而内存中已有足够的空间时则可将在外存上处于静止就绪状态的进程换入内存这时系统将利用激活原语active( )将指定进程激活激活原语先将进程从外存调入内存检查该进程的现行状态若是静止就绪便将之改为活动就绪若为静止阻塞便将之改为活动阻塞假如采用的是抢占调度策略则每当有新进程进入就绪队列时应检查是否 要进行重新调度即由调度程序将被激活进程与当前进程进行优先级的比较如果被激活进程的优先级更低就不必重新调度否则立即剥夺当前进程的运行把处理机分配给刚被激活的进程 ——返回教材目录 了解更多计算机相关基础课程视频 [] [] |