多行程 Process 間的協調與通訊機制

更新於 發佈於 閱讀時間約 6 分鐘

前一篇講了CPU 調度的方式,跟如何排程,這篇繼續寫 Process 間如何互相通訊,跟如果有很多 Process 之間如何運作。

CPU 調度與排程策略(CPU Scheduling)

目標:處理多個應用程式的競爭與協作

Interprocess Communication(IPC, 行程間通訊)

當多個行程需要共享資料或彼此通訊時,作業系統會提供各種方法來進行協作。這邊我看英文版有點難懂,所以加上一些比喻,應該會容易懂一些。

Inter Process Communication (IPC)

比喻:學校專題報告小組合作

假設你和幾個同學組成一個專題小組,需要一起完成報告。

  1. 訊息佇列 (Message Queue)
    • 你們透過 記事本留言區 傳遞訊息。例如,小組長貼了一個「今天要完成資料收集」的訊息,其他人按順序查看、完成並回報。
    • 重點:訊息按順序排隊,每個人按順序取用。
  2. 共享記憶體 (Shared Memory)
    • 你們共用一個 線上雲端文件 (Google 文件),所有組員都能同時查看和編輯內容。無論誰更新,其他人都能即時看到最新的資料。
    • 重點:所有人能同時存取和更改相同的資料空間。
  3. 管道 (Pipes)
    • 假設每位組員之間都有 Line 聊天室好友,可以一對一地討論。這個管道是專屬的,別人無法參與或偷聽。
    • 重點:兩個行程之間的直接溝通。
  4. 信號 (Signals)
    • 小組長完成報告後,按下 群組通知按鈕 (例如群組LINE通知) tag 所有人,「報告完成,準備交件!」。
    • 重點:即時廣播給所有相關人員,通常用來發送重要或緊急訊息。

Race Condition (競爭條件)、Critical Section (臨界區)、Dekker's Algorithm (德克演算法)

Race Conditions and How to Prevent Them - A Look at Dekker's Algorithm

比喻:多人同時對一張照片按讚

想像一張熱門照片,很多人同時對它按讚。如果系統沒有處理好,就可能發生競爭條件,導致按讚數錯誤。


1. Race Condition (競爭條件)

當多個使用者同時按下「讚」,伺服器需要更新按讚數。如果沒有適當的同步機制,可能出現以下狀況:

  • 使用者 A 按讚,伺服器讀到「目前按讚數是 3」,準備加 1。
  • 同時 使用者 B 也按讚,伺服器也讀到「目前按讚數是 3」,準備加 1。

理論上,按讚數應該是 5,但由於兩個請求同時進行,兩人都認為目前的按讚數是 3,最後結果只變成 4。

關鍵問題: 這就是競爭條件,因為伺服器同時處理了兩個請求,卻沒有正確同步,導致按讚數錯誤。


2. Critical Section (臨界區)

為了避免這種情況,設定了臨界區,一次只能有一個人( process )進入伺服器,進入後必須執行一段「讀取目前讚數,+1,更新讚數」的程式碼。

如何解決?

  • 當伺服器發現某個使用者正在更新按讚數時,必須暫時鎖住這個區域,直到處理完成。其他使用者只能 排隊等候,不能同時進入。
指針指到才可以進入

指針指到才可以進入


3. Dekker's Algorithm (德克演算法)

如果同時有兩個人想要進入 critical section,如何讓對方知道呢?

  • 兩個使用者想按讚:
    • 每個人先「按警示燈」,看看伺服器是否有人在更新。(我個人覺得很像地下停車場上下樓層的警示燈)
    • 如果有人在更新,另一個人必須等待。
    • 如果兩個人同時按警示燈,伺服器會 交替 允許其中一個人進行,另一個人下次再試,確保每個請求都會被處理到。
raw-image



作業系統 Deadlock影片 這個3分鐘影片很有趣~

Deadlock 與形成的四個條件

當多個行程互相等待彼此釋放資源,卻沒有一方能繼續執行時,就會發生 Deadlock (死結),系統因此停滯不前。

比喻:

