FCFS,SJF(java实现)

  1 import java.io.BufferedReader;
  2
  3 import java.io.InputStreamReader;
  4
  5 public class FCFSANDSJF {
  6
  7   private  static int i;
  8
  9   private  int j;
 10
 11   private  int temp;
 12
 13   private int m[];
 14
 15   private int n[];
 16
 17   private int process_number;//进程数
 18
 19   private int arrival_time[];//到达时间
 20
 21   private int services_time[];//服务时间
 22
 23   private int start_time[];//开始时间
 24
 25   private int completion_time[];//完成时间
 26
 27   private int turn_around_time[];//周转时间
 28
 29   private double add1;
 30
 31   private double add2;
 32
 33   private double add3;
 34
 35   private double add4;
 36
 37   private double right_turn_around_time[];
 38
 39 private void FCFS(){
 40
 41  System.out.println("\n===FCFS先来先服务算法===");
 42
 43  System.out.println("\n到达时间是:");
 44
 45  for(i=0;i<process_number;i++){
 46
 47   System.out.print(arrival_time[i]+"\t");
 48
 49  }
 50
 51  System.out.println("\n服务时间是:");
 52
 53  for(i=0;i<process_number;i++){
 54
 55   System.out.print(services_time[i]+"\t");
 56
 57  }
 58
 59  System.out.println("\n开始时间是:");
 60
 61  for(i=0;i<process_number;i++){
 62
 63   n[i]=arrival_time[i];
 64
 65   m[i]=i;
 66
 67  }
 68
 69  for(i=0;i<process_number-1;i++){
 70
 71   for(j=i+1;j<process_number;j++){
 72
 73    if(n[i]>n[j]){
 74
 75     temp=n[i];
 76
 77     n[i]=n[j];
 78
 79     n[j]=temp;
 80
 81     temp=m[i];
 82
 83     m[i]=m[j];
 84
 85     m[j]=temp;
 86
 87    }
 88
 89   }
 90
 91  }
 92
 93  start_time[m[0]]=arrival_time[m[0]];
 94
 95  for(i=1;i<process_number;i++){
 96
 97   if(arrival_time[m[i]]<start_time[m[i-1]]+services_time[m[i-1]])
 98
 99    start_time[m[i]]=start_time[m[i-1]]+services_time[m[i-1]];
100
101   else
102
103    start_time[m[i]]=arrival_time[m[i]];
104
105  }
106
107  for(i=0;i<process_number;i++){
108
109    System.out.print(start_time[i]+"\t");
110
111   }
112
113  System.out.println("\n完成时间是:");
114
115  for(i=0;i<process_number;i++){
116
117   completion_time[i]=start_time[i]+services_time[i];
118
119  }
120
121  for(i=0;i<process_number;i++){
122
123   System.out.print(completion_time[i]+"\t");
124
125  }
126
127  System.out.println("\n周转时间是:");
128
129  for(i=0;i<process_number;i++){
130
131   turn_around_time[i]=completion_time[i]-arrival_time[i];
132
133  }
134
135  for(i=0;i<process_number;i++){
136
137   System.out.print(turn_around_time[i]+"\t");
138
139  }
140
141  add1=0;
142
143  for(i=0;i<process_number;i++){
144
145   add1=add1+turn_around_time[i];
146
147  }
148
149  System.out.println("\n平均周转时间是:"+add1/process_number);
150
151  System.out.println("\n带权周转时间是:");
152
153  for(i=0;i<process_number;i++){
154
155   right_turn_around_time[i]=turn_around_time[i]*1.0/services_time[i];
156
157  }
158
159  for(i=0;i<process_number;i++){
160
161   System.out.print(right_turn_around_time[i]+"\t");
162
163  }
164
165  System.out.println("\n平均带权周转时间是:");
166
167  add2=0;
168
169  for(i=0;i<process_number;i++){
170
171   add2=add2+right_turn_around_time[i];
172
173  }
174
175  System.out.println(add2/process_number);
176
177
178
179 }
180
181 private void SJF(){
182
183  System.out.println("\n===SJF:短作业优先算法===");
184
185  System.out.println("\n到达时间是:");
186
187  for(i=0;i<process_number;i++){
188
189   System.out.print(arrival_time[i]+"\t");
190
191  }
192
193  System.out.println("\n服务时间是:");
194
195  for(i=0;i<process_number;i++){
196
197   System.out.print(services_time[i]+"\t");
198
199  }
200
201  System.out.println("\n开始时间是:");
202
203  m[0]=0;
204
205  for(i=0;i<process_number-1;i++){
206
207   if(arrival_time[i]>arrival_time[i+1])
208
209    m[0]=i+1;
210
211  }
212
213  for(i=0;i<process_number;i++){
214
215   n[i]=services_time[i];
216
217   m[i+1]=i;
218
219  }
220
221  for(i=0;i<process_number-1;i++){
222
223   for(j=i+1;j<process_number;j++){
224
225    if(n[i]>n[j]){
226
227     temp=n[i];
228
229     n[i]=n[j];
230
231     n[j]=temp;
232
233     temp=m[i+1];
234
235     m[i+1]=m[j+1];
236
237     m[j+1]=temp;
238
239    }
240
241   }
242
243  }
244
245  for(i=1;i<process_number+1;i++){
246
247   if(m[0]==m[i]){
248
249    for(j=i;j<process_number;j++){
250
251     m[j]=m[j+1];
252
253    }
254
255   }
256
257  }
258
259  start_time[m[0]]=arrival_time[m[0]];
260
261  for(i=1;i<process_number;i++){
262
263   if(arrival_time[m[i]]<start_time[m[i-1]]+services_time[m[i-1]])
264
265    start_time[m[i]]=start_time[m[i-1]]+services_time[m[i-1]];
266
267   else
268
269    start_time[m[i]]=arrival_time[m[i]];
270
271  }
272
273  for(i=0;i<process_number;i++){
274
275    System.out.print(start_time[i]+"\t");
276
277  }
278
279  System.out.println("\n完成时间是:");
280
281  for(i=0;i<process_number;i++){
282
283   completion_time[i]=start_time[i]+services_time[i];
284
285  }
286
287  for(i=0;i<process_number;i++){
288
289   System.out.print(completion_time[i]+"\t");
290
291  }
292
293  System.out.println("\n周转时间是:");
294
295  for(i=0;i<process_number;i++){
296
297   turn_around_time[i]=completion_time[i]-arrival_time[i];
298
299  }
300
301  for(i=0;i<process_number;i++){
302
303   System.out.print(turn_around_time[i]+"\t");
304
305  }
306
307  add3=0;
308
309  for(i=0;i<process_number;i++){
310
311   add3=add3+turn_around_time[i];
312
313  }
314
315  System.out.println("\n平均周转时间是:"+add3/process_number);
316
317  System.out.println("\n带权周转时间是:");
318
319  for(i=0;i<process_number;i++){
320
321   right_turn_around_time[i]=turn_around_time[i]*1.0/services_time[i];
322
323  }
324
325  for(i=0;i<process_number;i++){
326
327   System.out.print(right_turn_around_time[i]+"\t");
328
329  }
330
331  System.out.println("\n平均带权周转时间是:");
332
333  add4=0;
334
335  for(i=0;i<process_number;i++){
336
337   add4=add4+right_turn_around_time[i];
338
339  }
340
341  System.out.println(add4/process_number);
342
343 }
344
345 public static void main(String[] args) throws Exception{
346
347  System.out.println("请输入进程数:");
348
349  FCFSANDSJF wo=new FCFSANDSJF();
350
351  BufferedReader buf=null;
352
353  buf=new BufferedReader(new InputStreamReader(System.in));
354
355  String str1=null;
356
357  str1=buf.readLine();
358
359  wo.process_number=Integer.parseInt(str1);
360
361  wo.arrival_time=new int[wo.process_number];
362
363  wo.services_time=new int[wo.process_number];
364
365  wo.start_time=new int[wo.process_number+1];
366
367  wo.completion_time=new int[wo.process_number+1];
368
369  wo.turn_around_time=new int[wo.process_number+1];
370
371  wo.right_turn_around_time=new double[wo.process_number+1];
372
373  wo.m=new int[wo.process_number+1];
374
375  wo.n=new int[wo.process_number];
376
377  String str=null;
378
379  String str2=null;
380
381  System.out.println("\n请输入各进程到达时间");
382
383  for(i=0;i<wo.process_number;i++){
384
385   str=buf.readLine();
386
387   wo.arrival_time[i]=Integer.parseInt(str);
388
389  }
390
391  System.out.println("\n请输入各个进程服务时间");
392
393  for(i=0;i<wo.process_number;i++){
394
395   str2=buf.readLine();
396
397   wo.services_time[i]=Integer.parseInt(str2);
398
399  }
400
401  System.out.println("该进程数为"+wo.process_number);
402
403  System.out.println("\n到达时间为");
404
405  for(i=0;i<wo.process_number;i++){
406
407   System.out.print(wo.arrival_time[i]+"\t");
408
409  }
410
411  System.out.println("\n服务时间为:");
412
413  for(i=0;i<wo.process_number;i++){
414
415   System.out.print(wo.services_time[i]+"\t");
416
417  }
418
419  System.out.println("\n======先来先服务【0】========");
420
421  System.out.println("\n======短作业优先【1】========");
422
423  System.out.println("\n======退出系统【2】========");
424
425  String str3=null;
426
427  str3=buf.readLine();
428
429  i=Integer.parseInt(str3);
430
431  while(i!=2){
432
433   switch(i){
434
435   case 0:
436
437    wo.FCFS();
438
439    break;
440
441   case 1:
442
443    wo.SJF();
444
445    break;
446
447   default:
448
449    System.out.println("\n输入有误,请重新输入");
450
451   }
452
453   System.out.println("\n======先来先服务【0】========");
454
455   System.out.println("\n======短作业优先【1】========");
456
457   System.out.println("\n======退出系统【2】========");
458
459   str3=buf.readLine();
460
461   i=Integer.parseInt(str3);
462
463  }
464
465  System.out.println("系统已退出!");
466
467 }
468
469 }

----------------转载非原创

时间: 2024-10-06 21:27:25

FCFS,SJF(java实现)的相关文章

实验二:作业调度模拟程序 (FCFS SJF算法)

#include<stdio.h> #include<string.h> struct job{ char name[10]; int starttime; //作业到达系统时间 int needtime; //作业运行时间 int runtime; //作业周转时间 int endtime; //作业结束时间 double dqzztime; //带权周转时间 double xiangyingbi; }; void fcfs(struct job jobs[50],int n);

FCFS,SJF,HRRN算法实现作业调度

实验原理 (1)定义程序控制块的结构体和程序工作时间的结构体,JCB可以包含以下信息:作业名.提交(到达)时间.所需的运行时间.所需的资源.作业状态.链指针等等.程序工作时间包括作业运行时刻,作业完成时刻,周转时间,带权周转时间. (2)主程序默认采用的算法是先来先服务,当选择另外两种算法时通过主程序去调用这种作业调度算法,分别是SJF,HRN. (3)通过构造进程输入input(),进程运行结果输出output(),disp(),以及使整个程序正常运行的函数块等,通过主函数调用方法函数的想法来

实验二作业调度模拟程序(先来先服务(FCFS)调度算法)

1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 作业调度算法: 1)       采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2)       短作业优先 (SJF) 调度算法,优先

实验二 作业调度模拟程序

实验二 作业调度模拟程序 一.        实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二.        实验内容和要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素.      作业调度算法: 1)      采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间

实验二 实验报告

实验二 作业调度模拟程序 13物联网  陈梓帆  201306104108 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 作业调度算法: 1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统

实验3 201306104118 余佳梓

一. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二. 实验内容和要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 作业调度算法: 1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2) 短作业优先 (SJF) 调度算法,优先调度要求运行时间

作业调度模拟程序

13物联网 201306104132 柴铱琳 一. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二. 实验内容和要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 作业调度算法: 1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2) 短作业优

1111实验二 作业调度模拟实验

实验二.作业调度模拟实验 物联网工程 张怡 201306104149 一.实验目的  (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二.实验内容和要求 1.至少用三种调度算法: 1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2) 短作业优先 (SJF) 调度算法,优先调度要求运行时间最短的作业. 3) 响应比高者优先(HRRN)调度算法,为每个作业设置一个优先权(响应比),调度之前先计算各作业的优先权,优先数高

实验二作业调度

实验二作业调度模拟程序 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 作业调度算法: 1)       采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2)