實驗三、進程通信_第1頁
實驗三、進程通信_第2頁
實驗三、進程通信_第3頁
實驗三、進程通信_第4頁
實驗三、進程通信_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、操作系統(tǒng)實驗報告實驗三、進程通信(一)管道及共享內(nèi)存一、實驗?zāi)康?)加深對管道通信的了解2)掌握利用管道進行通信的程序設(shè)計3)了解共享內(nèi)存通信的程序設(shè)計方法4)了解和熟悉Linux支持的共享存儲區(qū)機制二、實驗內(nèi)容任務(wù)一、(1)閱讀以上父子進程利用管道進行通信的例子(例1),寫出程序的運行結(jié)果 并分析。(2)編寫程序:父進程利用管道將一字符串交給子進程處理。子進程讀字符串, 將里面的字符反向后再交給父進程,父進程最后讀取并打印反向的字符串。任務(wù)二、(1)閱讀例2的程序,運行一次該程序,然后用ipcs命令查看系統(tǒng)中共享存儲 區(qū)的情況,再次執(zhí)行該程序,再用ipcs命令查看系統(tǒng)中共享內(nèi)存的情況,對兩

2、次的結(jié)果進行比較,并分析原因。最后用ipcrm命令刪除自己建立的共享存儲區(qū)。(有關(guān)ipcs和ipcrm介紹見后面一頁)(2)每個同學(xué)登陸兩個窗口,先在一個窗口中運行例3程序1(或者只登陸一 個窗口,先在該窗口中以后臺方式運行程序1),然后在另一個窗口中運行例3 程序2,觀察程序的運行結(jié)果并分析。運行結(jié)束后可以用ctrl+c結(jié)束程序1的運 行。(3)編寫程序:使用系統(tǒng)調(diào)用shmget(),shmat(),shmdt(),shmctl(),編制程序。 要求在父進程中生成一個30字節(jié)長的私有共享內(nèi)存段。接下來,設(shè)置一個指向 共享內(nèi)存段的字符指針,將一串大寫字母寫入到該指針指向的存貯區(qū)。調(diào)用fork(

3、) 生成子進程,讓子進程顯示共享內(nèi)存段中的內(nèi)容。接著,將大寫字母改成小寫, 子進程修改共享內(nèi)存中的內(nèi)容。之后,子進程將脫接共享內(nèi)存段并退出。父進程 在睡眠5秒后,在此顯示共享內(nèi)存段中的內(nèi)容(此時已經(jīng)是小寫字母)。三、代碼及運行結(jié)果分析(1)閱讀以上父子進程利用管道進行通信的例子(例1),寫出程序的運行結(jié)果并分 析實驗代碼:#includemain()( int x,fd;char buf30,s30;pipe(fd);while (x=fork()=-1);if (x=0)close(fd0);printf(Child Process!n);strcpy(buf,This is an exam

