基于某java进程调度算法模拟程序设计短作业优先先来先服务.docx

上传人:b****3 文档编号:26736872 上传时间:2023-06-22 格式:DOCX 页数:15 大小:207.01KB
下载 相关 举报
基于某java进程调度算法模拟程序设计短作业优先先来先服务.docx_第1页
第1页 / 共15页
基于某java进程调度算法模拟程序设计短作业优先先来先服务.docx_第2页
第2页 / 共15页
基于某java进程调度算法模拟程序设计短作业优先先来先服务.docx_第3页
第3页 / 共15页
基于某java进程调度算法模拟程序设计短作业优先先来先服务.docx_第4页
第4页 / 共15页
基于某java进程调度算法模拟程序设计短作业优先先来先服务.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

基于某java进程调度算法模拟程序设计短作业优先先来先服务.docx

《基于某java进程调度算法模拟程序设计短作业优先先来先服务.docx》由会员分享,可在线阅读,更多相关《基于某java进程调度算法模拟程序设计短作业优先先来先服务.docx(15页珍藏版)》请在冰豆网上搜索。

基于某java进程调度算法模拟程序设计短作业优先先来先服务.docx

基于某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

算法正确

界面美观,布局合理

程序结构合理

操作熟练

语法、语义正确

解析完整

实验结果正确

文字流畅

报告规范

题解正确

其他:

 

评价教师签名:

年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1