進程阻塞
進程阻塞
正在運行的進程由於提出系統服務請求(如I/O操作),但因為某種原因未得到操作系統的立即響應,或者需要從其他合作進程獲得的數據尚未到達等原因,該進程只能調用阻塞原語把自己阻塞,等待相應的事件出現后才被喚醒。
正在進行的進程由於發生某事件而暫時無法繼續執行時,便放棄處理機而處於暫停狀態,亦即進程的執行受到阻塞,我們把這種暫停狀態叫阻塞進程阻塞,有時也成為等待狀態或封鎖狀態。通常這種處於阻塞狀態的進程也排成一個隊列。有的系統則根據阻塞原因的不同而處於阻塞狀態進程排成多個隊列。
進程阻塞的典型事件有:生產者/消費者問題,理髮店問題
生產者/消費者問題(英語:Producer-consumer problem),也稱有限緩衝問題(英語:Bounded-buffer problem)通常可描述為有一個或多個生產者產生某種類型的數據(記錄、字元),並放置在緩衝區中,有一個消費者從緩衝區中取數據,每次取一項;系統保證避免對緩衝區的重複操作,也就是說,在任何時候只有一個代理(生產者或消費者)可以訪問緩衝區。生產者的是生成一定量的數據放到緩衝區中,然後重複此過程。與此同時,消費者也在緩衝區消耗這些數據。該問題的關鍵就是要保證生產者不會在緩衝區滿時加入數據,消費者也不會在緩衝區中空時消耗數據,否則會造成阻塞。