Linux系統 liunx程序通訊方式

2021-09-29 08:41:44 字數 1762 閱讀 7961

liunx六大程序間通訊方式

???管道,訊息佇列,共享記憶體,訊號量,socket,訊號,檔案鎖

1,管道

1,匿名管道:

概念:在核心中申請一塊固定大小的緩衝區,程式擁有寫入和讀取的權利,一般使用fork函式實現父子程序的通訊。

2,命名管道 fifo

3,特點:

1,面向位元組流,

2,生命週期隨核心

3,自帶同步互斥機制。

4,半雙工,單向通訊,兩個管道實現雙向通訊。

2,訊息佇列

1,概念:在核心中建立一佇列,佇列中每個元素是乙個資料報,不同的程序可以通過控制代碼去訪問這個佇列。

訊息佇列提供了⼀個從⼀個程序向另外⼀個程序傳送⼀塊資料的⽅法。

每個資料塊都被認為是有⼀個型別,接收者程序接收的資料塊可以有不同的型別值

訊息佇列也有管道⼀樣的不⾜,就是每個訊息的最⼤⻓度是有上限的(msgmax),

每個訊息隊 列的總的位元組數是有上限的(msgmnb),系統上訊息佇列的總數也有⼀個上限(msgmni)

2,特點:

1, 訊息佇列可以認為是乙個全域性的乙個鍊錶,鍊錶節點鐘存放著資料報的型別和內容,有訊息佇列的識別符號進行標記。

2,訊息佇列允許乙個或多個程序寫入或者讀取訊息。

3,訊息佇列的生命週期隨核心。

4,訊息佇列可實現雙向通訊。

3,訊號量

1,概念

在核心中建立乙個訊號量集合(本質是個陣列),陣列的元素(訊號量)都是1,使用p操作進行-1,使用v操作+1,

(1) p(sv):如果sv的值⼤大於零,就給它減1;如果它的值為零,就掛起該程序的執⾏ 。

(2) v(sv):如果有其他程序因等待sv而被掛起,就讓它恢復運⾏,如果沒有程序因等待sv⽽掛起,就給它加1。

1,概念:

將同一塊物理記憶體一塊對映到不同的程序的虛擬位址空間中,實現不同程序間對同一資源的共享。

共享記憶體可以說是最有用的程序間通訊方式,也是最快的ipc形式。

2,特點:

1,不用從使用者態到核心態的頻繁切換和拷貝資料,直接從記憶體中讀取就可以。

2,共享記憶體是臨界資源,所以需要操作時必須要保證原子性。使用訊號量或者互斥鎖都可以。

3,生命週期隨核心。

5,總結

所有的以上的方式都是生命週期隨核心,不手動釋就不會消失。

此處引用程序間的五種通訊方式介紹

1.管道:速度慢,容量有限,只有父子程序能通訊

2.fifo:任何程序間都能通訊,但速度慢

4.訊號量:不能傳遞復雜訊息,只能用來同步

5.共享記憶體區:能夠很容易控制容量,速度快,但要保持同步,比如乙個程序在寫的時候,另乙個程序要注意讀寫的問題,相當於執行緒中的執行緒安全,當然,共享記憶體區同樣可以用作執行緒間通訊,不過沒這個必要,執行緒間本來就已經共享了同一程序內的一塊記憶體

liunx程序管理

程序是已啟動的可執行程式的執行中例項。proc目錄下以數字為名的目錄,每乙個目錄代表乙個程序,儲存著程序的屬性資訊。每乙個程序的pid是唯一的,就算程序退出了,其它程序也不會占用其pid。程序是已啟動的可執行程式的執行中例項。proc目錄下以數字為名的目錄,每乙個目錄代表乙個程序,儲存著程序的屬性資...

Liunx 程序命令

ps命令作用 檢視靜態的程序統計資訊 例 ps aux 程序常用選項 a 顯示當前終端下的所有程序資訊。u 顯示以使用者為主的格式顯示程序資訊。x 顯示當前使用者在所有終端下的程序信。e 顯示系統內的所有程序資訊。l 使用長格式顯示程序資訊。f 使用完整格式顯示程序資訊。例 ps aux 命令 ps...

Liunx下程序概念

程序,程式的乙個執行例項,正在執行的程式 描述程序的是pcb process control block 程序控制塊,本質是個結構體 其中包含記憶體指標 程式的 和資料記憶體的什麼地方 程式計數器 上下文資料 即將執行的指令 識別符號pid 程序id 程序狀態,程序優先順序,記賬資訊 io資訊 檔案...