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

上传人:b****5 文档编号:20477578 上传时间:2023-01-23 格式:DOCX 页数:15 大小:206.95KB
下载 相关 举报
基于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

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先来先服务算法==="

);

\n到达时间是:

"

for(i=0;

i<

process_number;

i++){

System.out.print(arrival_time[i]+"

\t"

}

\n服务时间是:

System.out.print(services_time[i]+"

\n开始时间是:

n[i]=arrival_time[i];

m[i]=i;

process_number-1;

for(j=i+1;

j<

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;

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]];

else

start_time[m[i]]=arrival_time[m[i]];

System.out.print(start_time[i]+"

\n完成时间是:

completion_time[i]=start_time[i]+services_time[i];

System.out.print(completion_time[i]+"

\n周转时间是:

turn_around_time[i]=completion_time[i]-arrival_time[i];

System.out.print(turn_around_time[i]+"

add1=0;

add1=add1+turn_around_time[i];

\n平均周转时间是:

+add1/process_number);

\n带权周转时间是:

right_turn_around_time[i]=turn_around_time[i]*1.0/services_time[i];

System.out.print(right_turn_around_time[i]+"

\n平均带权周转时间是:

add2=0;

add2=add2+right_turn_around_time[i];

System.out.println(add2/process_number);

}

privatevoidSJF(){

\n===SJF:

短作业优先算法==="

m[0]=0;

if(arrival_time[i]>

arrival_time[i+1])

m[0]=i+1;

n[i]=services_time[i];

m[i+1]=i;

temp=m[i+1];

m[i+1]=m[j+1];

m[j+1]=temp;

process_number+1;

if(m[0]==m[i]){

for(j=i;

m[j]=m[j+1];

add3=0;

add3=add3+turn_around_time[i];

+add3/process_number);

add4=0;

add4=add4+right_turn_around_time[i];

System.out.println(add4/process_number);

publicstaticvoidmain(String[]args)throwsException{

请输入进程数:

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;

\n请输入各进程到达时间"

wo.process_number;

str=buf.readLine();

wo.arrival_time[i]=Integer.parseInt(str);

\n请输入各个进程服务时间"

str2=buf.readLine();

wo.services_time[i]=Integer.parseInt(str2);

该进程数为"

+wo.process_number);

\n到达时间为"

System.out.print(wo.arrival_time[i]+"

\n服务时间为:

System.out.print(wo.services_time[i]+"

\n======先来先服务【0】========"

\n======短作业优先【1】========"

\n======退出系统【2】========"

Stringstr3=null;

str3=buf.readLine();

i=Integer.parseInt(str3);

while(i!

=2){

switch(i){

case0:

wo.FCFS();

break;

case1:

wo.SJF();

default:

System.out.println("

\n输入有误,请重新输入"

系统已退出!

}

四、实验结果及分析

运行结果

分析

FCFS是最简单的调度算法,该算法既可用于作业调度,也可用于进度调度。

当在作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,或者说它是优先考虑在系统中等待时间最长的作业,而不管该作业所需执行时间的长短,从后背作业队列中选择几个最先进入该队列的作业,将它们调入内存,为它们分配资源和创建进程。

然后把它放入就绪队列。

SJF算法是以作业长短来计算优先级,作业越短,其优先级越高。

作业的长短是以作业所要求的运行时间来衡量的。

SJF算法可以分别用于作业调度和进程调度。

在把短作业优先调度算法用于作业调度时,它将从外存的作业后备队列中选择若干个估计运行时间最短的作业,优先将它们调入内存运行。

教师评价

评定项目

A

B

C

D

算法正确

界面美观,布局合理

程序结构合理

操作熟练

语法、语义正确

解析完整

实验结果正确

文字流畅

报告规范

题解正确

其他:

评价教师签名:

年月日

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

当前位置:首页 > 外语学习 > 英语学习

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

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