欢迎来到天天文库
浏览记录
ID:20537571
大小:66.50 KB
页数:7页
时间:2018-10-12
《操作系统进程通信程序》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、includenstdio.h”#include"malloc.h"#include'*string.h"intml,m2,i,ep,num;typedefstructnode{intid;intsize;chartextllOOJ;structnode*next;}buftype;struct{intid;charstatus;intwaiterl;intpriority;charstack[5];intsm;buftype*front;buftype*rear;}pcb[4];struct{intvalue;intwaiter
2、2;}sem[3];charaddr;init(){intj,k;for(j=1;j<=3;j++){pcb[j].id=j;pcbfjl.status='r';pcb[j].waiter1=0;pcb[j].priority=j;for(k=0;k<=4;k++)pcb[j].stack[k]=*0*;pcbfjl.sm=0;pcb[j].front=NULL;pcb[j].rear=NULL;for(j=l;j<=2;j++){sem(j].value=0;sem
3、jj.waiter?=0;}i=0;ep=0;addr=’O’
4、;m2=0;ml=0;voidsort(chara[],intn){inti,j,flag;chartemp;flag=1;for(i=1;iaU+l]){flag=1;temp=a[j];aU]=a[j+lha[j+1]=temp;))}voidsend(intrec_id,chara[],intn){buftype*p;p=(buftype*)malloc(sizeof(buftype));p-〉id=rec_id;p->size
5、=n;p->next=NULL;strcpy(p->text,a);if(pcbfrec_idl.sm<=0){pcb[rec_id].front=p;pcblrec_id].rear=p;pcbfrec」dl.sm++;}else{pcb[rec_idj.rear->next=p;pcb[rec」dl.rear=p;pcb[rec_id].sm++;}}intreceive(intrec_id,charb[l){buftype*p;if(pcb[rec_id].sm<=0){printf(unomessage!!n);ret
6、urn0;)else{p=pcbfrec_idl.front;pcb[rec_id].sm—;pcb[rec_id].front=pcb[rec_id].front->next;strcpy(b,p-〉text);free(p);if(pcb[rec_id].front==NULL)pcb[rec_id].rear=NULL;return1;)}schedulerO{intpd;for(;;){pd=fmd();if(pd==0)return(0);if(ep==0){pcb[pd].status=’e’;ep=pd;elseif
7、(pcb[pd].priority8、3();break;default:printfC'pdenor");}}}find(){intj;for(j=l;j<=3;j++)if(pcb[j].status==’r.)return(j);return(0);}p(se,p,ad)intse;intp;charad;intw;sem[sel.value—;if(sem[se].value>=0)return(1);else{printf(”process%dblocked'p);ep=0;pcb[p].status=’w’;pcblpj.waiterl=0;w=s9、em[se].waiter2;if(w=0)sem[sel.waiter2=p;else{while(pcb[w].waiter1!=0)w=pcbfwl.waiterl;pcb[w].waiterl=p;)pcb[p].stack[l]=i;pc
8、3();break;default:printfC'pdenor");}}}find(){intj;for(j=l;j<=3;j++)if(pcb[j].status==’r.)return(j);return(0);}p(se,p,ad)intse;intp;charad;intw;sem[sel.value—;if(sem[se].value>=0)return(1);else{printf(”process%dblocked'p);ep=0;pcb[p].status=’w’;pcblpj.waiterl=0;w=s
9、em[se].waiter2;if(w=0)sem[sel.waiter2=p;else{while(pcb[w].waiter1!=0)w=pcbfwl.waiterl;pcb[w].waiterl=p;)pcb[p].stack[l]=i;pc
此文档下载收益归作者所有