操作系統之併發性:互斥和同步1

併發是所有問題的基礎,也是操系統設計的基礎。併發包括很多設計問題,如進程間通信、資源共享與競爭、多個進程活動的同步以及分配給進程的處理器時間等(P140)
多處理器環境,分佈式處理器環境,

一. 處理器的多道程序設計

1.單處理器的多道程序設計:進程交替執行,表現出一種併發的外部特徵。即使不能真正並行處理,並且在進程間切換也需要一定開銷,交替執行在處理效率和程序結構上還是帶來了好處。

2.多處理器系統環境:不僅可以交替執行進程,還可以重疊執行。

二.關於併發

併發發生場景

併發會在以下三種不同的上下文中出現:多個應用程序,結構化應用程序,操作系統結構。

併發產生的基本需求

支持併發進程的基本需求是加強互斥能力。也就是說,當一個進程被授予互斥能力時,那麼在其活動期間,它具有排斥所有其他進程的能力。

互斥解決方案:信號量,管程,消息傳遞

00001
00002

三.產生併發的原理

多道程序設計系統的一個基本特性:進程的相對執行速度不可預測,取決於其他進程活動、操作系統中斷方式以及操作系統的調度策略。

多道程序設計系統特性引發相關問題
1.全局資源的共享充滿危險(不同的讀寫執行順序非常關鍵)
2.操作系統很難對資源進行最優化分配(容易發生死鎖)
3.定位程序設計錯誤困難(結果不確定性與不可再現)

相關例子

共享變量的問題例子:問題的本質在於共享全局變量。多個進程訪問這個全局變量,如果一個進程修改了它,然後被中斷,另一個進程可能在第一個進程使用它的值之前又修改了這個變量。

兩類問題
1.在單處理器系統的情況下,出現問題的原因是中斷可能會在進程中的任何地方停止指令的執行;

2.在多處理器系統的情況下,不僅同樣的條件可以引發問題,而且當兩個進程同事執行並且都試圖訪問同一個全局變量時,也會引發問題。

解決思路控制對共享變量的訪問。上面的例子說明,如果需要保護共享的全局變量(及其他共享的全局資源),唯一的辦法是控制訪問該變量的代碼。如果我們定義了一條規則,一次只允許一個進程進入 echo,並且只有在 echo 過程允許結束後,他纔對另一個進程是可用的,那麼剛纔討論的那類問題就不會發生了。

四. 競爭條件

競爭條件發生在多個進程或線程讀寫數據時,其最終的結果依賴於多個進程的指令執行順序。

操作系統關注的問題

  • 操作系統必須能夠跟蹤不同的進程;
  • 操作系統必須爲每個活躍的進程分配和釋放各種資源;
  • 操作系統必須包含每個進程的數據和物理資源,避免其他進程的無意干涉;
  • 一個進程的功能和輸出結果必須與其相對於其他併發進程的執行速度無關。

五.進程的交互

00002

三種方式

  • 進程之間相互不知道對方的存在(競爭情況);
  • 進程通過共享某些對象的方式間接知道對方的存在(合作行爲);
  • 進程之間知道對方的存在(這些進程可以通過進程ID互相通信即合作行爲)。
1.進程間的資源競爭

當併發進程競爭使用同一組員時,他們之間會發生衝突。競爭進程間沒有任何信息交換,但是一個進程的執行可能會影響到競爭進程的行爲。

競爭進程面臨的三個控制問題

a)互斥的要求:競爭進程僅可以訪問一個臨界資源(一次僅有一個進程可以訪問臨界資源),併發機制必須滿足一次只有一個進程可以訪問臨界資源這個規則。假設兩個或更多的進程需要訪問一個不可共享的資源,我們把這類資源稱爲臨界資源,使用臨界資源的那一部分程序稱爲程序的臨界區

b)死鎖 :如果競爭進程需要唯一的訪問多於一個資源,並且當一個進程控制着一個進程,且在等待另一個進程,死鎖可能發生。

c)飢餓:一組進程的一個可能會無限期地拒絕進入到一個需要資源,因爲其他成員組成壟斷這個資源。

2.進程間通過共享合作

多個進程可能訪問一個共享變量、共享文件或數據庫,進程可能使用並修改共享變量而並不涉及其他進程,但卻知道其他進程也可能訪問同一個數據。因此,這些進程必須合作,以確保它們共享的數據得到正確的管理。

由於數據保存在資源中,因此再次涉及有關互斥、死鎖和飢餓等控制問題。唯一的卻別是可以以兩種不同的模式(讀和寫)訪問數據項,並且只有寫操作必須保持互斥。

對於數據一致性的要求,在通過共享進行合作的情況下,臨界區的概念是非常重要的。

3.進程間通過通信合作

當進程通過通信進行合作時,各個進程都與其他進程進行連接,通信提供了同步和協調各種活動的方法。

六. 互斥問題

實現互斥的互斥要求

  • 必須強制實施互斥:在具有關於相同資源或共享對象的臨界區的所有進程中,一次只允許一個進程進入臨界區。
  • 一個在臨界區停止的進程必須不干涉其他進程。
  • 絕不允許出現一個需要訪問臨界區的進程被無限延遲的情況,即不會餓死或飢餓。
  • 當沒有進程在臨界區中時,任何需要進入臨界區的進程必須能夠立即進入。
  • 對相關進程的速度和處理器的數目沒有任何要求和限制。
  • 一個進程駐留在臨界區中的時間是有限的。

爲滿足互斥條件的幾種方法

  • 軟件方法:讓由併發執行的進程擔負實現互斥的責任,這類進程,不論是系統程序還是應用程序,都需要與另一個進程合作,二不需要程序設計語言或操作系統通過任何支持來實施互斥。
  • 第二種方法涉及專門的機器指令。
  • 在操作系統貨程序設計語言中提供某種級別的支持。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章