基于某java进程调度算法模拟程序设计短作业优先先来先服务.docx
- 文档编号:26736872
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:15
- 大小:207.01KB
基于某java进程调度算法模拟程序设计短作业优先先来先服务.docx
《基于某java进程调度算法模拟程序设计短作业优先先来先服务.docx》由会员分享,可在线阅读,更多相关《基于某java进程调度算法模拟程序设计短作业优先先来先服务.docx(15页珍藏版)》请在冰豆网上搜索。
基于某java进程调度算法模拟程序设计短作业优先先来先服务
华北科技学院计算机学院综合性实验
实验报告
课程名称计算机操作系统
实验学期2014至2015学年第一学期
学生所在系部计算机学院
年级2012专业班级计科B121
学生姓名张传辉学号201207014117
任课教师王祥仲
实验成绩
计算机学院制
《操作系统》课程综合性实验报告
开课实验室:
基础六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)分析程序运行的结果,谈一下自己的认识。
代码:
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;i System.out.print(arrival_time[i]+"\t"); } System.out.println("\n服务时间是: "); for(i=0;i System.out.print(services_time[i]+"\t"); } System.out.println("\n开始时间是: "); for(i=0;i n[i]=arrival_time[i]; m[i]=i; } for(i=0;i for(j=i+1;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;i if(arrival_time[m[i]] start_time[m[i]]=start_time[m[i-1]]+services_time[m[i-1]]; else start_time[m[i]]=arrival_time[m[i]]; } for(i=0;i System.out.print(start_time[i]+"\t"); } System.out.println("\n完成时间是: "); for(i=0;i completion_time[i]=start_time[i]+services_time[i]; } for(i=0;i System.out.print(completion_time[i]+"\t"); } System.out.println("\n周转时间是: "); for(i=0;i turn_around_time[i]=completion_time[i]-arrival_time[i]; } for(i=0;i System.out.print(turn_around_time[i]+"\t"); } add1=0; for(i=0;i add1=add1+turn_around_time[i]; } System.out.println("\n平均周转时间是: "+add1/process_number); System.out.println("\n带权周转时间是: "); for(i=0;i right_turn_around_time[i]=turn_around_time[i]*1.0/services_time[i]; } for(i=0;i System.out.print(right_turn_around_time[i]+"\t"); } System.out.println("\n平均带权周转时间是: "); add2=0; for(i=0;i add2=add2+right_turn_around_time[i]; } System.out.println(add2/process_number); } privatevoidSJF(){ System.out.println("\n===SJF: 短作业优先算法==="); System.out.println("\n到达时间是: "); for(i=0;i System.out.print(arrival_time[i]+"\t"); } System.out.println("\n服务时间是: "); for(i=0;i System.out.print(services_time[i]+"\t"); } System.out.println("\n开始时间是: "); m[0]=0; for(i=0;i if(arrival_time[i]>arrival_time[i+1]) m[0]=i+1; } for(i=0;i n[i]=services_time[i]; m[i+1]=i; } for(i=0;i for(j=i+1;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; } } } for(i=1;i if(m[0]==m[i]){ for(j=i;j m[j]=m[j+1]; } } } start_time[m[0]]=arrival_time[m[0]]; for(i=1;i if(arrival_time[m[i]] start_time[m[i]]=start_time[m[i-1]]+services_time[m[i-1]]; else start_time[m[i]]=arrival_time[m[i]]; } for(i=0;i System.out.print(start_time[i]+"\t"); } System.out.println("\n完成时间是: "); for(i=0;i completion_time[i]=start_time[i]+services_time[i]; } for(i=0;i System.out.print(completion_time[i]+"\t"); } System.out.println("\n周转时间是: "); for(i=0;i turn_around_time[i]=completion_time[i]-arrival_time[i]; } for(i=0;i System.out.print(turn_around_time[i]+"\t"); } add3=0; for(i=0;i add3=add3+turn_around_time[i]; } System.out.println("\n平均周转时间是: "+add3/process_number); System.out.println("\n带权周转时间是: "); for(i=0;i right_turn_around_time[i]=turn_around_time[i]*1.0/services_time[i]; } for(i=0;i System.out.print(right_turn_around_time[i]+"\t"); } System.out.println("\n平均带权周转时间是: "); add4=0; for(i=0;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)); Stringstr1=null; str1=buf.readLine(); wo.process_number=Integer.parseInt(str1); wo.arrival_time=newint[wo.process_number]; wo.services_time=newint[wo.process_number]; wo.start_time=newint[wo.process_number+1]; pletion_time=newint[wo.process_number+1]; wo.turn_around_time=newint[wo.process_number+1]; wo.right_turn_around_time=newdouble[wo.process_number+1]; wo.m=newint[wo.process_number+1]; wo.n=newint[wo.process_number]; Stringstr=null; Stringstr2=null; System.out.println("\n请输入各进程到达时间"); for(i=0;i str=buf.readLine(); wo.arrival_time[i]=Integer.parseInt(str); } System.out.println("\n请输入各个进程服务时间"); for(i=0;i str2=buf.readLine(); wo.services_time[i]=Integer.parseInt(str2); } System.out.println("该进程数为"+wo.process_number); System.out.println("\n到达时间为"); for(i=0;i System.out.print(wo.arrival_time[i]+"\t"); } System.out.println("\n服务时间为: "); for(i=0;i System.out.print(wo.services_time[i]+"\t"); } System.out.println("\n======先来先服务【0】========"); System.out.println("\n======短作业优先【1】========"); System.out.println("\n======退出系统【2】========"); Stringstr3=null; str3=buf.readLine(); i=Integer.parseInt(str3); while(i! =2){ switch(i){ case0: wo.FCFS(); break; case1: wo.SJF(); break; default: System.out.println("\n输入有误,请重新输入"); } System.out.println("\n======先来先服务【0】========"); System.out.println("\n======短作业优先【1】========"); System.out.println("\n======退出系统【2】========"); str3=buf.readLine(); i=Integer.parseInt(str3); } System.out.println("系统已退出! "); } } 4、实验结果及分析 运行结果 分析 FCFS是最简单的调度算法,该算法既可用于作业调度,也可用于进度调度。 当在作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,或者说它是优先考虑在系统中等待时间最长的作业,而不管该作业所需执行时间的长短,从后背作业队列中选择几个最先进入该队列的作业,将它们调入内存,为它们分配资源和创建进程。 然后把它放入就绪队列。 SJF算法是以作业长短来计算优先级,作业越短,其优先级越高。 作业的长短是以作业所要求的运行时间来衡量的。 SJF算法可以分别用于作业调度和进程调度。 在把短作业优先调度算法用于作业调度时,它将从外存的作业后备队列中选择若干个估计运行时间最短的作业,优先将它们调入内存运行。 教师评价 评定项目 A B C D 评定项目 A B C D 算法正确 界面美观,布局合理 程序结构合理 操作熟练 语法、语义正确 解析完整 实验结果正确 文字流畅 报告规范 题解正确 其他: 评价教师签名: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 java 进程 调度 算法 模拟 程序设计 作业 优先 先来先 服务
![提示](https://static.bdocx.com/images/bang_tan.gif)