程序間通訊方式(2)

2021-08-11 15:03:00 字數 1918 閱讀 9595

q:訊息佇列實質及運用?

a:訊息佇列就是乙個訊息的鍊錶,把訊息看作有特定格式和優先順序的記錄,該記錄包括訊息佇列鍵值,使用者

id,組

id,訊息佇列中訊息數目等,甚至可以包括對訊息佇列讀寫程序的

id。對於訊息有相應許可權的程序可以對訊息程序進行相應寫入和讀取操作

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

對於訊息佇列的操作有以下三種型別:1.開啟或建立訊息佇列;

2.讀寫操作;

3.獲得或設定訊息佇列屬性。

q:訊號燈概述及其應用?

a:訊號燈提供了對程序間共享資源訪問的控制機制,相當於記憶體中的標誌,程序據它判斷是否可以訪問某些共享資源,程序亦可修改訊號燈,訊號燈也可用於程序同步。訊號燈主要有以下兩種型別:

1.二值訊號燈(只能取0或者

1),類似於互斥鎖;兩者功能類似,但關注點不同,釋放條件也不同。

2.計算訊號燈(可以取任何非負值)。

對於訊號燈的操作包括三部分:1.開啟或建立訊號燈;

2.訊號燈值操作,包括對訊號燈的增減,對應共享資源的釋放和占用;

3.獲得或設定訊號燈屬性,每乙個訊號燈對應一條記錄。

q:共享記憶體方式的意義及優點?

a:兩個不同程序共享記憶體的意思就是,同乙個物理記憶體被對映到兩塊程序各自的程序位址空間,兩個程序皆可看到另外乙個記憶體對於共享記憶體中資料的更新。共享記憶體方式的實現需要借助於互斥鎖和訊號量等同步機制。其突出優點為效率高。

q:共享記憶體核心實現原理是什麼?

a:其原理類似於是編纂圖書的原理。當編寫某一頁內容

(struct indde/struct page)

時,先寫好其中的資訊,而後對其進行頁碼

標註,並將頁碼返回為某一條目錄資訊(

address_space

),並記錄在目錄頁(

page cache),

此時該頁面與目錄存在且僅僅存在唯一偏移量,呼叫

mmap()

隨手翻閱,並不能直接跳轉到該頁。之後將翻閱目錄,若存在該頁,即可從目錄處獲得其資訊,返回位址,進行查詢;若查詢不到位址,也就相當於該頁未修訂或者不存在,未修訂則加頁碼,寫入目錄頁;不存在則進行編撰,更新目錄頁。

q:mmap()及其相關系統呼叫?

a:呼叫

mmap

函式時相當於將該檔案取出並共享,通過不同的程序進行讀寫等操作。其用於共享記憶體的方式有以下兩種:

1.使用普通檔案提供的記憶體對映,該方法適用於任何程序之間; 2.

用特殊檔案提供匿名記憶體對映:適用於具有親緣關係的程序之間。

q:對mmap()

返回位址的訪問?

a:對於用

mmap()

來對映普通檔案而言,程序會在自己的位址空間新增一塊空間,空間的大小由

mmap()

的len

引數指定。程序也不一定能夠對全部新增空間都能進行有效訪問,程序能夠訪問的有效位址大小取決於檔案被對映部分的大小。

q:系統

v共享記憶體原理

?a:系統

v共享記憶體通過

shmget

獲得或建立乙個

ipc共享記憶體區域,並返回相應的識別符號。核心在

shnget

函式建立乙個共享記憶體區,初始化該共享記憶體區相應的

shmid_kernel

的同時,還將在特殊檔案系統

shm中,建立並開啟乙個同名檔案,並複製該檔案的內容。該同名檔案不屬於任何乙個程序。

shmid_kernel

是共享記憶體區中儲存管理和檔案系統結合起來的橋梁,該結構最重要的

shm_file

域將儲存被對映檔案的位址,每個共享記憶體區物件都對應

shm中的乙個檔案。

shm中的檔案不能用

read

(),write

()函式訪問,當其中檔案對映到程序位址空間後,可直接採用訪問記憶體空間的方式訪問。

程序間通訊方式總結(2)

管道,訊息佇列,共享記憶體,訊號量,socket,訊號,檔案鎖 匿名管道 命名管道 概念 在核心中申請一塊固定大小的緩衝區,程式擁有寫入和讀取的權利,沒有血緣關係的程序也可以程序間通訊。特點 1,面向位元組流,2,生命週期隨核心 3,自帶同步互斥機制。4,半雙工,單向通訊,兩個管道實現雙向通訊。概念...

程序間通訊方式

謝謝作者 用於程序間通訊 ipc 的四種不同技術 共享記憶體,臨界區,管道,訊息 1.訊息傳遞 管道,fifo,posix和system v訊息佇列 2.同步 互斥鎖,條件變數,讀寫鎖,檔案和記錄鎖,posix和system v訊號燈 3.共享記憶體區 匿名共享記憶體區,有名posix共享記憶體區,...

程序間通訊方式

遇到一考題,讓寫出程序間的通訊方式,突然給忘了,只想起管道和共享記憶體以及套接字。現在總結一下程序間的通訊方式以及他們之間的區別 1 管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。2 有名管道 named pip...