华北科技学院计算机学院综合性实验实验报告课程名称《操作系统B》实验学期2015至2016学年第2学期学生所在系部基础部年级2013专业班级计算B132学生姓名毛慧雅学号201309014218任课教师王祥仲实验成绩计算机学院制华北科技学院计算机学院综合性实验报告第1页《操作系统B》课程综合性实验报告开课实验室:基础实验室七2016年6月20日实验题目一、实验目的通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。二、设备与环境1.硬件设备:PC机一台2.软件环境:安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如C\C++\Java等编程语言环境。三、实验内容(1)用C语言(或其它语言,如Java)编程实现对N个进程采用某种进程调度算法(如动态优先权调度算法)调度执行的模拟。(2)每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段:进程标识数ID。进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。进程已占用CPU时间CPUTIME。进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为0。进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,进程将进入阻塞状态。进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,将转换成就绪状态。进程状态STATE。队列指针NEXT,用来将PCB排成队列。(3)优先数改变的原则:进程在就绪队列中呆一个时间片,优先数增加1。进程每运行一个时间片,优先数减3。(4)为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。(5)分析程序运行的结果,谈一下自己的认识。华北科技学院计算机学院综合性实验报告第2页四、实验结果及分析1、关键代码(1)主函数voidmain(){intoption;printf(\n********************************);printf(\n**进程调度算法**);printf(\n********************************);printf(\n**1、先来先服务调度**);printf(\n**2、短作业优先调度**);printf(\n**3、动态优先级调度**);printf(\n**0、退出**);printf(\n********************************);printf(\n\n请选择菜单项:);;scanf(%d,&option);switch(option){case0:printf(\n谢谢使用\n);return;case1:printf(对进程按先来先服务调度。\n);input1();fcfs();output1();break;case2:printf(对进程进行短作业优先调度。\n);input1();sjf();output1();break;case3:printf(对进程进行动态优先级调度。\n);input2();dtyxj();output2();break;}}(2)先来先服务调度intfcfs(){floatatime=0;华北科技学院计算机学院综合性实验报告第3页inti;intszh;atime=project[0].comet;for(i=0;icounter;i++){project[i].begint=atime;//开始时间project[i].finisht=project[i].begint+project[i].runt;//完成时间=开始时间+运行时间project[i].run_flag=1;//调度标志atime=project[i].finisht;//下一个进程开始时间=上一个进程完成时间szh=i;//第i个进行服务project[szh].order=i+1;}return0;}(3)短作业优先调度intsjf(){floattemp_time=0;inti=0,j;intszh,temp_counter;floatrunt;runt=project[i].runt;j=1;while((jcounter)&&(project[i].comet==project[j].comet)){if(project[j].runtproject[i].runt){runt=project[j].runt;i=j;}华北科技学院计算机学院综合性实验报告第4页j++;}/*查找第一个被调度的进程*//*对第一个被调度的进程求相应的参数*/szh=i;project[szh].begint=project[szh].comet;project[szh].finisht=project[szh].begint+project[szh].runt;project[szh].run_flag=1;temp_time=project[szh].finisht;project[szh].order=1;temp_counter=1;while(temp_countercounter){for(j=0;jcounter;j++){if((project[j].comet=temp_time)&&(!project[j].run_flag)){runt=project[j].runt;szh=j;break;}}for(j=0;jcounter;j++){if((project[j].comet=temp_time)&&(!project[j].run_flag))if(project[j].runtrunt){runt=project[j].runt;szh=j;}}华北科技学院计算机学院综合性实验报告第5页/*查找下一个被调度的进程*//*对找到的下一个被调度的进程求相应的参数*/project[szh].begint=temp_time;project[szh].finisht=project[szh].begint+project[szh].runt;project[szh].run_flag=1;temp_time=project[szh].finisht;temp_counter++;project[szh].order=temp_counter;}return0;}(4)优先级调度intdtyxj(){floattemp_time=0;//开始时间inti=0,j=1;intszh,temp_counter;intmax_priority;//最大优先级max_priority=project[i].priority;intshort_time=project[i].comet;intbc=0;while(jcounter){//printf(00);if(project[j].cometproject[i].comet){short_time=project[j].comet;}j++;}max_priority=0;华北科技学院计算机学院综合性实验报告第6页for(j=0;jcounter;j++){if(short_time==project[j].comet){//max_priority=0;if(project[j].prioritymax_priority){max_priority=project[j].priority;bc=j;}}}szh=bc;//此时j变成了优先级最高的一个进程project[szh].begint=project[szh].comet;//begint:开始运行时间project[szh].finisht=project[szh].begint+project[szh].runt;//finisht完成时间runt运行时间project[szh].run_flag=1;temp_time=project[szh].finisht;//finisht完成时间project[szh].order=1;//order运行次序temp_counter=1;//记录已经完成的进程个数while(temp_countercounter)//查找到下一个优先级最高的进程{max_priority=0;for(j=0;jcounter;j++){if((project[j].comet=temp_time)&&(!project[j].run_flag))if(project[j].prioritymax_priority){max_priority=project[j].priority;华北科技学院计算机学院综合性实验报告第7页szh=j;}}/*对找到的下一个被调度的进程求相应的参数*/project[szh].begint=temp_time;project[szh].finisht=project[szh].begint+project[szh].runt;project[szh].run_flag=1;temp_time=project[szh].finisht;temp_counter++;project[szh].order=temp_counter;}//}return0;}2.运行结果:(1)先来先服务算法(FCFS)华北科技学院计算机学院综合性实验报告第8页(2)短作业优先算法(SJF)(3)优先级调度算法华北科技学院计算机学院综合性实验报告第9页由运行结果可以看出,采用SJF算法后,带权周转时间和平均带权周转时间都有较明显的改善,而尤其是对短作业,SJF调度算法能有效地降低作业的平均等待时间,提高系统吞吐量。据此可知,FCFS算法有利于CPU繁忙的作业,而不利于I/O繁忙型的作业(进程),而SJF对长作业不利。优先级调度算法根据优先级进行调度的,这样就可以保证紧迫性作业优先运行。教师评价评定项目ABCD评定项目ABCD算法正确报告文字流畅程序结构合理工作量适中实验结果正确答辩时操作熟练报告格式规范答辩时解析完整报告内容详细答辩时能正确回答问题其他: