计算机操作系统实验-进程通信(一)_第1页
计算机操作系统实验-进程通信(一)_第2页
计算机操作系统实验-进程通信(一)_第3页
计算机操作系统实验-进程通信(一)_第4页
全文预览已结束

下载本文档

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

文档简介

进程通信(一)1.实验目的学习如何利用管道机制、共享存储区机制进行进程间的通信,并加深对上述通信机制的理解。2.实验内容(1)了解系统调用pipe()、shmget()、shmat()、shmdt()、shmctl()的功能和实现过程。(2)编写一段程序,使其用管道来实现父子进程之间的进程通信。子进程向父进程发送自己的进程标识符,以及字符串“issendingamessagetoparent!”。父进程则通过管道读出子进程发来的消息,将消息显示在屏幕上,然后终止。(3)编写一段程序,使其用共享存储区来实现父子进程之间的进程通信。父进程创建一个长度为512字节的共享内存空间,显示写入该共享内存的数据;子进程将共享内存也附加到自己的地址空间,并向共享内存中写入数据。3.实验步骤(1)了解系统调用pipe()、shmget()、shmat()、shmdt()、shmctl()的功能和实现过程。pipe()创建一条管道进行信息传输。shmget()得到一个共享内存标识符或创建一个共享内存对象并返回共享内存标识符shmat()连接共享内存标识符为shmid的共享内存,连接成功后把共享内存区对象映射到调用进程的地址空间,随后可像本地空间一样访问shmdt()用来断开与共享内存附加点的地址,禁止本进程访问此片共享内存shmctl()共享内存管理,完成对共享内存的控制(2)编写一段程序,使其用管道来实现父子进程之间的进程通信。子进程向父进程发送自己的进程标识符,以及字符串“issendingamessagetoparent!”。父进程则通过管道读出子进程发来的消息,将消息显示在屏幕上,然后终止。程序代码:#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>intmain(){intpid1,pid2;intfd[2];charout[512],in[512];pipe(fd);pid1=fork();if(pid1==0){sprintf(out,"%dissendingamessagetoparent!\n",getpid());printf("%s",out);write(fd[1],out,sizeof(out));}else{read(fd[0],in,sizeof(out));printf("%s",in);}return0;}程序截图:运行结果:(3)编写一段程序,使其用共享存储区来实现父子进程之间的进程通信。父进程创建一个长度为512字节的共享内存空间,显示写入该共享内存的数据;子进程将共享内存也附加到自己的地址空间,并向共享内存中写入数据。程序代码:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/shm.h>#defineSHMKEY75intmain(){intid;char*addr;charmessage[512];id=shmget(SHMKEY,512,0777|IPC_CREAT);if(fork()==0){sprintf(message,"%dissendingmessagetoparent",getpid());printf("%s\n",message);addr=shmat(id,0,0);strcpy(addr,message);shmdt(addr);}else{wait(0);addr=shmat(id,0,0);printf("%s\n",addr);shmdt(addr);shmctl(id,IPC_RMID,0);}return0;}程序截图:运行结果:4.思考自己写的,有些地方不准确,如果错误还请指正(1)上述哪个通信机制提供了发送进程和接收进程之间的同步功能?这些同步是如何进行的?消息缓冲机制。当写进程把一定数量的数据写入pipe,便去睡眠等待,直到读进程取走数据后,再把它唤醒。当读进程读一空的pipe时,也应睡眠等待,直到写进程将数据写入管道后,才将之唤醒,从而实现进程的同步。(2)上述通信机制各有什么特点,它们分别适合于何种场合?管道通信(PIPE)

两个进程利用管道进行通信时.发送信息的进程称为写进程.接收信息的进程称为读进程。管道通信方式的中间介质就是文件.通常称这种文件为管道文件.它就像管道一样将一个写进程和一个读进程连接在一起,实现两个进程之间的通信。写进程通过写入端(发送端)往管道文件中写入信息;读进程通过读出端(接收端)从管道文件中读取信息。两个进程协调不断地进行写和读,便会构成双方通过管道传递信息的流水线。适用场合:数据单向流动,只能在具有亲缘关系的进程间使用。优缺点:简单方便.但局限于单向通信的工作方式.并且只能在创建它的进程及其子孙进程之间实现管道的共享:有名管道虽然可以提供给任意关系的进程使用.但是由于其长期存在于系统之中,使用不当容易出错。共享内存通信(SHAREDMEMORY)

针对消息缓冲需要占用CPU进行消息复制的缺点.OS提供了一种进程间直接进行数据交换的通信方式一共享内存顾名思义.这种通信方式允许多个进程在外部通信协议或同步,互斥机制的支持下使用同一个内存段(作为中间介质)进行通信.它是一种最有效的数据通信方式,其特点是没有中间环节.直接将共享的内存页面通过附接.映射到相互通信的进程各自的虚拟地址空间中.从而使多个进程可以直接访问同一个物理内存页面.如同访问自己的私有空间一样(但实质上不是私有的而是共享的)。因此这种进程间通信方式是在同一个计算机系统中的诸进程间实现通信的最快捷的方法.而它的局限性也在于此.即共享内存的诸进程必须共处同一个计算机系统.有物理内存可以共享才行。适用场合:内存需要能被其他进程所访问且高效率通讯。优缺点:共享内存针对消息缓冲的缺点改而利用内存缓冲区直接交换信息,无须复制,快捷、信息

温馨提示

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

评论

0/150

提交评论