實驗六 進程間通信-共享存儲區(qū)

實驗六 進程間通信-共享存儲區(qū)

ID:12330684

大?。?7.00 KB

頁數(shù):5頁

時間:2018-07-16

實驗六 進程間通信-共享存儲區(qū)_第1頁
實驗六 進程間通信-共享存儲區(qū)_第2頁
實驗六 進程間通信-共享存儲區(qū)_第3頁
實驗六 進程間通信-共享存儲區(qū)_第4頁
實驗六 進程間通信-共享存儲區(qū)_第5頁
資源描述:

《實驗六 進程間通信-共享存儲區(qū)》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。

1、實驗六進程間通信―共享存儲區(qū)的創(chuàng)建、附接和斷接實驗目的了解和熟悉共享存儲機制實驗內(nèi)容編制一長度為1k的共享存儲區(qū)發(fā)送和接收的程序。程序設計(1)為了便于操作和觀察結果,用一個程序作為“引子”,先后fork()兩個子進程,SERVER和CLIENT,進行通信。(2)SERVER端建立一個key為75的共享區(qū),并將第一個字節(jié)設置為-1,。作為數(shù)據(jù)空的標志。等待其他進程發(fā)來的消息。當字節(jié)的值發(fā)生變化時,表示收到了信息,進行處理。然后再次把它的值設為-1。如果遇到的值為0,則視為結束信號,取消該隊列,并退出S

2、ERVER。SERVER每接收到一個數(shù)據(jù)后顯示“(server)receive”。(3)CLIENT端建立一個key為75的共享區(qū),當共享取得第一個字節(jié)為-1時,Server端空閑,可發(fā)送請求。CLIENT隨即填入9到0。期間等待server端的再次空閑。進行完這些操作后,CLIENT退出。CLIENT每發(fā)出一次數(shù)據(jù)后顯示“(client)sent”。(4)父進程在SERVER和CLIENT均退出后結束。實驗指導一、共享存儲區(qū)1、共享存儲區(qū)機制的概念共享存儲區(qū)(ShareMemory)是UNIX系統(tǒng)中

3、通信速度最高的一種通信機制。該機制可使若干進程共享主存中的某一個區(qū)域,且使該區(qū)域出現(xiàn)(映射)在多個進程的虛地址空間中。另一方面,一個進程的虛地址空間中又可連接多個共享存儲區(qū),每個共享存儲區(qū)都有自己的名字。當進程間欲利用共享存儲區(qū)進行通信時,必須先在主存中建立一共享存儲區(qū),然后將它附接到自己的虛地址空間上。此后,進程對該區(qū)的訪問操作,與對其虛地址空間的其它部分的操作完全相同。進程之間便可通過對共享存儲區(qū)中數(shù)據(jù)的讀、寫來進行直接通信。圖示列出二個進程通過共享一個共享存儲區(qū)來進行通信的例子。其中,進程A將建

4、立的共享存儲區(qū)附接到自己的AA’區(qū)域,進程B將它附接到自己的BB’區(qū)進程A的虛空間內(nèi)存空間進程B的虛空間正文數(shù)據(jù)棧共享存儲區(qū)正文數(shù)據(jù)BB’棧AA’應當指出,共享存儲區(qū)機制只為進程提供了用于實現(xiàn)通信的共享存儲區(qū)和對共享存儲區(qū)進行操作的手段,然而并未提供對該區(qū)進行互斥訪問及進程同步的措施。因而當用戶需要使用該機制時,必須自己設置同步和互斥措施才能保證實現(xiàn)正確的通信。二、涉及的系統(tǒng)調(diào)用1、shmget()創(chuàng)建、獲得一個共享存儲區(qū)。系統(tǒng)調(diào)用格式:shmid=shmget(key,size,flag)該函數(shù)使用

5、頭文件如下:#include#include#include參數(shù)定義intshmget(key,size,flag);key_tkey;intsize,flag;其中,key是共享存儲區(qū)的名字;size是其大?。ㄒ宰止?jié)計);flag是用戶設置的標志,如IPC_CREAT。IPC_CREAT表示若系統(tǒng)中尚無指名的共享存儲區(qū),則由核心建立一個共享存儲區(qū);若系統(tǒng)中已有共享存儲區(qū),便忽略IPC_CREAT。附:操作允許權八進制數(shù)用戶可讀00

6、400用戶可寫00200小組可讀00040小組可寫00020其它可讀00004其它可寫00002控制命令值IPC_CREAT0001000IPC_EXCL0002000例:shmid=shmget(key,size,(IPC_CREAT

7、0400))創(chuàng)建一個關鍵字為key,長度為size的共享存儲區(qū)2、shmat()共享存儲區(qū)的附接。從邏輯上將一個共享存儲區(qū)附接到進程的虛擬地址空間上。系統(tǒng)調(diào)用格式:virtaddr=shmat(shmid,addr,flag)該函數(shù)使用頭文件如下:#include

8、ys/types.h>#include#include參數(shù)定義char*shmat(shmid,addr,flag);intshmid,flag;char*addr;其中,shmid是共享存儲區(qū)的標識符;addr是用戶給定的,將共享存儲區(qū)附接到進程的虛地址空間;flag規(guī)定共享存儲區(qū)的讀、寫權限,以及系統(tǒng)是否應對用戶規(guī)定的地址做舍入操作。其值為SHM_RDONLY時,表示只能讀;其值為0時,表示可讀、可寫;其值為SHM_RND(取整)時,表示操作系統(tǒng)在必要時

9、舍去這個地址。該系統(tǒng)調(diào)用的返回值是共享存儲區(qū)所附接到的進程虛地址viraddr。3、shmdt()把一個共享存儲區(qū)從指定進程的虛地址空間斷開。系統(tǒng)調(diào)用格式:shmdt(addr)該函數(shù)使用頭文件如下:#include#include#include參數(shù)定義intshmdt(addr);charaddr;其中,addr是要斷開連接的虛地址,亦即以前由連接的系統(tǒng)調(diào)用shmat()所返回的虛

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。