程序間通訊(IPC) 程序加鎖解鎖

2021-07-05 14:05:30 字數 1425 閱讀 8373

(本是對 source insight 工具開啟的系統呼叫所涉及函式的截圖,過大,建議使用 在「在新標籤頁中開啟」)

對上面兩張圖的分析(analysis):(上圖中的緩衝區 or 訊息傳送佇列,程序間通訊可能用到,也可能用不到)

對sys_printx函式的分析(analysis):

以下有5副,第一幅是重中之重,給出了 加鎖和解鎖函式的定義,以及程序切換函式 schedule, 建議在分析的時候,把後4副和 第1 副做對照,效果更好。

4.1)程序加鎖 在何時發生?(block)(這裡p->p_flags 置!0 是關鍵)

case2) 在msg_receive 函式中:如果沒有任何程序向 當前程序傳送訊息的話,當前程序會阻塞,直到有程序傳送訊息給當前程序;【舉個荔枝:在本例中,當前程序是個系統程序 task_sys,所以這樣的話,整個系統會停止運轉;】

阻塞(加鎖)過程解析:由於p_who_wanna_recv->p_flags |= receiving (參見上圖**),顯然p_who_wanna_recv->p_flags不等於零,不會進入assert 函式,直接進入 schedule()進行程序切換,顯然 schedule 將cpu控制權切換到那些 p_flags == 0 的程序手裡面;也即是只要p->p_flags !=0 ,那麼該程序p 就永遠也無法進行程序切換,獲得cpu控制權(此謂阻塞)

4.2)程序解鎖在何時發生?(unblock)(這裡p->p_flags 置0 是關鍵)

程序間通訊IPC

這兩天學習了 unix 的程序間通訊 ipc,這裡面有幾個很重要的基本概念,特別是訊息佇列和我的畢設很有關係,因此多說幾句。以前學習的程序間通訊方式,一般都是經由 fork 或exec 開啟檔案,或經過檔案系統。而 ipc是程序間通訊方式的統稱。下面一一道來。一 管道 管道是最老的 ipc形式。管道...

程序間通訊 IPC

part2 index1.html part2 index2.html linux至少支援如下ipc機制 同時支援posix和system v方式 streams ipc機制,linux本身不支援,有乙個單獨的安裝包 可以跨pc的程序通訊 互斥鎖或條件變數 動態初始化 不能使靜態分配 在共享記憶體中...

程序間通訊IPC

乙個大型的應用系統,往往需要眾多程序協作,程序間通訊的重要性顯而易見。首先,程序間通訊至少可以通過傳送開啟檔案來實現,不同的程序通過乙個或多個檔案來傳遞資訊,事實上,在很多應用系統裡,都使用了這種方法。但一般說來,程序間通訊 ipc interprocess communication 不包括這種似...