阻塞与唤醒
阻塞的原因
- 进程需要请求系统服务的时候;
- 启动某种操作:如 I/O;
- 新数据尚未到达
- 无新工作可做(如定期清理垃圾的进程)
阻塞原语 block()
当出现阻塞事件,进程调用阻塞原语将自己阻塞。状态变为阻塞状态,并进入相应的事件的阻塞队列
唤醒原语 wakeup()
当阻塞进程期待的事件发生,有关进程调用唤醒原语,将等待该事件的进程唤醒。状态变为Ready,插入就绪队列
挂起与激活
挂起原语 suspend()
当出现挂起事件,系统利用挂起原语将指定进程或阻塞状态进程挂起。进程从内存换到外存,状态改变: Ready -> Ready,Suspend; Blocked -> Blocked,Suspend; 插入相应的队列
激活原语 active()
当激活事件发生,系统利用激活原语将指定进程激活。进程从外存换入到内存,状态改变:Ready,Suspend -> Ready; Blocked, Suspend -> Blocked,然后插入相应的队列