基于消息的进程通讯实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

一设计任务及主要技术实验设计六基于消息的通讯系统设计目的与要求:本设计的目的:是通过设计和调试一个基于消息的通讯系统,来实现进程之间的间接通讯,使学生对进程间的通讯机制、进程间的同步机制有一个深入的理解。具体要求如下:⑴设计一个消息传递系统,使两进程以消息为单位进行数据交换;⑵以间接方式进行这种传递,发送进程把消息发送到中间实体,接收进程从中取得消息;⑶中间实体应能保留一定数量的消息(如:保留10条消息);⑷两进程应保证同步与互斥。二设计方案及论证结果系统的原理框图开始三设计程序原代码:#includeiostream.h#includestdio.h#includestring.h//头文件constintM=4;//消息队列长度:M条(由自己设定)constintN=3;//最大进程数目:N个(由自己设定)intnum=0,mutex=0;//进程数目num,临界区互斥量mutexstructinfom//消息结构{intinno,outno;//输入,输出进程号charcontent[20];//内容num0设计进程运行循环体每次对进程P[i]进行操作输出提示的欢迎界面:消息队列长度:M条最大进程数目:N个(1)发送(0)退出(2)接收由于消息队列中有消息没被接收,进入下一次循环!0、退出过程接收消息删除消息队列中已接收消息输入接收进程号和内容互斥进入临界区2、接收消息判断进程号是否相等退出临界区1、发送消息如果下一个运行的进程不是接收进程,各进程互斥等待利用尾插法新消息入队提醒进程同步接收判断接收消息号是否越界退出临界区互斥进入临界区结束如果消息队列中已经没有消息,并且也没有进程要发送infom*next;}*q,*s,*r,*first;structprocess//进程结构{intno,in,out;//自己,输入,输出进程号charcontent[20];//内容}P[M];//主函数mainvoidmain(){cout欢迎使用基于消息的通讯系统endl;cout说明:本程序消息队列长度:M条endl;cout本程序最大进程数目:N个endl;cout.....本程序由操作者控制首先发送消息,然后再接收.....endl;first=newinfom;first-next=NULL;//初始化消息队列头指针do{if(num0)cout?由于消息队列中有消息没被接收,继续循环!endl;for(inti=0;iN;i++)//设计进程运行循环体{intk=1;P[i].no=i;//初始化进程号cout\n以下是对P[i]的操作endl;while(k){if(num=M)//判断消息数量是否满{cout****(1)发送(2)接收(0)退出****endl;cout请选择:;cink;//选择操作switch(k){case1://发送消息部分{if(numM){cout请输入接收进程号和内容:;cinP[i].outP[i].content;//输入接收进程号和内容if(mutex==0){if(P[i].out=0&&P[i].outN)//判断接收消息号是否越界{mutex=1;num++;//互斥占用临界区变量mutexinfom*mes;mes=newinfom;//新申请消息指针mes-inno=P[i].no;mes-outno=P[i].out;strcpy(mes-content,P[i].content);if(num==1)r=first;r-next=mes;//利用尾插法新消息入队r=mes;r-next=NULL;mutex=0;//释放临界区变量mutexcout$进程P[i]发送消息成功!endl;cout!进程P[mes-outno]请注意接收消息!endl;//提醒同步接收if(mes-outno!=i&&mes-outno!=(i+1)&&(i+1)M)//判断消息是否等待接收cout?由于下一个运行的进程是P[i+1],所以消息等待收!endl;//进程互斥等待}elsecout?进程号越界!请重新选择!endl;}elsecout?条件不满足(已经有进程在访问临界区),等待....endl;}elsecout?消息队列已满,请先接收,然后再发送!!!endl;break;}case2://接收消息部分{if(num0){s=first;q=first-next;//初始化工作指针while(q){if(P[i].no==q-outno)//判断进程号是否相等{if(mutex==0)//进程同步接收{mutex=1;num--;//互斥占用临界区变量mutexP[i].in=q-inno;strcpy(P[i].content,q-content);//mutex=0;//释放临界区变量mutexcout@进程P[i]接收消息成功!endl;cout###消息来自:P[i].in内容是:P[i].contentendl;s-next=q-next;//删除已接收消息break;//接收一条消息后退出循环}elsecout?条件不满足(已经有进程在访问临界区),等待....endl;}s=q;//保存工作指针前驱q=q-next;//工作指针下移}if(!q)cout?没有本进程的消息!!!endl;}elsecout###消息队列中没有消息,请先发送消息###endl;break;}default:break;//退出过程部分}}else{cout?消息队列已经放满!请先取出消息,然后再发送!endl;break;}}}}while(num0);//当消息队列中还有消息时,继续循环,直到没有消息为止cout\n!!!进程通讯过程结束!!!endl;}四实验结果五实验中主要问题及故障现象的分析及设计结论在设计程序过程中遇到了一些问题:首先是进程同步的问题,互斥问题;然后是消息队列链表的创建和删除问题;经过多次仔细的思考和反复的试验,看了教科书和资料书,成功解决了进程的有关问题;然后仔细推敲,终于成功解决了终于成功搞定链表的所有问题!最后设计了比较满意的界面…此次设计中成功的运用所学知识解决了所有遇到的问题,完成了设计的所有要求!另外还增加了某些功能:实现了进程数可以自己随意确定,可以随意取消息队列中的消息(只要队列中有本进程的消息)。无论从结构还是功能方面,总的说来,本次设计是成功的!六附实验数据、系统软件硬件环境、使用说明及参考资料实验数据:见实验结果中运行过程硬件环境:CPU:Intel(R)P43.0GHM内存:512M软件环境:MicrosoftWindowsxpprofessionalsp2MicrosoftVisualC++6.0企业版使用说明:首先可自己设定消息队列长度和进程总数,然后按程序提示输入数据。参考资料:《数据结构(C++版)》王红梅、王涛等;《计算机操作系统》陈火旺等;《操作系统重点难点及典型题精解》陆丽娜、柯丽芳等;

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功