常用通訊模型:
間接-通過作業系統核心
直接阻塞,被認為是同步的
非阻塞,被認為是非同步的
接收到訊號可能:類似軟中斷,停止正常執行。
不適合傳遞資料:因為它傳遞的資訊很小,只是一位。僅起到通知作用。效率高。
系統處理過程:
註冊針對某個訊號的handler
一旦產生了訊號,作業系統收到訊號後,執行在核心態,響應訊號程序的時候,返回去的那個點要呼叫訊號處理函式。(通過修改應用程式的堆疊棧幀,那麼應用程式往下執行會去執行訊號處理函式)
目標:資料交換
terminal指令含義:ls | more
建立兩個子程序ls more(均為shell的子程序)
同時共享程序的資源(檔案)buffer
同時做了一些設定,使得ls的輸出是buffer,more的輸入是buffer。shell讓作業系統完成的。
建好管道以後,|的功能就完成了。
然後shell讓ls 和 more去執行。
注意:管道大小是有限的,ls發現管道填滿會sleep,more發現管道空了會sleep。
與管道區別:
管道是由父程序為子程序建立的管道pipe,如果沒有父子關係,管道就沒法工作了。
管道裡面的資料是位元組流,不是結構化的東西。
訊息佇列可以實現多個不相干的程序通過佇列傳遞資料,可能一頭乙個或多個send、receive,他們沒有父子關係。
send、receive可以結構化的資料,使得編寫複雜程式更加靈活方便,不用傳遞沒有意義的位元組流,還得做解析;傳的就是有意義的資料結構。
相同點:
佇列大小是有限的,滿或空也會出現sleep阻塞的情況。
管道、訊息佇列都是間接通訊
共享記憶體是直接通訊,不需要send、receive操作,直接讀寫記憶體。最快,資料量最大。
共享那塊記憶體如何實現:
通過記憶體管理,同一塊兒物理記憶體對映到不同的程序的相同或者不同的位址空間裡面去。對映好以後,通過虛位址訪問不同程序的共享記憶體的虛位址時候,其實訪問的是同一塊物理記憶體的位址空間。需要記憶體管理支援(頁表)。
涉及到網路原理課、
socket、tcpip協議棧目前都實現在核心態
作業系統 程序通訊
競爭條件 兩個或多個程序讀寫某些共享資料,而最後的結果取決於程序執行的精確時序,稱為競爭條件。凡涉及到資源的共享時就容易發生這樣的事情。解決的辦法是設立臨界區,讓程序互斥地訪問共享資源。乙個好的避免競爭條件的方案,必須滿足4個條件 任何兩個程序不能同時處於臨界區。不應對cpu的速度和數量做任何假設。...
作業系統 程序通訊
學生實驗報告 實驗課名稱 計算機作業系統 實驗專案名稱 程序間通訊實驗 專業名稱 電腦科學與技術 一 實驗目的 linux系統的程序通訊機構 ipc 允許在任意程序間大批量地交換資料。本實驗的目的是了解和熟悉linux支援的訊息通訊機制 共享儲存區機制及資訊量機制。二 實驗要求 閱讀linux系統的...
作業系統 程序通訊
程序通訊 程序之間的資訊交換 程序是分配系統資源的單位 包括記憶體位址空間 因此各程序擁有的記憶體位址空間相互獨立 共享儲存 1 兩個程序對共享空間的訪問必須是互斥的 2 基於資料結構的共享,慢是低階通訊 3 基於儲存區的共享,高階通訊,在記憶體中畫出一塊共享儲存區,資料形式儲存位置都由程序控制 訊...