版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、五邑大学实验报告 操作系统课程20162017年度 第1学期 实验题目:进程调度院系:计算机学院班级: 学号: 姓名: 黄凯鑫任课教师: 白明 成绩评定: 实验二题目:进程调度完成日期:2016年 12 月 11 日1、实验目的(1)设计一个有n个进程工行的进程调度程序。每个进程由一个进程控制块(PCB)表示。进程控制块通常应包含下述信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间以及进程的状态等,且可按调度算法的不同而增删。(2)调度程序应包含23种不同的调度算法,运行时可任意选一种,以利于各种算法的分析比较。(3)系统应能显示或打印各进程状态和参数的变化情况,便于观察诸进程的
2、调度过程2、实验内容(1)编制和调试示例给出的进程调度程序,并使其投入运行。(2)自行设计或改写一个进程调度程序,在相应机器上调试和运行该程序,其功能应该不亚于示例。(3)直观地评测各种调度算法的性能。3、算法设计算法:(1) 优先数法。进程就绪链按优先数大小从高到低排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减1,说明它已运行了一个时间片,优先数也减3,理由是该进程如果在一个时间片中完成不了,优先级应该降低一级。接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续进行,否则,调度就绪链链首进程投入运行。原运行进程再按其优先数大小插入
3、就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。(2) 简单轮转法。进程就绪链按各进程进入的先后次序排列,进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相当于优先数法的优先数记录项位置)。每过一个时间片,运行进程占用处理机的时间片数加1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。实验源代码:#include #include #include #include #include #includ
4、e enum state /进程的状态 Ready,Working,Finish;struct pcb /PCB数据结构int pid;int priority;int cputime;int needtime;int round;state process;pcb *next;int timepiece;pcb *get_process()/优先数算法-输入进程个数int proc;pcb *q;pcb *t;pcb *p;int i=0;cout proc;while (proc10) cout endl Illegal Input! endl endl proc;/cout endl e
5、ndl Start Scheduling!nn;getch();srand(unsigned)time(NULL); /初始化随机数种子发生器while (ipid=rand()%10000;q-needtime=rand()%10+1;q-cputime=0;q-priority=rand()%100;q-process=Ready;q-next=NULL; /利用随机数生成进程信息if (i=0)p=q;t=q;elset-next=q;t=q; /尾插法建立PCB节点i+; /whilereturn p;void display(pcb *p)/优先数算法结果输出coutProcessI
6、D Cputime Needtime Priority Stateendl;while(p) cout pid;couttt;coutcputime;coutt;coutneedtime;coutneedtime=0) coutDone;else coutpriority;coutprocess)case Ready:coutReadyendl;break;case Working:coutWorking-endl;break;case Finish:coutFinishnext;int process_finish(pcb *q) /判断是否所有进程都已完成,是则返回1int bl=1;wh
7、ile(bl&q) bl=bl&q-needtime=0;q=q-next;return bl;void cpuexe(pcb *q) /优先数算法模拟进程执行函数pcb *t=q;int tp=-1;while(q) if (q-process!=Finish) /未完成的进程置Ready,完成的进程置Finishq-process=Ready;if(q-needtime=0)q-process=Finish;if(tppriority&q-process!=Finish) /找到下一个优先数最高且未完成的进程tp=q-priority;t=q;q=q-next;if(t-needtime!
8、=0) /修改正在执行的进程的信息,并置其状态为Workingt-priority-=3;if(t-prioritypriority=0;t-needtime-;t-process=Working;t-cputime+;void priority_cal()/优先数算法主控函数pcb *p;system(cls);p=get_process();int cpu=0;char key;system(cls);coutCPUTime:cpuendl;display(p);coutendl;getch();while(!process_finish(p) /当不是所有进程都完成时不断执行进程并显示信
9、息cpu+;coutCPUTime:cpuendl;cpuexe(p);display(p);coutendl;key=getch();if(key=q) exit(0);printf(All processes are finished!);getch();pcb *get_process_round()/时间片算法-输入进程个数及CPU时间片int proc;pcb *q;pcb *t;pcb *p;int i=0;coutproc;while(proc10) coutendlYour process is out of order,please try again!endlendlpro
10、c;couttimepiece;while(timepiece5) coutendlIllegal Input!endlendltimepiece;/cout endl endl Start Scheduling!nn;getch();srand(unsigned)time(NULL); /初始化随机数种子发生器while (ipid=rand()%10000;q-needtime=rand()%10+1;q-cputime=0;q-round=0;q-process=Ready;q-next=NULL;if (i=0) /尾插法建立PCB节点p=q;t=q;elset-next=q;t=q;
11、i+; /whilereturn p;void cpu_round(pcb *p,pcb *q)/时间片算法模拟进程执行函数while(p)if (p-needtime=0) /完成的进程置Finish,其它置Readyp-process=Finish;if (p-process=Working)p-process=Ready;p=p-next;q-cputime+=timepiece; /修改正在执行进程的信息,并置其状态为Workingq-needtime-=timepiece;if(q-needtimeneedtime=0;q-round+;q-process=Working;pcb *
12、get_next(pcb *k,pcb *head)/得到下一个应执行的进程pcb *t;t=k;do t=t-next;while (t & t-process=Finish);if(t=NULL) t=head;while (t!=k & t-process=Finish)t=t-next;return t;void display_round(pcb *p)/时间片算法输出结果coutProcessID Cputime Needtime Round Stateendl;while(p)cout pid;couttt;coutcputime;coutt;coutneedtime;coutt
13、;coutround;coutprocess)case Ready:coutReadyendl;break;case Working:coutWorking-endl;break;case Finish:coutFinishnext;void round_cal()pcb * p;pcb * r;system(cls);p=get_process_round();int cpu=0;char key;system(cls);coutCPUTime:cpuendl;display_round(p);coutendl;getch();r=p;while(!process_finish(p) cpu
14、+=timepiece;cpu_round(p,r);r=get_next(r,p);coutCPUTime:cpuendl;display_round(p);coutendl;key=getch();if(key=q) exit(0);void display_menu()cout1 Priorityendl;cout2 Round Robinendl;cout3 Exitendl;cout key; switch(key) case 1:priority_cal();break; case 2:round_cal();break; case 3:exit(0); return 0;4、运行
15、与测试P算法:输入进程数4以后,由srand函数随机给出各个进程的needtime和priority。之后寻找priority最大的优先做,做的过程就是将cputime=cputime+1,needtime=needtime-1做完之后将priority=priority-3,再次开始寻找新的高优先级进程。RR算法:在输入了进程数3,时间片大小3之后,由srand()函数给出每个函数的needtime。然后从位置靠前的进程开始,工作3个单位时间的cputime,之后cputime=cputime+3,needtime=needtime-3,若needtime小于3,则置0.,round=round+1.由于同一个时间片只能分配给一个进程,不能分割,因此每个cputime总是时间片大小的整数倍。5、总结与心得这个实验在编程上的要求很高,由于在数据结构语法上的不扎实,在实现的时候出处碰壁。在老师给的参考的帮助下,完成了这个实验。在实现的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《无机化学》教学大纲
- 玉溪师范学院《数学课程与教学论》2022-2023学年第一学期期末试卷
- 智能楼宇整体解决方案-智能停车场
- 2024年运载火箭遥测系统检测设备项目成效分析报告
- 2023年制剂仿制药项目评价分析报告
- 2023年泌尿系统用药项目评价分析报告
- 2024年血管栓塞剂及栓塞材料项目评价分析报告
- 采购面包、糕点的合同
- 不生孩子合同
- 北京大学承泽园建筑修缮工程合同
- 初中物理知识点手册大全(挖空+答案)
- 兰吉尔(Landis+Gyr)UH50超声波热能表使用说明书
- GB/T 32131-2015辣根过氧化物酶活性检测方法比色法
- GB/T 28885-2012燃气服务导则
- GB/T 22857-2009筒装桑蚕捻线丝
- GB/T 14480.3-2008无损检测涡流检测设备第3部分:系统性能和检验
- GB/T 14048.2-2008低压开关设备和控制设备第2部分:断路器
- GB/T 12755-2008建筑用压型钢板
- GB/T 12611-1990金属零(部)件镀覆前质量控制技术要求
- GB 31644-2018食品安全国家标准复合调味料
- Formel-Q第八版培训资料全课件
评论
0/150
提交评论