华北科技学院计算机系综合性实验实验报告课程名称操作系统B实验学期2011至2012学年第2学期学生所在系部基础部年级2009专业班级计算B091学生姓名周文学号200909014128任课教师杜杏菁实验成绩计算机系制华北科技学院计算机系综合性实验报告第1页《操作系统B》课程综合性实验报告开课实验室:基础六机房年月日实验题目进程调度算法程序设计一、实验目的通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。二、设备与环境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.实验代码#includestdio.h#defineNumber5voidmain(){intd[Number],f[Number];floatwan[Number],zhou[Number],dai[Number];inti;boolzhuangt[Number];//完成状态intdaoda[Number],fuwu[Number];intt=0;intj,k,nextproS;printf(SJF短作业进程优先调度算法:\n);printf(请输入5个进程到达时间和服务时间\n);printf(到达时间\t服务时间\n);for(i=0;iNumber;i++){scanf(%d%d,&d[i],&f[i]);}for(i=0;iNumber;i++){zhuangt[i]=false;wan[i]=0;zhou[i]=0;dai[i]=0;daoda[i]=d[i];fuwu[i]=f[i];}intfirst=0;//获取最先到达的进程下标firstfor(i=1;iNumber;i++){if(daoda[first]d[i])华北科技学院计算机系综合性实验报告第3页first=i;}zhuangt[first]=true;wan[first]=fuwu[first]+daoda[first];t+=daoda[first]+fuwu[first];for(j=1;jNumber;j++){nextproS=Number+1;for(k=0;kNumber;k++){if(!zhuangt[k])//判断第k个是否服务过{if(daoda[k]=t)//到达{if(nextproS==Number+1)nextproS=k;//第一次执行此句else{if(fuwu[nextproS]fuwu[k])nextproS=k;//获取服务时间最小的进程}}}}wan[nextproS]=fuwu[nextproS]+t;t+=fuwu[nextproS];zhuangt[nextproS]=true;}floatAz=0,Adq=0;华北科技学院计算机系综合性实验报告第4页for(i=0;iNumber;i++){zhou[i]=wan[i]-daoda[i];Az+=zhou[i];dai[i]=zhou[i]/fuwu[i];Adq+=dai[i];}printf(进程ID\t完成时间\t周转时间\t带权周转时间\n);for(i=0;iNumber;i++)printf(%d\t%4.2f\t\t%4.2f\t\t%4.2f\n,i+1,wan[i],zhou[i],dai[i]);printf(\n平均周转时间为:%4.2f\n,Az/Number);printf(平均带权周转时间为:%4.2f\n,Adq/Number);}2.实验结果3.实验结果分析本实验利用书本上的例子,定义5个进程A、B、C、D、E的到达时间分别为0、1、2、3、4,服务时间分别为4、3、5、2、4。通过短作业优先(SJF)调度算法对进程进行调度。本例中SJF算法将从后备队列中选择一个或若干个估计运行时间最短的作业D,将它调入内存中运行。通过对SJF算法程序的编写最终得到如上图所示的实验结果。华北科技学院计算机系综合性实验报告第5页4.实验心得教师评价评定项目ABCD评定项目ABCD算法正确界面美观,布局合理程序结构合理操作熟练语法、语义正确解析完整华北科技学院计算机系综合性实验报告第6页实验结果正确文字流畅报告规范题解正确其他:评价教师签名:年月日