學習筆記 作業系統 Linux程序通訊之訊息佇列

2021-06-12 12:38:34 字數 1131 閱讀 4489

本文章參考了如下的內容:

訊息佇列就是乙個訊息的鍊錶。

可以把訊息看作乙個記錄,具有特定的格式以及特定的優先順序。

對訊息佇列有寫許可權的程序可以向中按照一定的規則新增新訊息;

對訊息佇列有讀許可權的程序則可以從訊息佇列中讀走訊息。

訊息佇列是隨核心持續的,

只有在核心重起或者顯示刪除乙個訊息佇列時,該訊息佇列才會真正被刪除。

所謂的隨核心持續,是指:一直持續到核心重新自舉或者顯示刪除該物件為止。如訊息佇列、訊號燈以及共享記憶體等;

系統中記錄訊息佇列的資料結構(struct ipc_ids msg_ids)位於核心中,系統中的所有訊息佇列都可以在結構msg_ids中找到訪問入口。

每個訊息佇列都有乙個佇列頭,用結構struct msg_queue來描述。佇列頭中包含了該訊息佇列的大量資訊,包括訊息佇列鍵值、使用者id、組id、訊息佇列中訊息數目等等,甚至記錄了最近對訊息佇列讀寫程序的id。讀者可以訪問這些資訊,也可以設定其中的某些資訊。

利用全域性資料結構 struct ipc_ids msg_ids 可以訪問到系統中的n個訊息佇列組ipcid[n],在ipcid中,有指向每個訊息佇列頭的第乙個成員:struct kern_ipc_perm;而每個struct kern_ipc_perm能夠與具體的訊息佇列對應起來是因為在該結構中,有乙個key_t型別成員key,而key則唯一確定乙個訊息佇列。kern_ipc_perm結構如下:

struct kern_ipc_perm
對訊息佇列的操作無非有下面三種型別:

1、 開啟或建立訊息佇列

訊息佇列的核心持續性要求每個訊息佇列都在系統範圍內對應唯一的鍵值,所以,要獲得乙個訊息佇列的描述字,只需提供該訊息佇列的鍵值即可;

注:訊息佇列描述字是由在系統範圍內唯一的鍵值生成的,而鍵值可以看作對應系統內的一條路經。

2、 讀寫操作

訊息讀寫操作非常簡單.

3、 獲得或設定訊息佇列屬性:

訊息佇列的資訊基本上都儲存在訊息佇列頭中,因此,可以分配乙個類似於訊息佇列頭的結構(struct msqid_ds),來返回訊息佇列的屬性;同樣可以設定該資料結構。

作業系統學習筆記 程序通訊

程序通訊是指程序之間的資訊交換。交換的資訊量包括乙個狀態或數值 訊號量,低階通訊 或上千個位元組 高階通訊 低階通訊 程序的互斥和同步 交換的資訊量 即訊號量 較少 高階通訊 指使用者可直接利用os提供的一組通訊命令 不需要自己編寫命令 高效地傳送大量資料的一種通訊方式。對使用者透明。使用者不需要考...

作業系統學習筆記(三) 程序

一 程序環境 c程式儲存空間布局 正文段 唯讀 存放cpu執行的機器指令,可共享 資料段 也叫初始化資料段。包含程式中需要明確賦值的變數,如 int max 99 bss段 也叫未初始化的資料段,在程式開始執行前,核心將此段中資料初始化為0或空指標,如long sum 100 棧 存放自動變數 即區...

Linux作業系統筆記

windows10下安裝ubuntu子系統 win10下安裝ubuntu vscode windows10系統下的wsl ubuntu圖形桌面配置 linux終端輸出控制 c指令 linux系統中的vim管理 linux系統操作 小測試 linux系統中的vsftpd服務 linux系統的lvm邏輯...