想像兩輛車在狹窄巷道中相遇:

  • A 車想前進,但前面被 B 車擋住。
  • B 車也想前進,但前面被 A 車擋住。
    結果兩輛車都無法動彈,形成「死結」。

形成死結的四個必要條件

  1. 互斥 (Mutual Exclusion)
    • 資源只能由一個行程使用。
    • 比喻: 巷道只能容納一輛車通過。
  2. 占有與等待 (Hold and Wait)
    • 一個行程已占有資源,卻仍在等待其他資源。
    • 比喻: A 車已經在巷道內,卻還想進一步前進。
    • 用影片槍跟子彈的比喻,雙方都需要對方手上的資源。
  3. 不剝奪 (No Preemption)
    • 資源無法強制收回,必須由行程自願釋放。
    • 比喻: A 車和 B 車都不願意倒車。
  4. 循環等待 (Circular Wait)
    • 多個行程間形成循環等待鏈。
    • 比喻: A 車等 B 車讓路,而 B 車等 A 車讓路,形成無限等待。

解決死結的方法

  1. 死結預防 (Deadlock Prevention)
    • 設計時避免同時滿足所有死結條件。例如:資源分配時設定固定順序。
  2. 死結避免 (Deadlock Avoidance)
    • 根據程式的需求進行動態資源分配,確保系統永遠不進入死結狀態。
  3. 死結偵測與回復 (Deadlock Detection and Recovery)
    • 系統不主動避免死結,但可偵測到後強制回收資源或中止程式。
  4. 資源分配協議 (Resource Allocation Protocol)
    • 設定系統資源分配規則,避免循環等待。





