進程的阻塞與喚醒:
1. 引起阻塞與喚醒的事件
1)向系統中請求共享資源失敗 當無足夠的資源分配時,獲取資源的線程會進行阻塞,加入到阻塞隊列中;當有資源后,被阻塞的線程會被喚醒,加入到就緒隊列中。
2)等待某種操作完成
3)新數據尚未到達 比如生產者消費者模型,只要產品數量為0,那么消費者就會阻塞,得到產品數量大於0,進行喚醒
4)等待新任務到達
2. 進程阻塞過程
當要進行阻塞的事件發生時,進程通過調用阻塞原語 block 將自己阻塞,所以,阻塞是一個主動的過程,將自己進行阻塞。 進程控制塊的狀態由 執行 改為阻塞,並將PCB插入到阻塞隊列。
3. 進程喚醒過程
當要進行喚醒的事件發生時,進程調用喚醒原語 wakeup ,將等待該事件的線程喚醒,喚醒是通過別的進程來進行喚醒的!!將阻塞的進程從等待該事件的阻塞隊列中移出,將其PCB中的狀態由阻塞改為 就緒,然后 將該PCB插入到就緒隊列中。
進程的掛起與激活:
(為什么要有掛起與激活??? 與進程的阻塞和喚醒有關系嗎??)