操作系统实验报告四

上传人:ni****g 文档编号:511603961 上传时间:2022-10-07 格式:DOCX 页数:4 大小:26.96KB
返回 下载 相关 举报
操作系统实验报告四_第1页
第1页 / 共4页
操作系统实验报告四_第2页
第2页 / 共4页
操作系统实验报告四_第3页
第3页 / 共4页
操作系统实验报告四_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《操作系统实验报告四》由会员分享,可在线阅读,更多相关《操作系统实验报告四(4页珍藏版)》请在金锄头文库上搜索。

1、课 程 名 称 姓 名 实 验 名 称 实 验 目 的 及 要 求 实 验 环 境计算机操作系统班 级实验日期学号实验成绩实 验 内 容课程实验报告实验4进程通信1、加深理解进程通信的方法与原理;2、掌握如何利用管道机制、消息缓冲队列、共享存储区机制进行进程间的通信。操作系统:linux Unbuntu 11.10实验工具:Vmware1、了解系统调用 pipe()、msgget()、msgsnd()、msgrcv()、msgctl()、shmget()、 shmat()、shmdt()、shmctl()的功能和实现过程。2、编写一 C语言程序,使其用管道来实现父子进程间通信。子进程向父进程发

2、送字符串“is sending a message to paren t!”; 父进程则从管道中读出子进程发来的消息,并将其显示到屏幕上,然后终止。3、运行该程序,观察、记录并简单分析其运行结果。三、有名管道、无名管道系统调用1、创建无名管道的系统调用2、读写管道的系统调用3、文件上锁、开锁系统调用4、命名管道创建系统调用四、Linux消息缓冲通信的系统调用1、创建一个消息队列或获取已存在消息队列的标识2、发送一条消息到指定的消息队列3、从消息队列接收消息4、对消息队列的操作五、共享内存通信的系统调用1、创建或获取一个共享内存2、将共享内存附接到进程的虚拟地址空间3、将共享内存从进程的地址空间

3、断开进程A的file结构进程B的file结构父于进程父子进程4、对共享内存的操作曲1pipe 兰p)fp L0vriteOptlJi buf, size)* re5d(fp0k siz调试过程及实验结果图:管道的实现与父于进程的读写操作Cshiyuzhu2D13D73SDubuntu:-T run a c amniand ss ad minis ta to r (user rroo t, use ,rsudoamnia nd,p.See pinan sudo_root* for details.htyuzhuzei3e7350ubjntu:$ gcc 斗.亡一o 4 shiyuzhu20i3e

4、7350gubjntu:$ ./4 is sending a message to parent L5hiyuzhu213073S0ubjntu:-S ./4is sending o message to parent! shiyuzhu2ei30735Oubuntu: -S /4 is sending d message to parent!总1、管道当进程向管道中写时,数据就复制不予考虑了共享的数据页; 结从管道中读时,字节从共享页中按照FIFO的顺序复制出来。当所有进程完成管道的操作后,管道的i结点和共享数据页被释放2、避免死锁:为了保证管道操作过程中不至于因为用户的疏忽而死锁,Linu

5、x采用以下措施来避免 死锁:当进程因读或写等待时,要检查管道的另一端是否已经关闭,如果发现对方已经 关闭则直接返回,不再等待。当进程关闭管道时,要检查管道的另一端是否正处于等待状态,如果是,则要先 唤醒对方,然后再关闭管道。如果进程需要实现互斥,因为管道是文件,可以使用对文件上锁和开锁的系统调 用。3、对共享内存操作的系统调用:shmget()IPC_STAT :返回包含在指定的shmid相关数据结构中的状态信息,并把它放 置在户存储区中的*buf指针所指的数据结构中。执行此命令的进程必须有读取允许 权。IPC_SET:对于指定的shmid,为它设置有效用户和小组标识符和操作存取权。IPC_R

6、MID:删除指定的shmid以及与它相关的共享存储区的数据结构。SHM_LOCK :在内存中锁定指定的共享存储区,必须是超级用户才可以进行此项操 作。附 录#includevstdio.h#includevunistd.hint main()int pl;int filedes2;char buf100;pipe(filedes);while(p1=fork()=-1);if(p1=0)/sonsprintf(buf,%s,is sending a message to parent!); write(filedes1,buf,sizeof(buf);else /father read(filedes0,buf,sizeof(buf); printf(%sn,buf);return 0;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号