回覆列表
  • 1 # 藍風24

    程序間和執行緒間的協作區別:

    程序互斥、同步的概念

    程序互斥、同步的概念是併發程序下存在的概念,有了併發程序,就產生了資源的競爭與協作,從而就要透過程序的互斥、同步、通訊來解決資源的競爭與協作問題。

    下面是根據《作業系統教程》3.1.4 中的介紹,整理的程序互斥、同步的概念。

    在多道程式設計系統中,同一時刻可能有許多程序,這些程序之間存在兩種基本關係:競爭關係和協作關係。

    程序的互斥、同步、通訊都是基於這兩種基本關係而存在的,為了解決程序間競爭關係(間接制約關係)而引入程序互斥;為了解決程序間鬆散的協作關係( 直接制約關係)而引入程序同步;為了解決程序間緊密的協作關係而引入程序通訊。

    第一種是競爭關係

    系統中的多個程序之間彼此無關,它們並不知道其他程序的存在,並且也不受其他程序執行的影響。例如,批處理系統中建立的多個使用者程序, 分時系統中建立的多個終端程序。由於這些程序共用了一套計算機系統資源,因而, 必然要出現多個程序競爭資源的問題。當多個程序競爭共享硬裝置、儲存器、處理器 和檔案等資源時,作業系統必須協調好程序對資源的爭用。

    資源競爭出現了兩個控制問題:一個是死鎖 (deadlock )問題,一組程序如果都獲得了部分資源,還想要得到其他程序所佔有的資源,最終所有的程序將陷入死鎖。另一個是飢餓(starvation )問題,這是指這樣一種情況:一個程序由於其他程序總是優先於它而被無限期拖延。

    作業系統需要保證諸程序能互斥地訪問臨界資源,既要解決飢餓問題,又要解決死鎖問題。

    程序的互斥(mutual exclusion )是解決程序間競爭關係( 間接制約關係) 的手段。 程序互斥指若干個程序要使用同一共享資源時,任何時刻最多允許一個程序去使用,其他要使用該資源的程序必須等待,直到佔有資源的程序釋放該資源。

    第二種是協作關係

    某些程序為完成同一任務需要分工協作,由於合作的每一個程序都是獨立地以不可預知的速度推進,這就需要相互協作的程序在某些協調點上協 調各自的工作。當合作程序中的一個到達協調點後,在尚未得到其夥伴程序發來的訊息或訊號之前應阻塞自己,直到其他合作程序發來協調訊號或訊息後方被喚醒並繼續執行。這種協作程序之間相互等待對方訊息或訊號的協調關係稱為程序同步。

    程序間的協作可以是雙方不知道對方名字的間接協作,例如,透過共享訪問一個緩衝區進行鬆散式協作;也可以是雙方知道對方名字,直接透過通訊機制進行緊密協作。允許程序協同工作有利於共享資訊、有利於加快計算速度、有利於實現模組化程式設計。

    程序的同步(Synchronization)是解決程序間協作關係( 直接制約關係) 的手段。程序同步指兩個以上程序基於某個條件來協調它們的活動。一個程序的執行依賴於另一

    個協作程序的訊息或訊號,當一個程序沒有得到來自於另一個程序的訊息或訊號時則需等待,直到訊息或訊號到達才被喚醒。

    不難看出,程序互斥關係是一種特殊的程序同步關係,即逐次使用互斥共享資源,也是對程序使用資源次序上的一種協調。

  • 中秋節和大豐收的關聯?
  • 尋水的魚,歌詞?