作業系統中的程序通訊
在作業系統中併發執行的程序可以是獨立程序或合作程序。如果一個程序不能影響或被系統中執行的其他程序影響,則稱該程序為獨立程序。因此,任何不與任何其他程序共享任何資料的程序都是獨立的。如果一個程序可以影響或被系統中執行的其他程序影響,則稱該程序為合作程序。因此,很明顯,任何與其他程序共享其資料的程序都是合作程序。
提供允許程序合作的環境有很多原因:
資訊共享 - 由於多個使用者可能對同一資訊感興趣(例如,共享檔案),因此我們必須提供一個環境來允許併發訪問此類資訊。
計算加速 - 如果我們希望某個特定任務執行得更快,則必須將其分解成子任務,每個子任務將與其他子任務並行執行。
模組化 - 我們可以以模組化的方式構建系統,將系統功能劃分為單獨的程序或執行緒。
便利性 - 即使是單個使用者也可以同時處理許多工,例如使用者可以同時編輯、聽音樂和編譯。
合作程序需要一個程序間通訊 (IPC) 機制,允許它們交換資料和資訊。存在兩種基本的程序間通訊模型:共享記憶體和訊息傳遞。在共享記憶體模型中,建立了由合作程序共享的記憶體區域。
然後,程序可以透過讀取和寫入共享區域中的資料來交換資訊。在訊息傳遞模型中,通訊透過合作程序之間交換的訊息進行。下圖對比了這兩種通訊模型。上面提到的兩種模型在作業系統中都很常見,許多系統都實現了這兩種模型。訊息傳遞對於交換少量資料很有必要,因為無需避免衝突。它也比共享記憶體更容易在分散式系統中實現。一旦共享記憶體被初始化,所有訪問都被視為常規記憶體訪問,並且不需要核心的幫助。它存在快取一致性問題,這些問題是由於共享資料在多個快取之間遷移而產生的。隨著系統上處理核心的數量增加,我們可能會看到訊息傳遞成為 IPC 的首選機制。
圖:通訊模型
廣告