操作系統原理學習(第六週)_進程同步

6-1進程同步背景

1.生產者消費者問題

採用共享內存解決生產中消費者問題時,N個緩衝區最多隻能用N-1個,如何解決?

 

2.共享數據的一致性

①對共享數據的併發訪問可能導致數據的不一致性

②要保持數據的一致性,需要一種保證併發進程的正確執行順序的機制。

③競爭條件 race condition

若干併發的進程(線程)都可以訪問和操縱同一共享數據,從而執行結果取決於併發進程對這個數據的訪問次序。爲保證數據的一致性,需有同步機制來保證多個進程對共享數據的互斥訪問。

 

3.進程間的制約

①進程類型:協作進程,彼此影響;獨立進程,互斥。

②進程間資源的訪問衝突:共享變量的修改衝突;操作順序衝突。

③進程間的制約關係:

間接制約:資源互斥,進程競爭,進程的互斥

直接制約:進行協作,進程的同步

 

4.進程間的交互關係

互斥:多個進程不能同時使用同一個資源

同步:進程之間協作

死鎖:多個進程互不相讓,都得不到足夠資源

 

6-2 臨界區

1.臨界區的訪問過程

①對於臨界資源,多個進程必須互斥對它的進行訪問。

②臨界區(critical section):進程中訪問臨界資源的一段代碼。

③實現進程對臨界資源的互斥訪問——各進程互斥地進入自己的臨界區。

④假定一個系統中有n個進程(P0,P1,……,Pn)每個進程。

⑤當一個進程在臨界區中執行時,其他進程都不能進入臨界區。

 

2.進入區和退出區

①臨界區的執行在時間上互斥,進程必須請求允許進入臨界區。

②進入區(entry section):在進入臨界區之前,檢查可否進入臨界區的一段代碼。如果可進入,通常設置相應“正在訪問臨界區”標誌。

③退出區(exit section):用於將“正在訪問臨界區”標誌清除的一段代碼。

④剩餘區(remainder section):代碼中的其餘部分。

 

3.臨界區的解決方案——三個要求

①互斥 mutual exclusion

假定進程Pi在其臨界區內執行,其他任何進程將被排斥在自己的臨界區之外。

②有空讓進 progress

臨界區雖沒有進程只想,但有些進程需進入臨界區,不能無限期延長下一個需要臨界區進程的等待時間。

③有限等待 bounded waiting

在一個進程提出進入臨界區的請求和該請求得倒答覆的時間內,其他進程進入臨界區的次數必須是有限的。

 

4.如何實現進程間的互斥

①兩進程互斥的軟件方法——算法1

設立一個兩進程公用的整型變量turn:描述允許進入臨界區的進程標識。

有兩個進程Pi和Pj,如果turn == j,進程Pi允許在其臨界區執行。

缺點:強制輪流進入臨界區,沒有充分考慮進場的實際需要,容易造成資源利用不充分。進程1讓出臨界區之後,進程2進入臨界區之前,進程1無法再使用臨界區。

 

②算法2

設立一個標誌數組flag[]:描述進程是否準備進入臨界區,初值均爲FALSE。

優點:不用交替進入,可連續使用。

缺點:兩進程可能都進不了臨界區。

 

③算法3

turn=j,描述可進入的進程(同時修改標誌),在進入區修改後檢查,並檢查併發修改的先後:

檢查對方的flag,如不在臨界區則自己進入——空閒則進

否則再次檢查turn;先到先入,後到等待。

 

6-3信號量

OS可從進程管理者的角度處理互斥問題,信號量就是OS提供的管理公有資源的有效手段。

1.信號量——可用資源實體的數量 整型變量

①第一種 經典定義

除初始化外,僅能通過兩個不可分割(原子)的操作訪問。

P(S):

    while S<=0 do no-op(等待,存在忙等,自旋鎖);

    S--;

V(S):

    S++;

 

②第二種 一種不需要等待的同步工具

P(S):

    S--;

    if S<0 do block(阻塞)

V(S):

    S++;

    if S<=0 then wake up(喚醒其他操作)

 

2.信號量更多知識 Semaphore

①S是臨界區內所使用公用資源有關的信號量。

P(S):表示申請一個資源

V(S):表示釋放一個資源②初始爲非負整數,表示空閒資源總數。

③在信號量經典定義下,S的值不可能爲負。

④後一種定義中:S>=0,可供進程使用的資源數

S<0,絕對值是正在等待進入臨界區的進程數。

 

3.利用信號量實現互斥

爲臨界資源設置一個互斥信號量,初值爲1。每個進程中將臨界區代碼置於P(S)和V(S)原語之間

P(S):

    Critical Section();

V(S);


4.利用信號量來描述前趨關係

 

6-4 哲學家問題 Dining Philosophers Problems

1.問題

 

2.解答

可能會出現死鎖,五個人每個人拿起左邊筷子。

 

3.解決死鎖

①最多允許四個哲學家同時就坐

②同時拿起兩根筷子

③非對稱解決(單數座位號先拿左,雙數先拿右)

 

6-5生產者消費者問題(有限緩衝區問題)

1.問題描述:若干進程通過有限的共享緩衝區交換數據,“生產者”可不斷寫入,“消費者”不斷讀出,共享緩衝區共有N個;任何時刻只能有一個進程可對共享緩衝區進行操作。

 

2.採用信號量機制解決

①full是“滿”數目,初值爲0,empty是“空”數目,初值爲N。實際上,full + empty = N

②mutex用於訪問緩衝區時的互斥,初值爲1

③每個進程各個P操作的次序是重要的:先檢查資源數目,再檢查是否互斥——否則可能死鎖(兩種P操作)

 

6-6 讀寫問題

1.問題描述:對共享資源的讀寫操作,任一時刻“寫者”最多允許一個,而“讀者”允許多個。

①互斥 “讀——寫”

②互斥 “寫——寫”

③允許 “讀——讀”

 

2.如果讀者來:

①無讀者、寫者,新讀者可以讀。

②有寫者等,但有其他讀者正在讀,則新讀者也可以讀。

③有寫者寫,新讀者等。

 

3.如果寫者來:

①無讀者,新寫者可以寫。

②有讀者,新寫者等待。

③有其他寫者,新寫者等待。

 

4.採用信號量機制

①信號量Wmutex表示“允許寫”,初值爲1

②公共變量Rcount表示“正在讀”的進程數,初值爲0

③信號量Rmutex表示Rcount的互斥操作,初值是1

 

5.PV操作討論總結

1.①S>0 表示有S個資源可用

②S=0 表示無資源可用

③S<0 則|S|表示S等待隊列中的進程個數

④P(S) 表示申請一個資源

⑤V(S) 表示釋放一個資源

⑥信號量初始值應大於0

 

2.①PV操作必須成對出現,有一個P操作就一定有一個V操作。

②互斥問題:PV操作處於同一進程

同步問題:PV操作不在同一進程。

③對於前後相連的兩個P(S1)和P(S2),順序是至關重要的,同步P操作應該放在互斥P操作之前。

 

本文知識以及圖片來源:慕課_操作系統原理_田麗華

網址:https://www.icourse163.org/learn/XJTU-1003409001?tid=1206408203#/learn/content

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章