操作系统试验报告2_第1页
操作系统试验报告2_第2页
操作系统试验报告2_第3页
操作系统试验报告2_第4页
操作系统试验报告2_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、班级:姓名:学号:教师:此拿石油化工得比BEIJING INSTITUTE OF PETROCHEMICAL TECHMOLOGY实验报告实验名称:进程间通讯课程名称:操作系统B计 G191刘祎2019322057唐静信息工程学院计算机系实验名称进程问通讯成绩评定(,)评分标准总分15分,分布在以下两个指标点 :1.2工程知识:5分,综合考察解题思路、代码准确性等方面的能力和水平4.3研究:5分,综合考察态度、报告完整性、实验总结等方面的能力和水平5.1工具使用:5分,考察代码执行、调试过程、结果分析等方面的能力和水平实验目的#参照实验指导书,填写实验目的与要求Linux系统的进程通信机构(I

2、PC)允许在任意进程间大批量地交换数据。本实验的目的是了解和熟悉Linux支持的消息通讯机制及信息量机制。(1)消息的创建,发送和接收。使用系统调用 msgget (), msgsnd (), msgrcv (), 及msgctl (),编制一长度为 1kB的 消息的发送和接收程序。(2)共享存储区的创建、附接和段接。使用系统调用shmget(),shmat(),shmdt() 和shmctl(),编制一个与上述功能相同的程入 序。实(3)比较上述两种消息通信机制中数据传输的时间。验实验环境操作系统环境:Linux编程语言:C语言软件:VM, CRT编译器:vim.消息的创建、发送和接收(1)

3、为了便于操作和观察结果,用-个程序作为“引子”,先后fork() 两个子进程,SERVER和CLIENT,进行通信。实验说明(2)SERVER端建立-个Key为75的消息队列,等待其他进程发来的消 息。当遇到类 型为1的消息,则作为结束信号,取消该队列,并退出 SERVER 。 SERVER 每接收到-个消 息后显示-句 “(server)received。(3)CLIENT端使用key为75的消息队列,先后发送类型从10到1的 消息,然后退 出。最后的-个消息,即是SERVER端需要的结束信号。CLIENT每发送-条消息后显示一句“(client)sent(4)父进程在SERVER和CLIE

4、NT均退出后结束。.共享存储区的创建,附接和断接(1)为了便于操作和观察结果,用-个程序作为“引子”,先后fork() 两个子进程,SERVER和CLIENT,进行通信。(2)SERVER 端建立-个Key为75的共享区,并将第-个字节置为-1。作 为数据空的标志。等待其他进程发来的消息。当该字节的值发生变化时,表示收到了信息,进行处理。然后再次把它的值设为-1。如果遇到的值为0,则视为结束信号,取消该队列,并退出SERVER。SERVER每接收到一次数 据后显示“(server)received ”。(3)CLIENT端建立-个Key为75的共享区,当共享取得第一个字节为-1时,Server

5、端空闲,可发送请求。CLIENT随即填入9到0。期间等待 Server端的再次空闲。进行完这些操作后,CLIENT退出。CLIENT每发送一次数据后显示“(client)sent ”。(4)父进程在SERVER和CLIENT均退出后结束。实验1#include #include #include #include #define MSGKEY 75struct msgformlong mtype;char mtext1030;msg;int msgqid,i;void CLIENT。 int i;msgqid=msgget(MSGKEY ,0777);for(i=10;i=1;i-)msg.m

6、type=i;printf(client)sentn);msgsnd(msgqid,&msg,1024,0);exit(0);void SERVER()msgqid=msgget(MSGKEY ,0777|IPC_CREAT); domsgrcv(msgqid,&msg,1030,0,0);printf(server)receivedn);RMID,0);while(msg.mtype!=1);msgctl(msgqid,IPCexit(0);main()while (i=fork()=-1);if(!i) SERVER();while (i=fork()=-1);if(!i) CLIENT(

7、);wait(0);wait(0);实验2#include #include #include #define SHMKEY 75int shmid,i;int *addr;void CLIENT()extern char *shmat();int i;shmid=shmget(SHMKEY ,1024,0777);addr=(int *)shmat(shmid,0,0);for(i=9;i=0;i-)while (*addr!=-1);printf(client)sentn);*addr=i;exit(0);void SERVER()extern char *shmat();shmid=sh

8、mget(SHMKEY ,1024,0777|IPC_CREAT);addr=(int *)shmat(shmid,0,0);do*addr=-1;while (*addr=-1);printf(server)receivedn);while (*addr);shmctl(shmid,IPC_RMID,0);exit(0);main()while (i=fork()=-1);if(!i) SERVER();while (i=fork()=-1);if(!i) CLIENT();wait(0);wait(0);从理想的结果来说,应当是每当 CLIENT发送一个消息后,SERVER接受 该消息,C

9、LIENT再发送下一条。也就是说(client)sent和(server) received的字样应该在屏幕上交替出现。实际的结果大多是先由CLIENT发送了两条消息,然后SERVER接受一条消息,此后CLIENT_SERVER交替发送 和接收消息,最后SERVER 一次接受两条消息。CLIENT和SERVER分 别发送和接受了 10条消息,与预期设想一致。运行的结果和预想的完全一样。但在运行的过程中,发现每当 CLIENT发送一次数据后,SERVER要等待大约0.1s才有响应。同样,之后CLIENT又需要等待约0.1s才发送下一个数据分析与思考通过这次试验,使我对操作系统的了解进一步加强,同时加深了对C语言以及vi编译器的熟悉和理解。止匕外,将所学的课本理论知识再次运用 到实践当中,做到了理论与实践

温馨提示

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

评论

0/150

提交评论