操作系统程序进程通信实验报告
进 程 通 信
指导老师: 夏 建
一、实验题目
进程通信上机实验(消息缓冲通信)
二、算法思想
1、在进程管理(调度)实验基础上,加入进程通信的功能,采用消
息缓冲通信机制进行通信。
2、P1发送数据给P2,P2排序后发送给P3,P3接收数据并输出。
3、 要发送的数据内容由操作者实时输入。
三、小组分工:
四、算法程序
1、 缓冲区结构
typedef struct node
{int id;
int size;
char text[100];
struct node *next;
}buftype;
2、 进程控制块PCB
struct {int id;
char status;
int waiter1;
int priority;
char stack[5];
int sm;
buftype *front;
buftype *rear;
}pcb[4];
3 .发送、接收、排序程序算法流程
(1)发送函数 send()
分配缓冲区空间,由P指向
接收进程标识符、信息长度存入缓冲区
置链接指针为空,将信息正文从发送区复制到正文区
队尾指针指向新插入缓冲区 队列缓冲区个数计数加1
程序:
void send(int rec_id,char a[],int n){
buftype *p;
p=(buftype *)malloc(sizeof(buftype));
p->id=rec_id; //接收消息进程id
p->size=n; //消息的大小
strcpy(p->text,a); //将消息拷贝到节点之中
p->next=0;
if(pcb[rec_id].sm<=0)//如果消息缓冲队列空..就将p放在链
首
{
pcb[rec_id].front=p;
}
else
pcb[rec_id].rear->next=p;//如果不空..放在队尾..rear指针后移一位
pcb[rec_id].rear=p;//队尾指针指向新加入的缓冲区 pcb[rec_id].sm++; //接收进程的消息个数+1
}
(2)接收函数 receive()
调用参数:
rec_id 接收进程标识符
输出“无消息”提示信息,返回 b
释放缓冲区
程序:
int receive(int rec_id,char b[])
{
buftype *p;
if(pcb[rec_id].sm<=0){
printf("no message!!\n");
return 0;
}else{
p=pcb[rec_id].front;
pcb[rec_id].sm--;
pcb[rec_id].front=pcb[rec_id].front->next;//
后..front指针后移一位
strcpy(b,p->text);
free(p);
if(pcb[rec_id].front==NULL)
pcb[rec_id].rear=NULL;
return 1;
}
}
(3)排序函数 sort() 取出来
调用参数:a[ ] 待排序数组,n 数据个数;
程序:
void sort(char a[],int n)
{
int i,j;
a数组
字符)
len
P2
a[j]=temp;
}//if
}//for
}
}
2.修改P1、P2、P3程序
Process1() 在阻塞前插入以下操作代码
Process1() 在阻塞前插入以下操作
Process1程序:
process1(){
char flag;
a数组
字符)
len
P2
否发送消息 是
flag=getchar();
if(flag=='y'||flag=='Y'){
printf("input data:");
scanf("%s",a); 提示用户输入选择字符
将消息输送到缓冲队列中
b数组
P3
return (0);
m: printf("\n=>process1 i=%d\n\n",i);
i=i+5;
goto a;
}
Process2程序:
process2(){
char flag;
char b[100];
int len;
if(addr=='m') goto m;
if(addr=='n') goto n;
i=1;
a: printf("\n process2 printing m1=%d\n",m1);
m2=2*m1;
printf("do you want to receive message?(y/n)");//是否接收消息
getchar();
flag=getchar();
if(flag=='y'||flag=='Y')
{
if(receive(1,b)==0){ //消息队列为空
getchar();
}else{ //打印接收的消息,并且排序 printf("\n%s\n\n",b);
len=strlen(b);
sort(b,len);
printf("\n%s\n\n",b);
send(2,b,len);}
}
printf("process2 call p on sem2\n");
if(p(2,2,'m')==0)
return (0);
m: printf("process2 call v on sem1!\n");
if(v(1,2,'n')==0)
return (0);
n: printf("\n=>process2 i=%d\n\n",i);
i=i+10;
goto a;
}
Process3()在P3调用V操作唤醒P2前加入以下操作
Process3程序:
process3(){
char c[100];
if(addr=='m') goto m;
if(addr=='n') goto n;
i=1;
a: printf("\n=>process3 i=%d\n",i); if(i>=num) goto b; 调用接收函数,接收数据送到接收区c数组 输出接收区数据
printf("\n process3 printing 2^i=%d\n\n",m2);
m1=m2;
if(receive(2,c)){
printf("==>SORT RESULT:%s\n\n",c);
getchar();
}
else{
printf("==>SORT RESULT:\n\n");
getchar();
}
getchar();
printf("process3 call v on sem2!\n");
if(v(2,3,'m')==0) return (0);
m: i++;
goto a;
b: if(receive(2,c)){
printf("==>result:%s\n\n",c);
getchar();
}
else{
printf("==>result:\n\n");
getchar();
}
printf("\nprocess3 calls p on sem2\n");
if(p(2,3,'n')==0) return (0);
n: ;
}
四、测试情况、分析
下面的是调试正确后的程序结果:
(1)发送后立刻接受:
(2)接下来三个进程
五、收获与体会
经过这次的实验,我收获良多,同时也让我明白,动手了,实践了就有希望,就会有希望完成任务。
刚开始做这次实验的时候,发现很没有头绪,除了老师给的PPT就没有一点线索。只能硬着头皮去看之前做实验的程序代码,理解每个模块的作用,然后记录下来,对照之前老师给我们的讲解。我发现通过流程图编写程序是一个很好的方法,不仅仅调理清晰,最重要的是减少很多的参数,便于程序员很快的了解每个参数、模块的功能。 之后我们根据老师给的流程图写出了程序代码。
通过这个实验,我决定以后的编程过程中,我必定会写好每一个
项目的流程,以最好的效率完成既定的任务。
…… 此处隐藏:1420字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [实用文档]李践-有效提升销售的12大黄金法则8-大
- [实用文档]党支部换届工作方案
- [实用文档]2013年下期电子商务专业部宣传工作计划
- [实用文档]方庄一矿通风、钻探绩效工资考核管理办
- [实用文档]项目一 认识企业物流认识企业物流
- [实用文档]MBI_Display_产品蓝图规画
- [实用文档]北京市建筑业劳务作业人员普法维权培训
- [实用文档]锅炉燃烧调整与运行优化
- [实用文档]4支付结算业务的核算
- [实用文档]米什金_货币金融学_第9版各章学习指导
- [实用文档]水泥混凝土路面硬化工程施工组织设计
- [实用文档]钢筋工程安全技术交底书
- [实用文档]关于公布华中师范大学本科毕业论文
- [实用文档]太原市园林绿化施工合同范本 2
- [实用文档]周日辅导 初中英语分类复习单项选择题(
- [实用文档]第四章 文化经纪人的管理形式 第二节
- [实用文档]学宪法讲宪法竞赛题库
- [实用文档]《数值计算方法》期末考试模拟试题二
- [实用文档]爱词霸学英语:每日一句( 十月)
- [实用文档]2014年国家公务员面试:无领导小组讨论
- 新课程主要理念和教学案例分析汇编(24
- 英国人的快乐源于幸福的家庭生活
- 七年级上册第一次月考模拟数学试卷
- 真丝及仿真丝的种类有哪些?
- 【最新】华师大版八年级数学下册第十六
- 高中英语3500个必背单词
- 我可以接受失败,但我不能接受放弃!
- 最近更新沪科版八年级物理上册期末试卷
- 绿化工作先进乡镇事迹材料
- 鲁教版九年级上册思想品德教学计划
- 英语音标的分类
- 地下室底板无梁楼盖与普通梁板结构形式
- 美容师黄金销售话术
- 雅思写作满分作文备考方法
- 血清甲状腺激素测定与高频彩色多普勒超
- 1度浅析装修对室内空气品质的影响
- 2017-2022年中国汞矿行业深度分析与投
- 计算机二级VB公共基础知识
- (何勇)秸秆禁烧_重在寻找出路
- 内外墙抹灰工程分包施工合同1




