进程调度1.doc_第1页
进程调度1.doc_第2页
进程调度1.doc_第3页
进程调度1.doc_第4页
进程调度1.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/*(一)进程调度 进程调度算法有FIFO,优先数调度算法,时间片轮转调度算法,分级调度算法, 输入:进程流文件,其中存储的是一系列要执行的进程, 每个作业包括三个数据项: 进程名 所需时间 优先数(0级最高) 输出: 进程执行流 等待时间 平均等待时间 本程序包括:FIFO,优先数调度算法,时间片轮转调度算法 进程流文件process_stream.txt测试数据:p0 16 2p1 5 1p2 4 3p3 8 0p4 9 4p5 7 6VC+调试通过*/#include #include #include #include const int Quatum=2;/定义时间片的长度为2秒const int MAXPCB=100;/定义最大进程数/定义进程结构体typedef struct node char name20;/进程名int time; /进程运行时间int privilege;/进程优先级(静态)int finished;/进程完成标志,0-未完成,1-已完成int wait_time;/进程等待时间pcb;pcb pcbsMAXPCB;int quantiry;/进程流文件中的进程总数void initial()int i;for (i=0;iMAXPCB;i+)strcpy(,);pcbsi.time=0;pcbsi.privilege=0; pcbsi.finished=0;pcbsi.wait_time=0;quantiry=0;int readData()FILE *fp;char fname20;int i;cout请输入进程流文件名:fname;if (fp=fopen(fname,r)=NULL)cout错误,文件打不开,请检查文件名endl;elsewhile (!feof(fp)fscanf(fp,%s %d %d %d,,&pcbsquantiry.time,&pcbsquantiry.privilege); quantiry+;/输出所读入得数据cout输出所读入的数据endl; cout进程流文件中的进程总数=quantiryendl;cout进程名 所需时间 优先数endl;for (i=0;iquantiry;i+)cout pcbsi.time pcbsi.privilegeendl; return 1;return 0;/重置数据,以供另一个算法使用void init()int i;for (i=0;iMAXPCB;i+)pcbsi.finished=0;pcbsi.wait_time=0;void FIFO()int i,j;int total;/输出FIFO算法执行流 coutendl-endl; coutFIFO算法执行流:endl; cout进程名 等待时间endl; for (i=0;iquantiry;i+)cout pcbsi.wait_timeendl;for (j=i+1;jquantiry;j+)pcbsj.wait_time+=pcbsi.time;total=0;for (i=0;iquantiry;i+)total+=pcbsi.wait_time;cout总等待时间:total 平均等待时间:total/quantiryendl;/优先度调度算法void privilege() int i,j,p; int passed_time=0; int total; int queueMAXPCB; int current_privielege=1000; for (i=0;iquantiry;i+) current_privielege=1000; for (j=0;jquantiry;j+) if (pcbsj.finished=0)&(pcbsj.privilegecurrent_privielege) p=j; current_privielege=pcbsj.privilege; queuei=p; pcbsp.finished=1; pcbsp.wait_time+=passed_time; passed_time+=pcbsp.time; /输出优先数调度执行流 coutendl-endl; cout优先数调度执行流:endl; cout进程名 等待时间endl; for (i=0;iquantiry;i+) cout pcbsqueuei.wait_time-queueiendl; total=0; for (i=0;iquantiry;i+) total+=pcbsi.wait_time; cout总等待时间:total 平均等待时间:total/quantiryendl; /时间片轮转调度算法void timer()int i,j,sum,flag=1;int passed_time=0;int max_time=0;int round=0;int queue1000;int total=0;while(flag=1)flag=0;for (i=0;iquantiry;i+)if (pcbsi.finished=0)flag=1;queuetotal=i;total+;if (pcbsi.time=Quatum*(round+1)pcbsi.finished=1;round+;coutendl-endl; cout时间片轮转调度执行流:; for(i=0;itotal;i+) ; coutendl; cout进程名 结束时间 运行时间 等待时间endl; sum=0;for (i=0;i=0;j-)/从轮转调度执行流序列由后往前比较,找到同名进程即可计算其完成时间if (strcmp(,)=0)cout (j+1)*Quatum ;coutpcbsi.time (j+1)*Quatum-pcbsi.timeendl; sum+=(j+1)*Quatum-pcbsi.time; break;cout总等待时间:sum 平均等待时间:sum/quantiryendl;/显示版权信息函数 void version() coutendlendl; cout endl; cout 进程调度模拟系统 endl; cout endl; cout version 2011 endl; cout endl; coutendlendl; /主函数 int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论