实验三、进程通信_第1页
实验三、进程通信_第2页
实验三、进程通信_第3页
实验三、进程通信_第4页
实验三、进程通信_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统实验报告实验三、进程通信(一)管道及共享内存一、实验目的1)加深对管道通信的了解2)掌握利用管道进行通信的程序设计3)了解共享内存通信的程序设计方法4)了解和熟悉Linux支持的共享存储区机制二、实验内容任务一、(1)阅读以上父子进程利用管道进行通信的例子(例1),写出程序的运行结果 并分析。(2)编写程序:父进程利用管道将一字符串交给子进程处理。子进程读字符串, 将里面的字符反向后再交给父进程,父进程最后读取并打印反向的字符串。任务二、(1)阅读例2的程序,运行一次该程序,然后用ipcs命令查看系统中共享存储 区的情况,再次执行该程序,再用ipcs命令查看系统中共享内存的情况,对两

2、次的结果进行比较,并分析原因。最后用ipcrm命令删除自己建立的共享存储区。(有关ipcs和ipcrm介绍见后面一页)(2)每个同学登陆两个窗口,先在一个窗口中运行例3程序1(或者只登陆一 个窗口,先在该窗口中以后台方式运行程序1),然后在另一个窗口中运行例3 程序2,观察程序的运行结果并分析。运行结束后可以用ctrl+c结束程序1的运 行。(3)编写程序:使用系统调用shmget(),shmat(),shmdt(),shmctl(),编制程序。 要求在父进程中生成一个30字节长的私有共享内存段。接下来,设置一个指向 共享内存段的字符指针,将一串大写字母写入到该指针指向的存贮区。调用fork(

3、) 生成子进程,让子进程显示共享内存段中的内容。接着,将大写字母改成小写, 子进程修改共享内存中的内容。之后,子进程将脱接共享内存段并退出。父进程 在睡眠5秒后,在此显示共享内存段中的内容(此时已经是小写字母)。三、代码及运行结果分析(1)阅读以上父子进程利用管道进行通信的例子(例1),写出程序的运行结果并分 析实验代码:#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);运行结果:-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分析:调用pipe(fd);创建一个管道后,接着调用fork()函数产生两个进程,首先开始执 行子进程,关闭管道出口,通过管道入口向管道中写入内容。执行if语句后, 进入else语句块内开始父进程,管道入口关闭,通过管道出口端从管道中读取之 前写入内容,最后输出出来(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);运行结果: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命令查看系统中共享存储区的 情况,再次执行该程序,再用ipcs命令查看系统中共享内存的情况,对两次的 结果进行比较,并分析原因。最后用ipcrm命令删除自己建立的共享存储区。(有关ipcs和ipcrm介绍见后面一页)实验代码:#include #include #include main()key_t key=208; /*在实际实验过程中,为了避免每个同学建立的共享存储区关键字一样而相 互干扰,关键字请用学号末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);运行结果: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) 一一管道及共享内存一百度搜索-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$分析:成功,返回共享内存段的标识符,内核中用于唯一的标识一个对象。对存在于内 核存贮空间中的每个共享内存段,内核

37、均为其维护着一个数据结构shmid_ds。失败,返回一 1,设置errno。第一个参数key (键值)用来创建IPC标识符,shmget()返回的标识符与 key值一一对应,不同的key值返回不同的标识符。第二个参数size,决定了共享内存段的大小(若访问已存在的内存段,该 参数可设为0)。有最大字节数的限制第三个参数shmflag,用于设置访问权限及标识创建条件。对两次的结果进行比较:两次运行结束后的第二个共享标识符是不一样的。在 用ipcs查看时,共享内存段中的关键字,共享内存标识符,访问权限,字节等 都是不一样的。(4)每个同学登陆两个窗口,先在一个窗口中运行例3程序1(或者只登陆一个窗

38、口,先 在该窗口中以后台方式运行程序1),然后在另一个窗口中运行例3程序2,观察程序的运 行结果并分析。运行结束后可以用ctrl+c结束程序1的运行。实验代码:#include #include #include #define SHMKEY 208 /*在实际实验过程中,为了避免每个同学建立的共享存储区关键字一 样而相互干扰,关键字请用学号末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 共享区 SHMKEY */addr=shmat(shmid,0,0);/*挂接,并得到共享区首地址*/printf (addr 0 x%xn”,addr);pint=(int *)addr;for (i=0;i256;i+) *pint+=i;pause();/*等待接收进程读*/cleanup()shmctl(shmid,IPC_RMID,0);exit ();运行结果:uli3_cH 26L, 603C wiitter662020Slocalhost &S662O20S$ gcc

40、 li3 c c li3 SGG20398(BlocallwSt SGG2039e$ .Zli3& 13 24718ALldr 0 x40017060e06620208localhost e06620298$分析:首先系统通过调用shmctl对shmid指向的内存段进行删除操作,接着系统调用 shmget创建一个16*1024字节的共享内存段,成功返回共享内存段的标识符给 shmid,系统再次调用shmat连接内存段,返回该共享内存段连接到调用进程地 址空间上的地址addr。实验代码:#include #include #include #define SHMKEY 208 /*在实际实验过程

41、中,为了避免每个同学建立的共享存储区关键字一 样而相互干扰,关键字请用学号末3位*/#define K 1024int shmid;main ()int i,*pint;char *addr;extern char * shmat ();shmid=shmget(SHMKEY,8*K,0777);/瞰共享区 SHMKEY 的 id */addr=shmat(shmid,0,0);/* 连接共享区 */pint=(int *)addr;for (i=0;i256;i+)printf(%dn”,*pint+);/*打印共享区中的内容*/运行结果: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程序后台运行时,该程序开始执行,系统调用shmget创建一个8*1024字 节的共享内存段,再通过调用shmat挂接内

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论