您好,欢迎访问三七文档
课程实验报告课程名称计算机操作系统班级实验日期姓名学号实验成绩实验名称实验4进程通信实验目的及要求1、加深理解进程通信的方法与原理;2、掌握如何利用管道机制、消息缓冲队列、共享存储区机制进行进程间的通信。实验环境操作系统:linuxUnbuntu11.10实验工具:Vmware实验内容1、了解系统调用pipe()、msgget()、msgsnd()、msgrcv()、msgctl()、shmget()、shmat()、shmdt()、shmctl()的功能和实现过程。2、编写一C语言程序,使其用管道来实现父子进程间通信。子进程向父进程发送字符串“issendingamessagetoparent!”;父进程则从管道中读出子进程发来的消息,并将其显示到屏幕上,然后终止。3、运行该程序,观察、记录并简单分析其运行结果。算法描述及实验步骤三、有名管道、无名管道系统调用1、创建无名管道的系统调用2、读写管道的系统调用3、文件上锁、开锁系统调用4、命名管道创建系统调用四、Linux消息缓冲通信的系统调用1、创建一个消息队列或获取已存在消息队列的标识2、发送一条消息到指定的消息队列3、从消息队列接收消息4、对消息队列的操作五、共享内存通信的系统调用1、创建或获取一个共享内存2、将共享内存附接到进程的虚拟地址空间3、将共享内存从进程的地址空间断开4、对共享内存的操作调试过程及实验结果总结1、管道当进程向管道中写时,数据就复制不予考虑了共享的数据页;从管道中读时,字节从共享页中按照FIFO的顺序复制出来。当所有进程完成管道的操作后,管道的i结点和共享数据页被释放2、避免死锁:为了保证管道操作过程中不至于因为用户的疏忽而死锁,Linux采用以下措施来避免死锁:当进程因读或写等待时,要检查管道的另一端是否已经关闭,如果发现对方已经关闭则直接返回,不再等待。当进程关闭管道时,要检查管道的另一端是否正处于等待状态,如果是,则要先唤醒对方,然后再关闭管道。如果进程需要实现互斥,因为管道是文件,可以使用对文件上锁和开锁的系统调用。3、对共享内存操作的系统调用:shmget()IPC_STAT:返回包含在指定的shmid相关数据结构中的状态信息,并把它放置在户存储区中的*buf指针所指的数据结构中。执行此命令的进程必须有读取允许权。IPC_SET:对于指定的shmid,为它设置有效用户和小组标识符和操作存取权。IPC_RMID:删除指定的shmid以及与它相关的共享存储区的数据结构。SHM_LOCK:在内存中锁定指定的共享存储区,必须是超级用户才可以进行此项操作。附录#includestdio.h#includeunistd.hintmain(){intp1;intfiledes[2];charbuf[100];pipe(filedes);while((p1=fork())==-1);if(p1==0)//son{sprintf(buf,%s,issendingamessagetoparent!);write(filedes[1],buf,sizeof(buf));}else//father{read(filedes[0],buf,sizeof(buf));printf(%s\n,buf);}return0;}
本文标题:操作系统实验报告四
链接地址:https://www.777doc.com/doc-6496567 .html