在多道程序環境下,進程是并發執行的,不同進程之間存在著不同的相互制約關系。為了協調進程之間的相互制約關系,引入了進程同步的概念。
### 臨界資源
雖然多個進程可以共享系統中的各種資源,但其中許多資源一次只能為一個進程所使用,我們把一次僅允許一個進程使用的資源稱為臨界資源。許多物理設備都屬于臨界資源,如打印機等。此外,還有許多變量、數據等都可以被若干進程共享,也屬于臨界資源。
對臨界資源的訪問,必須互斥地進行,在每個進程中,訪問臨界資源的那段代碼稱為臨界區。為了保證臨界資源的正確使用,可以把臨界資源的訪問過程分成四個部分:
* 進入區。為了進入臨界區使用臨界資源,在進入區要檢查可否進入臨界區,如果可以進入臨界區,則應設置正在訪問臨界區的標志,以阻止其他進程同時進入臨界區。
* 臨界區。進程中訪問臨界資源的那段代碼,又稱臨界段。
* 退出區。將正在訪問臨界區的標志清除。
* 剩余區。代碼中的其余部分。
~~~
do {
entry section; //進入區
critical section; //臨界區
exit section; //退出區
remainder section; //剩余區
} while (true)
~~~
### 同步
同步亦稱直接制約關系,它是指為完成某種任務而建立的兩個或多個進程,這些進程因為需要在某些位置上協調它們的工作次序而等待、傳遞信息所產生的制約關系。進程間的直接制約關系就是源于它們之間的相互合作。
例如,輸入進程A通過單緩沖向進程B提供數據。當該緩沖區空時,進程B不能獲得所需數據而阻塞,一旦進程A將數據送入緩沖區,進程B被喚醒。反之,當緩沖區滿時,進程A被阻塞,僅當進程B取走緩沖數據時,才喚醒進程A。
### 互斥
互斥亦稱間接制約關系。當一個進程進入臨界區使用臨界資源時,另一個進程必須等待, 當占用臨界資源的進程退出臨界區后,另一進程才允許去訪問此臨界資源。
例如,在僅有一臺打印機的系統中,有兩個進程A和進程B,如果進程A需要打印時, 系統已將打印機分配給進程B,則進程A必須阻塞。一旦進程B將打印機釋放,系統便將進程A喚醒,并將其由阻塞狀態變為就緒狀態。
為禁止兩個進程同時進入臨界區,同步機制應遵循以下準則:
* 空閑讓進。臨界區空閑時,可以允許一個請求進入臨界區的進程立即進入臨界區。
* 忙則等待。當已有進程進入臨界區時,其他試圖進入臨界區的進程必須等待。
* 有限等待。對請求訪問的進程,應保證能在有限時間內進入臨界區。
* 讓權等待。當進程不能進入臨界區時,應立即釋放處理器,防止進程忙等待。
- 1. 操作系統概述
- 2.操作系統(計算機)進程和線程管理
- 2.1 進程的概念和特征
- 2.2 進程的狀態與轉換
- 2.3 進程控制
- 2.4 進程的組
- 2.5 進程的通信
- 2.6 線程的概念和多線程模型
- 2.7 處理機調度
- 2.8 操作系統典型調度算法
- 2.9 進程同步的基本概念
- 2.10 實現臨界區互斥的基本方法
- 2.11 信號量
- 2.12 管程:管程的定義、組成及基本特性
- 2.13 經典進程同步問題1
- 2.14 經典進程同步問題2:讀者-寫者問題
- 2.15經典進程同步問題3:哲學家進餐問題
- 2.16 經典進程同步問題4:吸煙者問題
- 2.17 死鎖的概念以及產生死鎖的原因
- 2.18 關于進程和線程的知識點匯總