欢迎来到天天文库
浏览记录
ID:27693747
大小:116.19 KB
页数:4页
时间:2018-12-05
《1614010102曹妍消息缓冲通讯机制》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、班级:软件16-1班课程名称:一、要求简述操作系统考核日期:2018年6月21日题目:消息缓冲通信机制(1)发送进程A创建消息;(2)执行send(B,a)后,查看进程B的进程控制块(PCB)表中raq,mutex,sm的情况,查看消息缓冲区中内容。学号:1614010102、主要代码源程序:#includc#includc〈queue〉#includcusingnamespacestd;typedefstructmessage{stringsender;intsize;stringtext;//消总缓冲区声明//消息发送者//消息长度//消息正文mes
2、sage*next;//指向下一个消息缓冲IXmessage()sm.value=I;mq=NULL;姓名:曹妍sendersize=•textnext=NULL;}message;message*msg=new(message);//消息缓冲区message*back=msg;typedefstruct{intvalue;//PCB*list;}semaphore;typedefstructPCB{stringname;semaphoremutexsemaphoresm;message*mq;PCB(stringn//信号量//进程控制块//进程名//互斥信号量//资源信号量//消息队列
3、首指针)PCB;voidP(semaphore&s){s.value—;if(s.value<0){cout«"进程阻塞"《endl;})voidV(scmaphorc&s){s.valuc++;if(s.value<=0){cout«M唤醒进程"《endl;})voidshowProccss(PCB&B)//查看消息队列{cout«n进程••《B.name«1•信息”《endl;if(B.mq=NULL){cout«"消息队列为空n<sender«"消息长度:M<4、size«’’消息正文:"<text«endl;q=q-〉next;name=n;mutex.valuecout«•’互斥信号量B.mutex.value«endl;mutex:«cout«”资源信号量sm:B«B.sm.value«cndl;cout«cndl;return;}voidshowBuffer()//查看缓冲区{if(msg->next==NULL){cout«"当前缓冲区为空11"«endl;}else{cout«”当前消息缓冲区内容:"«endl;message*q=msg-〉next;intcount=0;while(q!=NULL){、cout«++5、count«".消息发送者:”《q-〉sender《”消息长度:"《q-〉size«•’消息正文:"《q->text«endl;cout«endl;q=q-〉next;}}}voidsend(PCB&A,message*a)//消息发送原语{message*q=new(message);q->size=a->size;q->sender=a->sender;q->text=a->text;back->next=q;back=q;q->next=NULL;showBuffer();cout«n进程”《A.name«”互斥信号量执行P操作”《endl;P(A.mutex);if(A.mq二二N6、ULL){cout«"消息缓冲区插入进程”《A.name«"消息队列"《endl;A.mq=q;}else{cout«"消息缓冲区插入进程M<ncxt!=NULL)p=p->ncxt;p-〉next=msg-〉next;)msg->next=NULL;cout«n缓冲区淸空..."《endl;cout«n进程"《A.name«n互斥信号量执行V操作”《endl;V(A.mutex);cout«"进程"《A.name«”资源信号量执行V操作”《endl;V(A.sm);cout«nsend()发送原语7、结束"《endl;cout«endl;}voidreceive(PCB&B,message*b)//消息接收原语{cout«n进程"《B.name«°互斥信号量执行P操作”《endl;P(B.mutex);cout«••进程"《B.name«°资源信号量执行P操作"《endl;P(B.sm);message*p=new(message);if(B.mq==NULL){cout«"进程"《B.name«"消息队列为空"《e
4、size«’’消息正文:"<text«endl;q=q-〉next;name=n;mutex.valuecout«•’互斥信号量B.mutex.value«endl;mutex:«cout«”资源信号量sm:B«B.sm.value«cndl;cout«cndl;return;}voidshowBuffer()//查看缓冲区{if(msg->next==NULL){cout«"当前缓冲区为空11"«endl;}else{cout«”当前消息缓冲区内容:"«endl;message*q=msg-〉next;intcount=0;while(q!=NULL){、cout«++
5、count«".消息发送者:”《q-〉sender《”消息长度:"《q-〉size«•’消息正文:"《q->text«endl;cout«endl;q=q-〉next;}}}voidsend(PCB&A,message*a)//消息发送原语{message*q=new(message);q->size=a->size;q->sender=a->sender;q->text=a->text;back->next=q;back=q;q->next=NULL;showBuffer();cout«n进程”《A.name«”互斥信号量执行P操作”《endl;P(A.mutex);if(A.mq二二N
6、ULL){cout«"消息缓冲区插入进程”《A.name«"消息队列"《endl;A.mq=q;}else{cout«"消息缓冲区插入进程M<ncxt!=NULL)p=p->ncxt;p-〉next=msg-〉next;)msg->next=NULL;cout«n缓冲区淸空..."《endl;cout«n进程"《A.name«n互斥信号量执行V操作”《endl;V(A.mutex);cout«"进程"《A.name«”资源信号量执行V操作”《endl;V(A.sm);cout«nsend()发送原语
7、结束"《endl;cout«endl;}voidreceive(PCB&B,message*b)//消息接收原语{cout«n进程"《B.name«°互斥信号量执行P操作”《endl;P(B.mutex);cout«••进程"《B.name«°资源信号量执行P操作"《endl;P(B.sm);message*p=new(message);if(B.mq==NULL){cout«"进程"《B.name«"消息队列为空"《e
此文档下载收益归作者所有