版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验二时间片轮转调度算法实验内容:模拟实现时间片轮转调度算法,具体如下:设置进程体:进程名,进程的到达时间,效劳时间,,进程状态〔W——等待,R——运行,F——完成〕,进程间的链接指针进程初始化:由用户输入进程名、效劳时间进行初始化,同时,初始化进程的状态为W。显示函数:在进程调度前、调度中和调度后进行显示。排序函数:对就绪状态的进程按照进入就绪队列的时间排序,新到达的进行应优先于刚刚执行过的进程进入就绪队列的队尾。注意考虑到达时间调度函数:每次从就绪队列队首调度优一个进程执行,状态变化。并在执行一个时间片后化,效劳时间变化,状态变化。当效劳时间为0时,状态变为F。删除函数:撤销状态为F的进行。实验要求:1、测试数据可以随即输入或从文件中读入。2、必须要考虑到进程的到达时间3、最终能够计算每一个进程的周转时间的带权周转时间。实验代码:#include<iostream>#include<string>#include<time.h>usingnamespacestd;intn;classPCB{public:intpri;intruntime;intpieceOftime;stringprocname;stringstate;intneedOftime;intCounter;PCB*next;};PCB*run=NULL;PCB*ready=NULL;PCB*finish=NULL;PCB*tial=ready;voidDtime(intt);voidPrinft(inta){if(a==1){ cout<<"\n进程名\t到达时间\t效劳时间\t时间片\t进程状态"<<endl;}}voidPrinft(intb,PCB*p){if(b==1){cout<<p->procname<<"\t"<<p->needOftime<<"\t\t"<<p->runtime<<"\t\t"<<p->pieceOftime<<"\t"<<p->state<<endl;}}voiddisplay(intc){PCB*p;if(run!=NULL)Prinft(c,run);p=ready;while(p!=NULL){Prinft(c,p);p=p->next;}p=finish;while(p!=NULL){Prinft(c,p);p=p->next;}}voidinsert(PCB*p){PCB*S1,*S2;if(ready==NULL){p->next=NULL;ready=p;}else{S1=ready;S2=S1;while(S1!=NULL){ if(S2->pri>=p->pri) {S2->next=p;p->next=S1; } else {p->next=ready;ready=p; }}}}boolCTProcessOfPri(){PCB*Node;cout<<"输入创立进程的数目:"<<endl;cin>>n;for(intj=0;j<n;j++){Node=newPCB;if(Node==NULL)returnfalse;else{cout<<"输入进程的名称,进程需CPU时间:"<<endl;cin>>Node->procname>>Node->needOftime;Node->runtime=0;Node->state="就绪";Node->pri=Node->needOftime;cout<<"进程"<<Node->procname<<"创立完毕!"<<endl;}insert(Node);}returntrue;}voidpriority(inti){run=ready;ready=ready->next;run->state="运行";Prinft(i);while(run!=NULL){run->runtime=run->runtime+1;run->needOftime=run->needOftime-1;run->pri=run->pri-1;if(run->needOftime==0){run->state="完成";run->next=finish;finish=run;run=NULL;if(ready!=NULL){run=ready;run->state="运行";ready=ready->next;}}elseif((ready!=NULL)&&(run->pri<ready->pri)){run->state="就绪";insert(run);run=ready;run->state="运行";ready=ready->next;}display(i);}}voidqueue(PCB*p){if(ready==NULL){p->next=NULL;ready=p;tial=p;}else{tial->next=p;tial=p;p->next=NULL;}}boolCTProcessOfRuntime(){PCB*Node;intm;cout<<"输入创立进程的数目:"<<endl;cin>>n;cout<<"输入时间片:"<<endl;cin>>m;for(intj=0;j<n;j++){Node=newPCB;if(Node==NULL)returnfalse;else{cout<<"输入进程的名称,进程需CPU时间:"<<endl;cin>>Node->procname>>Node->needOftime;Node->runtime=0;Node->state="就绪";Node->Counter=0;Node->pieceOftime=m;cout<<"进程"<<Node->procname<<"创立完毕!"<<endl;}queue(Node);}returntrue;}voidRuntime(intc){run=ready;ready=ready->next;run->state="运行";Prinft(c);while(run!=NULL){run->runtime=run->runtime+1;run->needOftime=run->needOftime-1;run->Counter=run->Counter+1;if(run->needOftime==0){run->state="完成";run->next=finish;finish=run;run=NULL;if(ready!=NULL){run=ready;ready=ready->next;}}elseif(run->Counter==run->pieceOftime){run->Counter=0;run->state="就绪";queue(run);run=NULL;if(ready!=NULL){run=ready;run->state="运行";ready=ready->next;}}display(c);}}intmain(){inti;cout<<"----------时间片轮转调度算法---------"<<endl;cout<<"---------1开始2退出---------\n\n选择:"<<endl;cin>>i;switch(i){case1:CTProcessOfRuntime();
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 日本留学中介签约合同
- 2024版钢筋工程质量保修与维护服务合同
- 2024年度二手房产交易中的查验与评估合同2篇
- 2024年度国际物流与贸易融资合同3篇
- 劳动合同格式标准版
- 委托检测合同2篇
- 二零二四年度广告发布合同广告内容要求和效果评估4篇
- 二零二四年域名注册与服务器租赁合同
- 2024年度服务合同:企业网络安全保障服务2篇
- 2024年度二手汽车融资租赁合同
- 小学2024年秋季学生1530安全教育记录表(全学期)
- 实验室安全教育课件
- 大学生职业生涯规划小学英语教育
- 《中国溃疡性结肠炎诊治指南(2023年)》解读
- RB/T 089-2022绿色供应链管理体系要求及使用指南
- 叉车日常维护保养检查记录表
- 小型医疗机构量化分级评分表
- 220kV输变电工程电能损耗计算方法分析
- 中医冬季养生ppt课件
- 第二节菠菜PPT课件
- 《计量经济学》期末考试题库及答案(完整版)
评论
0/150
提交评论