進程阻塞

進程阻塞

正在運行的進程由於提出系統服務請求(如I/O操作),但因為某種原因未得到操作系統的立即響應,或者需要從其他合作進程獲得的數據尚未到達等原因,該進程只能調用阻塞原語把自己阻塞,等待相應的事件出現后才被喚醒。

阻塞狀態


正在進行的進程由於發生某事件而暫時無法繼續執行時,便放棄處理機而處於暫停狀態,亦即進程的執行受到阻塞,我們把這種暫停狀態叫阻塞進程阻塞,有時也成為等待狀態或封鎖狀態。通常這種處於阻塞狀態的進程也排成一個隊列。有的系統則根據阻塞原因的不同而處於阻塞狀態進程排成多個隊列。

進程阻塞的典型事件


進程阻塞的典型事件有:生產者/消費者問題,理髮店問題

生產者/消費者問題

生產者/消費者問題(英語:Producer-consumer problem),也稱有限緩衝問題(英語:Bounded-buffer problem)通常可描述為有一個或多個生產者產生某種類型的數據(記錄、字元),並放置在緩衝區中,有一個消費者從緩衝區中取數據,每次取一項;系統保證避免對緩衝區的重複操作,也就是說,在任何時候只有一個代理(生產者或消費者)可以訪問緩衝區。生產者的是生成一定量的數據放到緩衝區中,然後重複此過程。與此同時,消費者也在緩衝區消耗這些數據。該問題的關鍵就是要保證生產者不會在緩衝區滿時加入數據,消費者也不會在緩衝區中空時消耗數據,否則會造成阻塞。

理髮店問題

如果理髮店中顧客數已滿,新來的就不能再進入。顧客一旦進入理髮店,可以坐在沙發上等待,如果沙發已座滿就站著。當一位理髮師空閑時,在沙發上坐的時間最久的顧客得到服務,並且,如果還有顧客站著,進入理髮店站的時間最久的顧客就可以坐在沙發上。當一位顧客理髮結束后,任何理髮師都可以接受付款,但由於只有一台收銀機,因此一次只能有一位顧客付款。理髮店人滿后的這種狀態就是進程阻塞狀態。