留言
avatar-img
留言分享你的想法!
avatar-img
越南放大鏡 X 下班資工系
36會員
86內容數
雙重身份:越南放大鏡 X 下班資工系 政大東南亞語言學系是我接觸越南語的起點,畢業後找越南外派工作的生活跟資訊時,發現幾乎都是清單式的分享,很難身歷其境。所以我希望「越南放大鏡」可以帶讀者看到更多細節和深入的觀察。 - 下班資工系則是自學資工系的課程內容,記錄實際操作的過程,學習理論的過程。希望可以跟讀者一起成長。
2025/04/24
本系列文章將循序漸進地介紹 JavaScript 的核心概念,從基礎語法到進階應用,例如非同步程式設計和 React 基礎。內容淺顯易懂,並使用生活化的比喻幫助讀者理解,搭配程式碼範例,適合 JavaScript 初學者學習。
Thumbnail
2025/04/24
本系列文章將循序漸進地介紹 JavaScript 的核心概念,從基礎語法到進階應用,例如非同步程式設計和 React 基礎。內容淺顯易懂,並使用生活化的比喻幫助讀者理解,搭配程式碼範例,適合 JavaScript 初學者學習。
Thumbnail
2025/04/21
本文介紹行動通訊網路的演進歷史,從1G到5G,並說明ITU與3GPP在制定通訊規格上的重要角色,以及5G的三大關鍵應用場景:URLLC、eMBB和mMTC。
Thumbnail
2025/04/21
本文介紹行動通訊網路的演進歷史,從1G到5G,並說明ITU與3GPP在制定通訊規格上的重要角色,以及5G的三大關鍵應用場景:URLLC、eMBB和mMTC。
Thumbnail
2025/04/11
這篇文章說明網路的七層模型、IP 位址、通訊埠、TCP/UDP 協定、HTTP 協定、HTTP 狀態碼以及 WebSocket,並解釋它們之間的關係與互動方式。文中包含許多圖表和範例,幫助讀者理解這些網路概念。
Thumbnail
2025/04/11
這篇文章說明網路的七層模型、IP 位址、通訊埠、TCP/UDP 協定、HTTP 協定、HTTP 狀態碼以及 WebSocket,並解釋它們之間的關係與互動方式。文中包含許多圖表和範例,幫助讀者理解這些網路概念。
Thumbnail
看更多
你可能也想看
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
給定兩個輸入整數陣列, 若在兩個陣列遇到相同的數字可以連成一線, 但是有規定連線不可和別的連線有交叉, 請問最多可以形成幾條連線? 解答中探討了演算法化簡的技巧和DP模型, 可以透過演算法化簡的技巧, 把這題映射到原本已經學會的Longest Common Subsequence的DP模型來解開。
Thumbnail
給定兩個輸入整數陣列, 若在兩個陣列遇到相同的數字可以連成一線, 但是有規定連線不可和別的連線有交叉, 請問最多可以形成幾條連線? 解答中探討了演算法化簡的技巧和DP模型, 可以透過演算法化簡的技巧, 把這題映射到原本已經學會的Longest Common Subsequence的DP模型來解開。
Thumbnail
複習一下: 我們學習了關於撰寫程式的相關觀念 條件分支(if/else) : 藉由條件分支讓程式執行相對應的功能。 迴圈(while loop ) :程式利用迴圈反覆執行某個區塊的程式碼。 字串處理 (string) : 每個程式都在處理資料,而字串是一種非常重要且常用的資料。 函式(fu
Thumbnail
複習一下: 我們學習了關於撰寫程式的相關觀念 條件分支(if/else) : 藉由條件分支讓程式執行相對應的功能。 迴圈(while loop ) :程式利用迴圈反覆執行某個區塊的程式碼。 字串處理 (string) : 每個程式都在處理資料,而字串是一種非常重要且常用的資料。 函式(fu
Thumbnail
這題算是路徑計數類的DP衍伸題(路徑數、方法數、組合數...等等這種枚舉類的題目,第一時間切入除了想到DFS+回溯法之外,也可以留意DP動態規劃解題的可能性) 題目會給我們一個指定長度為arrLen的陣列,起點從index=0開始出發,每次移動可以往左移一格,往右移一格,或是留在原地不
Thumbnail
這題算是路徑計數類的DP衍伸題(路徑數、方法數、組合數...等等這種枚舉類的題目,第一時間切入除了想到DFS+回溯法之外,也可以留意DP動態規劃解題的可能性) 題目會給我們一個指定長度為arrLen的陣列,起點從index=0開始出發,每次移動可以往左移一格,往右移一格,或是留在原地不
Thumbnail
題目敘述 這題是一個經典的資料結構實作題,要求我們實作指定長度為k的環狀佇列。 請記得,佇列最重要的特質就是先進先出 First In First Out 又簡稱為 FIFO
Thumbnail
題目敘述 這題是一個經典的資料結構實作題,要求我們實作指定長度為k的環狀佇列。 請記得,佇列最重要的特質就是先進先出 First In First Out 又簡稱為 FIFO
Thumbnail
程式建立thread,然後會交給硬體中的scheduler去排定執行、切換資源 我們無法強制指定順序,因為電腦有太多任務需要執行,但資源有限,因此會由scheduler去分配、切換資源 電腦能同時執行多項任務
Thumbnail
程式建立thread,然後會交給硬體中的scheduler去排定執行、切換資源 我們無法強制指定順序,因為電腦有太多任務需要執行,但資源有限,因此會由scheduler去分配、切換資源 電腦能同時執行多項任務
Thumbnail
如同這個Dynamic programming 深入淺出系列的開始, 在經過比較簡單的入門題(Coin Change)之後, 來看比較進階的二維DP題目Unique Path
Thumbnail
如同這個Dynamic programming 深入淺出系列的開始, 在經過比較簡單的入門題(Coin Change)之後, 來看比較進階的二維DP題目Unique Path
Thumbnail
什麼是迴圈?就是不停地、不斷地在做同樣的事,所以才稱「重複性迴圈」,因為一直再輪迴,那麼像上一篇的例子,不到60分就要一直補考是要怎麼用呢?重複性迴圈主要有for迴圈、while迴圈、do...while迴圈,有何不一樣?接下來就來介紹一下它們? 一、for迴圈 這一個會運用到初始值、繼續執行的條件
Thumbnail
什麼是迴圈?就是不停地、不斷地在做同樣的事,所以才稱「重複性迴圈」,因為一直再輪迴,那麼像上一篇的例子,不到60分就要一直補考是要怎麼用呢?重複性迴圈主要有for迴圈、while迴圈、do...while迴圈,有何不一樣?接下來就來介紹一下它們? 一、for迴圈 這一個會運用到初始值、繼續執行的條件
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News