4、plen);write(fd1,buf,30);exit(0);elseclose(fd1);printf(Parent Process!n);read(fd0,s,30);printf(%sn,s);運行結(jié)果:-Telnet 132. 168. 0. 249eQG2023S3 jfcc tj_c o sjEBGC202a8 .ZsjNeu 23L, 403C upitten & QG 2 02 08lo erm lho t CcBG62O20S(?lo ca lhost Clilld Proicess ? Parent Frocesst This is an example20208(? l

5、ocalhost分析:調(diào)用pipe(fd);創(chuàng)建一個管道后,接著調(diào)用fork()函數(shù)產(chǎn)生兩個進程,首先開始執(zhí) 行子進程,關(guān)閉管道出口,通過管道入口向管道中寫入內(nèi)容。執(zhí)行if語句后, 進入else語句塊內(nèi)開始父進程,管道入口關(guān)閉,通過管道出口端從管道中讀取之 前寫入內(nèi)容,最后輸出出來(2)編寫程序:父進程利用管道將一字符串交給子進程處理。子進程讀字符串,將 里面的字符反向后再交給父進程,父進程最后讀取并打印反向的字符串。實驗代碼:#includemain() int x,count,left,right,temp,fd2,fe2;char c,buf30,s30;pipe(fd);pipe(fe

6、);printf(please input a line of char);scanf(%s,buf);while(x=fork()=-1);if(x=0)close(fd0);close(fe1);printf(Child Process!n);write(fd1,buf,30);read(fe0,buf,30);printf(%sn,buf);exit(0);elseclose(fd1);close(fe0);count=0;doread(fd0,&c,1);scount+=c;while(c!=0);printf(Parent Process!n);printf(%sn,s);count

7、-=2;for(left=0,right=count;left=count/2;left+,right-)temp=sleft;sleft=sright;sright=temp;write(fe1,s,30);wait(0);運行結(jié)果:12 .c1 CNclj 4BL, 735C written眼FiFiPlnnaMnwtz rFI葡2附明1$ gnr 1 2 -r -n 1 2 e0t620205I?localhost e0662020EJ ./12 hp lease input a line of charsun Juan juan Child ProcessTI rr-uceiii !

8、k? un J uan jLian naujnau.inus e06620205(?localliost C0B620205 $*(3)閱讀例2的程序,運行一次該程序,然后用ipcs命令查看系統(tǒng)中共享存儲區(qū)的 情況,再次執(zhí)行該程序,再用ipcs命令查看系統(tǒng)中共享內(nèi)存的情況,對兩次的 結(jié)果進行比較,并分析原因。最后用ipcrm命令刪除自己建立的共享存儲區(qū)。(有關(guān)ipcs和ipcrm介紹見后面一頁)實驗代碼:#include #include #include main()key_t key=208; /*在實際實驗過程中,為了避免每個同學(xué)建立的共享存儲區(qū)關(guān)鍵字一樣而相 互干擾,關(guān)鍵字請用學(xué)號末3

9、位*/int shmid_1,shmid_2;if (shmid_1=shmget(key,1000,0644|IPC_CREAT)=-1)perror(shmget shmid_1);exit(1);printf(First shared memory identifier is %dn,shmid_1);if (shmid_2=shmget(IPC_PRIVATE,20,0644)=-1)perror(shmget shmid_2);exit(2);printf(Second shared memory identifier is %dn,shmid_2);exit(0);運行結(jié)果:112

10、 F Neu 18L, 523C vilLLeii20298?localliast e666202983 gcc 112 .c -o Li2L觀6我晾典mocHim毗我昭典./liJFirst shared menory identifier is 1376291Second shared memory identifier is 1409060e6662O208?localhast,Ipcs查看:20163841638416384163841638420201G294201000163841Q0O201000201G2941638410002016384163842Q20nsemse06&2

11、S20S(?lDcaUost e06B2O20BJ$;eyownerpernsMcsc-asjc Queues msnidSemaphoie Arpaijs ;eysen) idowner perns0 20 20 20 20 20 20 20 20 0 010 0 010 20 277677 777 744446 6巖4444 6 G 6 64444744444-74447 444474444474447 LbLbLbLb7G _b _6 Tf 6 7 -b _b -b76 G77 744444-4444774444-444444474444 G6666G666 444444446 60 0

12、0 0 0 00 000 0000000021000 000006000001000100 0 0 00 011111IX0090B009 1x00306003 1x00906009 1x00906009 1x00906009 IX0090S009 ix0030S003 1x009062 a2 1x00906009 1x00906009 ix009000e7 IX0030S003 lx0090S06F 1x00906009 1x00906085 1X00906009 1x00306003 1x00906009 1x00906009 1x00906009 ix009OS14b ix0030S00

13、3 1x00906009 1x00906012 1x00906009 1X00900009 ix0000G495 1x00906009 1x00906009 1x00906009 ix0090S04b 1x00306003 1x00906009 1x00906009 lx0090S07c IX0090S009 ix0030S0cG 1x00906009 1x00906009 1x00906009 ix009003e7 IX0030S003 lx0090S0da 1x00906009 X0090S39F 1X00906009 1x00306003 1x00906009 1x00906009 1x

14、00000077 IX0090S009 1x003060035734491 3670168 3702877 4292702 4751455 57BI728 2833953 3899490 3997795 4039564 5767269 4096162 4128871 4161640 4194409 4227178 4259947 4685932 4423789 4489326 4522095 4587G22 4629461 4784242 4817011 6094964 4983853 5013622 E046391 5079160 5144697 fc!93274 E210235 52430

15、64 E308541 534I31B E374079 E809064 E439617 E505154 5537923 E570692 5832837 E668998 5865667 5898376 E931145 E963914 5996683 6029452 6169525 C22G&C2e05620111 C0&2O134 e0B620211 e0B620230 e0B620133 e05620333 C0&G20119 e0S620312 C0B620114 e0S620134 e05620231 C0G620211 e0B620111 e0B620111 C0B620133 e0562

16、0133 C0&2O121 e0B620121 e0B620124 e0B620121 e05620131 c0&G202te e0S620234 e0B620218 e0S620218 e05620231 C0G620121 C0B620121 e0B620121 C0B620218 e05620211 C0&2011S e0B620120 e0B620119 e0B620124 e05620124 C0&G2023O e0S620231 C0B620224 e0S620121 e05620132 C0G620111 C0B620218 e0B620211 C0B620114 e056203

17、33 C0&2O132 e0B620120 e0B620333 e0B620119 e05620120 C0&G20232再次運行:0X0090B009 0X0030S003 0X0090S009 0 x009062aS 0X0090S009 0X0090S009 0X0030S0C? 0X0090S009 0X0090S06F 0X0090S009 0X00900085 0X0030S003 0 x00906009 0X0090S009 0X0090S009 0X00906009 0 x0030S14b 0X0090S009 QxQQ&Q&QQQ 0X0090S012 0X0090S009

18、0X0030S003 0 x00906495 0X0090S009 0X0090S009 0X00900009 0 x0030S04b 0X0090S009 0X0090S009 0X0090S009 0X0090607(: 0X0030S003 0 x0090S0e6 QxQQ&Q&QQQ 0X0090S009 0X0090S009 0 x0030S2c7 0X0090S009 0 x0090S0da 0X0090S009 0 x009Q039f 0X0030S003 0X0090S009 0X0090S009 0X0090S009 0 x00906077 0X0030S003 0X0090

19、S0094751455 E701728 3833953 3899490 3997795 4039564 E7G72t9 4096102 4128871 4161640 4194409 4227178 4259947 4685932 4423789 448?326 4522095 4587632 4629461 4784242 4817011 t0949t4 4980853 S013622 E046391 5079160 E14469? 6193274 E210235 5243064 5308541 E341310 E374079 5809064 E439617 5505154 E537923

20、E570692 E832837 E668998 5865667 E898376 5931145 E963914 599&683 6B2?4526226062e05620133 644 C0&20333 644 e0B620119 644 e0B620312 777 e0B620114 644 e05620134 644 C0&G20231 G44 e0S620211 644 e0B620111 644 e0S620111 644 e05620133 644 C0G620133 644 C0B620121 644 e0B620121 644 C0B620124 644 e05620121 644

21、 C0&2O131 777 e0B620218 777 e0B620234 644 e0B620218 644 e05620218 644 C0&G20231 G44 e0S620121 644 e0B620121 644 e0S620121 644 e05620218 644 C0G620211 ?7 e0B620118 644 e0B620120 644 e0B620119 644 e05620124 744 C0&2O124 644 e0B620230 777 e0B620231 644 e0B620224 644 e05620121 644 C0&G20132 777 e0S62011

22、1 644 e0B620218 777 e0S620211 777 e05620114 777 C0G620333 644 C0B620132 644 e0B620120 644 C0B620333 644 e05620119 777 C0&2O120 644 e0B620333 644202Q201638420201Q0O2010002010001&3841638410001638410002Q163841G2942016384163841638420 Senaphore Arpads keysemid owner perns nsemskeyMessage Queues msqidowne

23、rpernsused-bytese06G20208localFost e06S2&2&B$ gcc liZ.c -o li2 cOGG2S20SeiocilFo = t cQ6G2020B $ .xli2 First shared nemory identifier is 13762?!Second shared memoFi/ identif ier is 6389906|實驗三、進程通UH) 一一管道及共享內(nèi)存一百度搜索-Mio-osoft P再次用ipcs查看:_M- _M- 0 0 -M- _M-0 0 0 100 0 0 0 10 0destdestmessagesIX0090B00

24、9 1x003062 a2 1x00906009 1x00906009 lx0090S0e? IX0090S009 ix0030S0GF 1x00906009 1x00906085 1x00906009 1X00900009 IX0030S003 1x00906009 1x00906009 1x0090614b 1X00906009 1x00306003 1x00906012 1x00906009 1x00906009 1X00006495 ix0030S003 1x00906009 1x00906009 ix0090S04b 1X00900009 IX0030S003 1x00906009

25、lx0090S07c 1x00906009 1X00906009 1x00306003 1x00906009 1x00906009 lx0090S3e? IX0090S009 lx0030S0doi 1x00906009 X0090S39F 1x00906009 1X00900009 IX0030S003 1x00906009 1x00000077 1x00906009 1X00906009 1x00306003 1x00906082 1x00906009 1x00906009 ix009OS0db ix0030S0033833953 3899490 3997795 4039564 E7672

26、69 409&1B2 4128871 4161640 4194409 4227178 4259947 4685932 4423789 4489326 4522095 4587632 4620461 4784242 4817011 6094964 4989853 E013G22 E046391 E079160 E144697 6193274 E213235 5243064 E308541 5341310 6291563 E8030t4 E439617 E505154 5537923 5579692 E832827 E668998 S8656S7 589B376 5931145 E963914 5

27、99&683 6029452 163525 6226062 (253831 6324368 6357137 389906 6455443 .489212e05620119 C0GG29312 e0B620114 e0B620134 e0B620231 e05620211 C0&G20111 e0S620111 C0B620133 e0S620133 e05620121 C0G620121 C0B620124 e0B620121 C0B620131 e05620218 C0&2O234 e0B620218 e0B620218 e0B620231 e05620121 C0&G20121 e0S62

28、0121 e0B620218 e0S620211 e05620118 C0G62012O e0B620119 e0B620124 C0B620124 e05620231 C0&2O231 e0B620224 e0B620121 e0B620132 e05620111 c0&G202te e0S620211 C0B620114 e0S620333 e05620192 C0G62012O C0B620333 e0B620119 C0B620120 e05620333 C0&2011S e0B620130 e0B620130 e0B620238 e05620219 C0&G202194-74444-

29、44444- 47444444446 7 _b _-h- _b 6 G -b _b -b _b4444446 6 6744444-444 744444444 7G _b _b _b 6 G -b _b44444-444 #4444444G6766G664477674-444444-1 44444444 66G66666Semaphoie Arpaijs ;eysen) idowner perns;eyMcsc-asjc Queuesmsnidownerperns1&38420100020IQOO201000202016384163842Q100020100016384100016384201G

30、29416384163842016384202Q202020nsemse06&2S20S(?lDcaUost e06B2O20BJ$Ipcrm刪除010000001000000000 _M- _M- _M- 0 0 _M- _M-_M- 0 0 _M- _M- _M- 0 0destdestIX0090B009 lx0030S0c7 1x00906009 lx0090606F 1x00906009 IX009OS085 ix0030S003 1x00906009 1x00906009 1x00906009 1X00900009 lx0030S14b 1x00906009 1x00906009

31、1x00906012 1X00906009 1x00306003 1x00906495 1x00906009 1x00906009 IX0090S009 lx0030S04b 1x00906009 1x00906009 1x00906009 IX0090007C IX0030S003 1x00906009 1x00906009 1x00906009 1X00906009 ix0030Q3c7 1x00906009 Ix009060da 1x00906009 ix009OS3?f 1x00306003 1x00906009 1x00906009 1x00906009 1X00900077 IX0

32、030S003 1x00906009 1x00906009 1x00906082 1X00906009 1x00306003 lx0090S0db 1x009060094039564 E7672t9 4096162 4128871 4161640 4194469 4227178 4259947 4685932 4423789 4489326 4522095 4587632 4629461 4784242 4817011 fcB949t4 4980853 5013622 E046391 507?160 E144G97 6193274 E210235 E243004 5308541 E341310

33、 6291583 5809064 5439617 5505154 E537923 E570692 5832837 5668998 5865667 E89837G 5931145 E963914 5996683 6029452 1G3525 (22&062 6258831 6324368 6357137 (3899S& 6455443 488212e05620134 C0&20231 e0B620211 e0B620111 e0B620111 e05620133 C0&G20132 e0S620121 C0B620121 e0S620124 e05620121 C0G620131 C0B6202

34、18 e0B620234 C0B620218 e05620218 C0&2O231 e0B620121 e0B620121 e0B620121 e05620218 C0&G20211 e0S620118 C0B620120 e0S620119 e05620124 C0G620124 C0B620231 e0B620231 C0B620224 e05620121 C0&2O132 e0B620111 e0B620218 e0B620211 e05620114 C0&G20232 e0S620132 C0B620120 e0S620333 e05620119 C0G62012O C0B620333

35、 e0B620118 C0B620130 e05620130 C0&2023S e0B620219 e0B6202194-44444-44444-4444444446 G _b _b _b 6 G -b _b -b 644-4-44444-74444- 444444474444LbLb6 G _b _-h- _b 67-b _b -b74 4 4 4 4-74 4444746 6 6 6 6 7 67744444444777 G 6 6 6744444-444 #4444444G6666G6610002020100016384163840 0 0110001G29420302010001&38

36、420163841638416384163840 0 011000 Semaphore Arrays keyccmido vjnciLpernsnsemsMessage Queuesmsqidounejbperns0 0 _M- _M- _M- 0 0 -M- _M- -M-_M- 0 0 _M- _M- _M- 04-M- _M- -M- 0used-bytesmessagesdestdestcOGG2S20Seioc e06&2S20S(?lDcaUost e06B2O20BJ$分析:成功,返回共享內(nèi)存段的標(biāo)識符,內(nèi)核中用于唯一的標(biāo)識一個對象。對存在于內(nèi) 核存貯空間中的每個共享內(nèi)存段,內(nèi)核

37、均為其維護著一個數(shù)據(jù)結(jié)構(gòu)shmid_ds。失敗,返回一 1,設(shè)置errno。第一個參數(shù)key (鍵值)用來創(chuàng)建IPC標(biāo)識符,shmget()返回的標(biāo)識符與 key值一一對應(yīng),不同的key值返回不同的標(biāo)識符。第二個參數(shù)size,決定了共享內(nèi)存段的大小(若訪問已存在的內(nèi)存段,該 參數(shù)可設(shè)為0)。有最大字節(jié)數(shù)的限制第三個參數(shù)shmflag,用于設(shè)置訪問權(quán)限及標(biāo)識創(chuàng)建條件。對兩次的結(jié)果進行比較:兩次運行結(jié)束后的第二個共享標(biāo)識符是不一樣的。在 用ipcs查看時,共享內(nèi)存段中的關(guān)鍵字,共享內(nèi)存標(biāo)識符,訪問權(quán)限,字節(jié)等 都是不一樣的。(4)每個同學(xué)登陸兩個窗口,先在一個窗口中運行例3程序1(或者只登陸一個窗

38、口,先 在該窗口中以后臺方式運行程序1),然后在另一個窗口中運行例3程序2,觀察程序的運 行結(jié)果并分析。運行結(jié)束后可以用ctrl+c結(jié)束程序1的運行。實驗代碼:#include #include #include #define SHMKEY 208 /*在實際實驗過程中,為了避免每個同學(xué)建立的共享存儲區(qū)關(guān)鍵字一 樣而相互干擾,關(guān)鍵字請用學(xué)號末3位*/#define K 1024int shmid;main ()int i,*pint;char *addr;extern char * shmat ();extern cleanup ();for(i=0;i20;i+) signal(i,cle

39、anup);shmid=shmget(SHMKEY,16*K,0777|IPC_CREAT); /建立 16K 共享區(qū) SHMKEY */addr=shmat(shmid,0,0);/*掛接,并得到共享區(qū)首地址*/printf (addr 0 x%xn”,addr);pint=(int *)addr;for (i=0;i256;i+) *pint+=i;pause();/*等待接收進程讀*/cleanup()shmctl(shmid,IPC_RMID,0);exit ();運行結(jié)果:uli3_cH 26L, 603C wiitter662020Slocalhost &S662O20S$ gcc

40、 li3 c c li3 SGG20398(BlocallwSt SGG2039e$ .Zli3& 13 24718ALldr 0 x40017060e06620208localhost e06620298$分析:首先系統(tǒng)通過調(diào)用shmctl對shmid指向的內(nèi)存段進行刪除操作,接著系統(tǒng)調(diào)用 shmget創(chuàng)建一個16*1024字節(jié)的共享內(nèi)存段,成功返回共享內(nèi)存段的標(biāo)識符給 shmid,系統(tǒng)再次調(diào)用shmat連接內(nèi)存段,返回該共享內(nèi)存段連接到調(diào)用進程地 址空間上的地址addr。實驗代碼:#include #include #include #define SHMKEY 208 /*在實際實驗過程

41、中,為了避免每個同學(xué)建立的共享存儲區(qū)關(guān)鍵字一 樣而相互干擾,關(guān)鍵字請用學(xué)號末3位*/#define K 1024int shmid;main ()int i,*pint;char *addr;extern char * shmat ();shmid=shmget(SHMKEY,8*K,0777);/瞰共享區(qū) SHMKEY 的 id */addr=shmat(shmid,0,0);/* 連接共享區(qū) */pint=(int *)addr;for (i=0;i256;i+)printf(%dn”,*pint+);/*打印共享區(qū)中的內(nèi)容*/運行結(jié)果:01234567S9019THTH1-I1T-ILT-ITITHTI22TcIileL 192. 108. 0. 24S-口、m Telnet 192. 108. 0. 24SliaS-c 18L, 44GC written CcSGC28208(?localhost cSGC2029Sgcc liJ2.c - o li32 bB662O208(?1ulci1ius1, b66202983$ .Z113225225d2S5兩G62H弱曲lugimm eBGC20298$分析:例3_1程序后臺運行時,該程序開始執(zhí)行,系統(tǒng)調(diào)用shmget創(chuàng)建一個8*1024字 節(jié)的共享內(nèi)存段,再通過調(diào)用shmat掛接內(nèi)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論