实验:进程的控制与通信

实验:进程的控制与通信

ID:35342136

大小:58.17 KB

页数:5页

时间:2019-03-23

实验:进程的控制与通信_第1页
实验:进程的控制与通信_第2页
实验:进程的控制与通信_第3页
实验:进程的控制与通信_第4页
实验:进程的控制与通信_第5页
资源描述:

《实验:进程的控制与通信》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实验:进程的控制与通信1实验目的及任务1.1实验目的(1)熟悉Windows系统提供的进程创建与调度。(2)掌握Windows系统环境下进程的控制方式与通信方法。1.2实验任务(1)进程1和进程2运行过后,进程3才能运行(2)进程3运行完成后,进程4和进程5才能运行(3)进程4运行一旦完成,进程2也终止(4)设置公用存储区传递信息,进程3向进程5传递数据2进程创建2.1结构体模拟进程PCB,增加是否可以运行及是否已经运行过的标识typedefstructpcbintnum;structpcb*next;intpriority;inttimeneed;intstate;int

2、ready;//trueorfalse表示是否已经准备好运行intdone;//trueorfalse表示运行的情况}pcb;/*用此结构体来模拟一个进程*/2.2创建进程并设置优先级与运行时间for(i=l;i<=n;i++)/*用循环来创建指定个结点*/{q=(pcb*)malloc(sizcof(pcb));p_〉next=q;q->num=i;q->next=NULL;q->priority=l+(lO^rand0/(RANDJ1AX+1.0));/*随机产生优先级*/q->timeneed=l+(lOO^rand()/(RANDMAX+1.0));/*随机产生运行

3、时间*/if(i==l

4、

5、i==2)//设置其中两个进程可以运行,其它进程应该是阻塞状态{q->state=WAIT;q-〉ready二true;}else{q->statc=BLOCK;q-〉ready二false;}q->done二false;p=q;}3进程的控制voidchangestate0//在进程运行过程中实时更改进程的状态{structpcb*p,*q;p=head->next;q二p;***booltcmpl=falsc,tcmp2=falsc,tcmp3=falsc;***//放在程序首while(p){if(p->num==l&&p->done==tr

6、ue)/*进程1和进程2运行过之后再运行进程3*/templ=true;if(p->num==2&&p->done==true&&templ==true)temp2二true;if(tcmp2二二true&&p->num二二3)p->ready=truc;if(p->num==3&&p->timeneed==O)A进程3运行完后进程4和进程5才能运行*/temp3=true;if(p->num二二4&&temp3二二true)p->ready==true;if(p~>num二二5&&temp3=二true)p->rcady==truc;pcb*getprocess(stru

7、ctpcb*head)/*此函数用来挑选一个适合的进程来执行*/{structpcb*p,*q;intmax;p二head->next;wh订c(p)//获得第一个处于就绪状态的进程{if(p->ready==true){max=p->priority;A初始max为队首结点的优先级*/break;}q二P;while(p)if(p->ready==true&&p->state==WAIT&&p->priority>=max)/*逐一比较,选出优先级最大的结点*/{max=p~>priority;q二P;}p二p-〉next;}q->done=true;returnq;4进

8、程通信在程序首设置变量或者数组等,在某个进程运行时更改变量的值,而在另外的进程运行时提取变量的值,两个进程之间通过这样交换数据。5实验总结6源程序框架#include,zstdio.h〃#include〃stdlib.h〃ttinclude"string.h〃ttinclude"ctime"ttinclude#include^defineWAIT1ttdefineRUN2^defineFINISH3usingnamespacestd;typedefstruetpeb}peb;/*用此结构体來模拟一个进程*/struetpeb*hca

9、d;struetpeb*nm;peb^jccreat(intn)/*此函数用于创建进程队列*/{inti=l;peb*hcad,*p,*q;head=(pcb*)malloc(sizeof(peb));/*创建一个空表头*/p=head;returnhead;A返kl表头指针*/pcb*getprocess(structpcb*head)/*此函数用来挑选一个适合的进程来执行*/voiddelect(structpcb*head,structpcb*run)/*此函数用来将运行完的进程删除出进程队列*/{strue

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。