共享內(nèi)存和信號(hào)量(進(jìn)程間通信)

共享內(nèi)存和信號(hào)量(進(jìn)程間通信)

ID:34742081

大小:121.18 KB

頁數(shù):10頁

時(shí)間:2019-03-10

共享內(nèi)存和信號(hào)量(進(jìn)程間通信)_第1頁
共享內(nèi)存和信號(hào)量(進(jìn)程間通信)_第2頁
共享內(nèi)存和信號(hào)量(進(jìn)程間通信)_第3頁
共享內(nèi)存和信號(hào)量(進(jìn)程間通信)_第4頁
共享內(nèi)存和信號(hào)量(進(jìn)程間通信)_第5頁
資源描述:

《共享內(nèi)存和信號(hào)量(進(jìn)程間通信)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、實(shí)驗(yàn)7共享內(nèi)存和信號(hào)量(進(jìn)程間通信)邢衛(wèi)2008-11-26修訂實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)并掌握Linux系統(tǒng)中的進(jìn)程間通信機(jī)制,包括共享內(nèi)存和信號(hào)量。實(shí)驗(yàn)內(nèi)容1.學(xué)習(xí)共享內(nèi)存相關(guān)的系統(tǒng)調(diào)用shmget(),shmat(),shmdt,shmctl()2.學(xué)習(xí)信號(hào)量(semaphore)相關(guān)的系統(tǒng)調(diào)用semget(),semop(),semctl()3.學(xué)習(xí)信號(hào)(signal)相關(guān)的系統(tǒng)調(diào)用signal(),atexit()等4.完成《邊干邊學(xué)》第6.4.1節(jié)的實(shí)驗(yàn)程序的編輯、編譯、運(yùn)行操作5.分析、學(xué)習(xí)實(shí)驗(yàn)程序的工作過程和原理6.選做:學(xué)習(xí)《邊干邊學(xué)》第6章,結(jié)合

2、使用聯(lián)機(jī)手冊(cè)(可以從man2ipc命令開始),編程練習(xí)各種進(jìn)程間通信機(jī)制實(shí)驗(yàn)步驟1.以stu帳號(hào)登錄2.編輯reader_writer1.c程序注意:在193頁delete()函數(shù)中,注意改成if(mysemctl(Semid,0,IPC_RMID,(unionsemun)0)==-1){限于實(shí)驗(yàn)的時(shí)間,該文件已預(yù)先存放在/home/stu/.kernel/lab6目錄下,可以直接使用。但每位同學(xué)務(wù)必通讀并理解該程序。登錄后,使用cd.kernel/lab6命令進(jìn)入該文件所在目錄,繼續(xù)以下實(shí)驗(yàn)步驟。3.編譯gccreader_writer1.c-ore

3、ader_writer14.運(yùn)行./reader_writer1注意記錄下共享內(nèi)存的id號(hào)5.使用Alt+F2切換到第2個(gè)登錄窗口,再次以stu帳號(hào)登錄可以使用who命令查看驗(yàn)證此時(shí)有兩個(gè)stu用戶已登錄可以使用ps–l命令查看這兩個(gè)stu用戶的進(jìn)程6.在第2個(gè)stu用戶窗口中,輸入./reader_writer1共享內(nèi)存的id號(hào)注意:此時(shí),第2個(gè)stu用戶窗口中的進(jìn)程擔(dān)當(dāng)writer角色,第1個(gè)stu用戶窗口中的進(jìn)程擔(dān)當(dāng)reader角色。7.在第2個(gè)窗口中,多次輸入信息;使用Alt+F1和Alt+F2在兩個(gè)窗口間切換,觀察你對(duì)writer的輸入,wr

4、iter已經(jīng)通過共享內(nèi)存?zhèn)鬟f給了reader。8.此時(shí),你還可以使用Alt+F3切換到第3個(gè)登錄窗口,并以stu帳號(hào)登錄可以使用who命令驗(yàn)證有3個(gè)stu用戶登錄;可以經(jīng)常性使用ps–l命令來查看另外兩個(gè)窗口中的進(jìn)程的狀態(tài)9.切換到writer窗口(第2個(gè)窗口),通過對(duì)writer的問題回答“2”,退出writer。切換到reader窗口(第1個(gè)窗口),通過Ctrl+C終止reader進(jìn)程。思考題1.同樣的源程序,reader和writer進(jìn)程是怎樣各自找到自己的定位的?2.reader和writer是怎樣通過信號(hào)量(semphore)實(shí)現(xiàn)同步的?wr

5、iter是如何得知這一對(duì)信號(hào)量的id的?3.數(shù)據(jù)是如何從writer傳遞到reader的?4.writer是如何得知共享內(nèi)存的id的?5.在reader中,是如何捕獲Ctrl-C信號(hào)(signal)的?捕獲后是如何處理的?6.一般來說,在Linux中使用共享內(nèi)存(sharedmemory)的流程應(yīng)該怎樣?使用哪些系統(tǒng)調(diào)用?7.一般來說,在Linux中使用信號(hào)量(semaphore)的流程應(yīng)該怎樣?使用哪些系統(tǒng)調(diào)用?8.這里的共享內(nèi)存,和使用帶CLONE_VM標(biāo)志的clone()系統(tǒng)調(diào)用創(chuàng)建的兩個(gè)task之間共享的內(nèi)存,有什么異同?參考資料l《邊干邊學(xué)》

6、(第1版)第6章,“共享內(nèi)存”n具體源程序和實(shí)驗(yàn)操作詳見6.4.1節(jié)附錄1共享內(nèi)存的使用共享內(nèi)存共有4個(gè)系統(tǒng)調(diào)用:shmget,shmat,shmdt,shmctlintshmget(key_tkey,intsize,intshmflg);典型的創(chuàng)建共享內(nèi)存的用法lshmid=shmget(key,size,IPC_CREAT

7、IPC_EXCL

8、mode);lshmid=shmget(IPC_PRIVATE,size,mode);void*shmat(intshmid,constvoid*shmaddr,intshmflg);典型用法:lshmaddr

9、=shmat(shmid,NULL,0);intshmdt(constvoid*shmaddr);intshmctl(intshmid,intcmd,structshmid_ds*buf);典型用法:l取狀態(tài)shmctl(shmid,IPC_STAT,&buf);l刪除shmctl(shmid,IPC_RMID,NULL);實(shí)例structshmid_dsbuf;shmid=shmget(key,size,flag);if(shmid==-1){//errorhandling...}shmctl(shmid,IPC_STAT,&buf);//分析利用b

10、uf中的信息shmaddr=(char*)shmat(id,NULL,0);if(shmadd

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

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

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