华北科技学院计算机学院综合性实验实验报告课程名称计算机操作系统实验学期2014至2015学年第一学期学生所在系部计算机学院年级2012专业班级计科B121学生姓名张传辉学号201207014117任课教师王祥仲实验成绩计算机学院制华北科技学院计算机学院综合性实验报告第1页《操作系统》课程综合性实验报告开课实验室:基础六2014年11月30日实验题目进程调度算法模拟程序设计一、实验目的通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。二、设备与环境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页代码:importjava.io.BufferedReader;importjava.io.InputStreamReader;publicclassFCFSANDSJF{privatestaticinti;privateintj;privateinttemp;privateintm[];privateintn[];privateintprocess_number;privateintarrival_time[];privateintservices_time[];privateintstart_time[];privateintcompletion_time[];privateintturn_around_time[];privatedoubleadd1;privatedoubleadd2;privatedoubleadd3;privatedoubleadd4;privatedoubleright_turn_around_time[];privatevoidFCFS(){System.out.println(\n===FCFS先来先服务算法===);System.out.println(\n到达时间是:);for(i=0;iprocess_number;i++){System.out.print(arrival_time[i]+\t);}System.out.println(\n服务时间是:);for(i=0;iprocess_number;i++){System.out.print(services_time[i]+\t);}华北科技学院计算机学院综合性实验报告第3页System.out.println(\n开始时间是:);for(i=0;iprocess_number;i++){n[i]=arrival_time[i];m[i]=i;}for(i=0;iprocess_number-1;i++){for(j=i+1;jprocess_number;j++){if(n[i]n[j]){temp=n[i];n[i]=n[j];n[j]=temp;temp=m[i];m[i]=m[j];m[j]=temp;}}}start_time[m[0]]=arrival_time[m[0]];for(i=1;iprocess_number;i++){if(arrival_time[m[i]]start_time[m[i-1]]+services_time[m[i-1]])start_time[m[i]]=start_time[m[i-1]]+services_time[m[i-1]];elsestart_time[m[i]]=arrival_time[m[i]];}for(i=0;iprocess_number;i++){System.out.print(start_time[i]+\t);}System.out.println(\n完成时间是:);for(i=0;iprocess_number;i++){completion_time[i]=start_time[i]+services_time[i];华北科技学院计算机学院综合性实验报告第4页}for(i=0;iprocess_number;i++){System.out.print(completion_time[i]+\t);}System.out.println(\n周转时间是:);for(i=0;iprocess_number;i++){turn_around_time[i]=completion_time[i]-arrival_time[i];}for(i=0;iprocess_number;i++){System.out.print(turn_around_time[i]+\t);}add1=0;for(i=0;iprocess_number;i++){add1=add1+turn_around_time[i];}System.out.println(\n平均周转时间是:+add1/process_number);System.out.println(\n带权周转时间是:);for(i=0;iprocess_number;i++){right_turn_around_time[i]=turn_around_time[i]*1.0/services_time[i];}for(i=0;iprocess_number;i++){System.out.print(right_turn_around_time[i]+\t);}System.out.println(\n平均带权周转时间是:);add2=0;for(i=0;iprocess_number;i++){add2=add2+right_turn_around_time[i];}System.out.println(add2/process_number);华北科技学院计算机学院综合性实验报告第5页}privatevoidSJF(){System.out.println(\n===SJF:短作业优先算法===);System.out.println(\n到达时间是:);for(i=0;iprocess_number;i++){System.out.print(arrival_time[i]+\t);}System.out.println(\n服务时间是:);for(i=0;iprocess_number;i++){System.out.print(services_time[i]+\t);}System.out.println(\n开始时间是:);m[0]=0;for(i=0;iprocess_number-1;i++){if(arrival_time[i]arrival_time[i+1])m[0]=i+1;}for(i=0;iprocess_number;i++){n[i]=services_time[i];m[i+1]=i;}for(i=0;iprocess_number-1;i++){for(j=i+1;jprocess_number;j++){if(n[i]n[j]){temp=n[i];n[i]=n[j];n[j]=temp;temp=m[i+1];m[i+1]=m[j+1];m[j+1]=temp;华北科技学院计算机学院综合性实验报告第6页}}}for(i=1;iprocess_number+1;i++){if(m[0]==m[i]){for(j=i;jprocess_number;j++){m[j]=m[j+1];}}}start_time[m[0]]=arrival_time[m[0]];for(i=1;iprocess_number;i++){if(arrival_time[m[i]]start_time[m[i-1]]+services_time[m[i-1]])start_time[m[i]]=start_time[m[i-1]]+services_time[m[i-1]];elsestart_time[m[i]]=arrival_time[m[i]];}for(i=0;iprocess_number;i++){System.out.print(start_time[i]+\t);}System.out.println(\n完成时间是:);for(i=0;iprocess_number;i++){completion_time[i]=start_time[i]+services_time[i];}for(i=0;iprocess_number;i++){System.out.print(completion_time[i]+\t);}System.out.println(\n周转时间是:);for(i=0;iprocess_number;i++){turn_around_time[i]=completion_time[i]-arrival_time[i];华北科技学院计算机学院综合性实验报告第7页}for(i=0;iprocess_number;i++){System.out.print(turn_around_time[i]+\t);}add3=0;for(i=0;iprocess_number;i++){add3=add3+turn_around_time[i];}System.out.println(\n平均周转时间是:+add3/process_number);System.out.println(\n带权周转时间是:);for(i=0;iprocess_number;i++){right_turn_around_time[i]=turn_around_time[i]*1.0/services_time[i];}for(i=0;iprocess_number;i++){System.out.print(right_turn_around_time[i]+\t);}System.out.println(\n平均带权周转时间是:);add4=0;for(i=0;iprocess_number;i++){add4=add4+right_turn_around_time[i];}System.out.println(add4/process_number);}publicstaticvoidmain(String[]args)throwsException{System.out.println(请输入进程数:);FCFSANDSJFwo=newFCFSANDSJF();BufferedReaderbuf=null;buf=newBufferedReader(newInputStreamReader(System.in