資源描述:
《20071121060孟令妍 操作系統(tǒng)實(shí)驗(yàn)五》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、內(nèi)蒙古師大計(jì)算機(jī)與信息工程學(xué)院《操作系統(tǒng)》課程實(shí)驗(yàn)報(bào)告實(shí)習(xí)題目進(jìn)程間基于共享存儲區(qū)的通信指導(dǎo)教師玉柱職稱副教授學(xué)生姓名孟令妍學(xué)號20071121060日期2010.05.315實(shí)現(xiàn)工具G++,c語言實(shí)現(xiàn)環(huán)境Linux實(shí)習(xí)內(nèi)容(功能、目標(biāo))實(shí)驗(yàn)?zāi)康模合到y(tǒng)了解linux系統(tǒng)的通信機(jī)構(gòu)IPC,掌握IPC中共享存儲區(qū)通信機(jī)制,理解共享存儲區(qū)通信的方法及特征。實(shí)驗(yàn)內(nèi)容: 編寫一段程序,同時(shí)父進(jìn)程創(chuàng)建兩個子進(jìn)程p1和p2;并使子進(jìn)程p1與子進(jìn)程p2通過共享存儲區(qū)相互發(fā)送數(shù)據(jù)(512字節(jié))。掌握系統(tǒng)調(diào)用shmget()、shmat()、shmdt(
2、)、shmctl()的使用方法及其功能,理解共享存儲區(qū)通信原理;系統(tǒng)理解linux的三種通信機(jī)制。實(shí)現(xiàn)的思想、方法和技術(shù)(含數(shù)據(jù)結(jié)構(gòu)、算法)編寫一段程序,同時(shí)父進(jìn)程創(chuàng)建兩個子進(jìn)程p1和p2;并使子進(jìn)程p1與子進(jìn)程p2通過通過共享存儲區(qū)相互發(fā)送數(shù)據(jù)(512)。linux系統(tǒng)的通信機(jī)構(gòu)IPC中消息通信機(jī)制提供四個操縱共享存儲區(qū)的系統(tǒng)調(diào)用。shmget()的主要功能是建立新的共享存儲區(qū)或返回一個已存在的共享存儲區(qū)描述字,shmat(shmid,addr,flag)的主要功能是將物理共享區(qū)附接到進(jìn)程虛擬地址空間,其中shmid是shmget()共享存
3、儲區(qū)描述字,addr等于0有系統(tǒng)自動選址進(jìn)行附接,flag置0既能讀又能寫。shmdt()的功能是斷接一個共享存儲區(qū),shmctl()的主要功能是查詢及設(shè)置一個共享存儲區(qū)狀態(tài)和有關(guān)參數(shù)。使用以上的系統(tǒng)調(diào)用不僅減少了數(shù)據(jù)流動帶來的硬件開銷,還是批次的通信不僅僅局限于接受和發(fā)送數(shù)據(jù),還可以操作彼此的某些虛擬存儲區(qū)。5主要代碼注釋1#include2#include3#include4#include5#defineSHMKEY486#defineK2567in
4、tshmid;8main()9{10inti,*pint,p1,p2;11char*addr;12//externint*shmat();13externcleanup();14while((p1=fork())==-1);15if(p1==0)16{17for(i=0;i<20;i++)18signal(i,cleanup);19shmid=shmget(SHMKEY,K,0777
5、IPC_CREAT);20addr=shmat(shmid,0,0);21printf("addr0x%x",addr);22pint=(int*)addr
6、;23for(i=0;i<64;i++)24*pint++=i;25pint=(int*)addr;26*pint=64;27pause();28exit(0);29}30else31{32while((p2=fork())==-1);33if(p2==0)34{35shmid=shmget(SHMKEY,K,0777);36addr=shmat(shmid,0,0);37pint=(int*)addr;38while(*pint==0);39for(i=0;i<64;i++)40printf("%d",*pint++);//共享存儲區(qū)所
7、用的頭文件//全局變量shmid//外部函數(shù)聲明//建立進(jìn)程1//軟中斷處理//建立256字節(jié)共享區(qū)SHMKEY//共享區(qū)首地址//通過循環(huán)往共享區(qū)內(nèi)寫入依次數(shù)字1~64//共享區(qū)第一個字中寫入長度64,以便接收進(jìn)程讀等待接收進(jìn)程讀//取共享存儲區(qū)SHMKEY的id連接共享區(qū)//共享區(qū)的第一個字節(jié)為零時(shí),等待,因?yàn)檫€沒寫完打印共享區(qū)中的內(nèi)容541exit(0);42}43}44}45cleanup()46{47shmctl(shmid,IPC_RMID,0);48exit(0);49}//Cleanup函數(shù),作用是刪除已有的共享區(qū)5結(jié)果分析(
8、含實(shí)現(xiàn)中出錯原因分析)實(shí)驗(yàn)結(jié)果:實(shí)驗(yàn)結(jié)果是首先輸出了64,然后依次輸出了1~63.實(shí)現(xiàn)了共享存儲區(qū)通信機(jī)制。指導(dǎo)教師評語、評分評分:指導(dǎo)教師:年月日5