进程调度算法java_JAVA从入门到精通之实现进程调度算法 RR(时间片轮转)

本篇教程探讨了JAVA从入门到精通之实现进程调度算法 RR(时间片轮转),希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

f8c7168f5abb867d85cafaa780bd3c0a.png

<

RR类(主类)

只有calc()中涉及了算法,init()和printResult()都只有简单的输入输出操作。

1 package xqy.algorithm;

2

3 import java.util.*;

4

5 import xqy.Util.Tools;

6 import xqy.been.Process;

7

8 /**

9  * @author xqy

10  * @date 2018年12月19日19:14:49

11  */

12 public class RR {

13     private int processNumber;

14     private ArrayList processList;

15     private int timeSlice;

16

17     public RR() {

18         init();

19         calc();

20         Tools.printResult(processList);

21     }

22

23     private void init() {

24         Scanner sc = new Scanner(System.in);

25

26         System.out.print(" Please enter the slice time:");

27         timeSlice = sc.nextInt();

28         System.out.print(" please enter the process num:");

29         processNumber = sc.nextInt();

30

31         processList = new ArrayList();

32         for (int i = 0; i 

33             processList.add(new Process());

34         }

35

36         System.out.println(" Please enter each process arrival time:");

37         for (int i = 0; i 

38             System.out.print("    Process" + (i + 1) + ":");

39             processList.get(i).setArrivalTime(sc.nextInt());

40         }

41

42         System.out.println(" Please enter each process service time:");

43         for (int i = 0; i 

44             System.out.print("    Process" + (i + 1) + ":");

45             int servicesTime = sc.nextInt();

46             System.out.println();

47

48             processList.get(i).setServicesTime(servicesTime);

49             processList.get(i).setRemainServiceTime(servicesTime);

50         }

51     }

52

53     private void calc() {

54         int timeNow = 0;

55         int processRemain = processNumber;

56         Process opProcess;

57

58         while (processRemain != 0) {

59             for (int i = 0; i 

60                 opProcess = processList.get(i);

61

62                 if (opProcess.getRemainServiceTime() > 0) {

63                     // First time

64                     if (opProcess.getServicesTime() == opProcess.getRemainServiceTime()) {

65                         int waitTime = timeNow - opProcess.getArrivalTime();

66

67                         opProcess.setStartTime(timeNow);

68                         opProcess.setWaitTime(waitTime);

69                     }

70

71                     // Calculating remain service time

72                     int remainServiceTime = opProcess.getRemainServiceTime() - timeSlice;

73                     opProcess.setRemainServiceTime(remainServiceTime);

74

75                     // Last time

76                     if (remainServiceTime <= 0) {

77                         int completionTime = timeNow + timeSlice; // 进程是运行完当前时间片才结束的

78                         int turnAroundTime = completionTime

79                                 - opProcess.getArrivalTime();

80                         double turnAroundTimeWithWeight = 1.0 * turnAroundTime

81                                 / opProcess.getServicesTime();

82

83                         opProcess.setCompletionTime(completionTime);

84                         opProcess.setTurnAroundTime(turnAroundTime);

85                         opProcess.setTurnAroundTimeWithWeight(

86                                 turnAroundTimeWithWeight);

87

88                         processRemain--;

89                     }

90

91                     System.out.println("    #STEP#Process" + (i + 1) + " remain service time:" + opProcess.getRemainServiceTime() + ((remainServiceTime <= 0)?" Finish":""));

92                     timeNow += timeSlice;

93                 } else {

94                     // do noting, because this process has been completed.

95                 }

96

97             }

98         }

99     }

100

101     public static void main(String [] args) {

102         new RR();

103     }

104 }

Process类

模拟了进程,对属性进行了封装。

1 package xqy.been;

2

3 public class Process {

4     private int arrivalTime;

5     private int servicesTime;

6     private int remainServiceTime;

7     private int startTime;

8     private int waitTime;

9     private int completionTime;

10

11     /**

12      * turnAroundTime = completionTime - arrivalTime

13      */

14     private int turnAroundTime;

15

16     /**

17      * turnAroundTimeWithWeight = turnAroundTime / servicesTime

18      */

19     private double turnAroundTimeWithWeight;

20

21     public Process() {

22         ;

23     }

24

25     public int getArrivalTime() {

26         return arrivalTime;

27     }

28

29     public void setArrivalTime(int arrivalTime) {

30         this.arrivalTime = arrivalTime;

31     }

32

33     public int getServicesTime() {

34         return servicesTime;

35     }

36

37     public void setServicesTime(int servicesTime) {

38         this.servicesTime = servicesTime;

39     }

40

41     public int getRemainServiceTime() {

42         return remainServiceTime;

43     }

44

45     public void setRemainServiceTime(int remainServiceTime) {

46         this.remainServiceTime = remainServiceTime;

47     }

48

49     public int getStartTime() {

50         return startTime;

51     }

52

53     public void setStartTime(int startTime) {

54         this.startTime = startTime;

55     }

56

57     public int getWaitTime() {

58         return waitTime;

59     }

60

61     public void setWaitTime(int waitTime) {

62         this.waitTime = waitTime;

63     }

64

65     public int getCompletionTime() {

66         return completionTime;

67     }

68

69     public void setCompletionTime(int completionTime) {

70         this.completionTime = completionTime;

71     }

72

73     public int getTurnAroundTime() {

74         return turnAroundTime;

75     }

76

77     public void setTurnAroundTime(int turnAroundTime) {

78         this.turnAroundTime = turnAroundTime;

79     }

80

81     public double getTurnAroundTimeWithWeight() {

82         return turnAroundTimeWithWeight;

83     }

84

85     public void setTurnAroundTimeWithWeight(double turnAroundTimeWithWeight) {

86         this.turnAroundTimeWithWeight = turnAroundTimeWithWeight;

87     }

88

89     @Override

90     public String toString() {

91         return "Process [arrivalTime=" + arrivalTime + ", servicesTime="

92                 + servicesTime + ", remainServiceTime=" + remainServiceTime

93                 + ", startTime=" + startTime + ", waitTime=" + waitTime

94                 + ", completionTime=" + completionTime + ", turnAroundTime="

95                 + turnAroundTime + ", turnAroundTimeWithWeight="

96                 + turnAroundTimeWithWeight + "]";

97     }

98 }

Tools类

因为我这次作业要实现几个类似的算法,所以我把每个算法中都要用到的方法都提取出来作为单独的工具类。

也可以将这些工具方法都放入FCFS类中。

1 package xqy.Util;

2

3 import java.util.ArrayList;

4

5 import xqy.been.Process;

6

7 public class Tools {

8

9     public static double calcAverageTurnAroundTime(

10             ArrayList processList) {

11         double sum = 0;

12         for (int i = 0; i 

13             sum += processList.get(i).getTurnAroundTime();

14         }

15         return Math.round(sum / processList.size() * 100) / 100.0;

16     }

17

18     public static double calcAverageTurnAroundTimeWithWeight(

19             ArrayList processList) {

20         double sum = 0;

21         for (int i = 0; i 

22             sum += processList.get(i).getTurnAroundTimeWithWeight();

23         }

24         return Math.round(sum / processList.size() * 100) / 100.0;

25     }

26

27     public static void printResult(ArrayList processList) {

28         System.out.println("\n    #RESULT#");

29

30         System.out.print("\tArrive:\t\t");

31         for (int i = 0; i 

32             System.out.print(processList.get(i).getArrivalTime() + "\t");

33         }

34         System.out.println();

35

36         System.out.print("\tService:\t");

37         for (int i = 0; i 

38             System.out.print(processList.get(i).getServicesTime() + "\t");

39         }

40         System.out.println();

41

42         System.out.print("\tStart:\t\t");

43         for (int i = 0; i 

44             System.out.print(processList.get(i).getStartTime() + "\t");

45         }

46         System.out.println();

47

48         System.out.print("\tWait:\t\t");

49         for (int i = 0; i 

50             System.out.print(processList.get(i).getWaitTime() + "\t");

51         }

52         System.out.println();

53

54         System.out.print("\tFinish:\t\t");

55         for (int i = 0; i 

56             System.out.print(processList.get(i).getCompletionTime() + "\t");

57         }

58         System.out.println();

59

60         System.out.print("\tTurn around:\t");

61         for (int i = 0; i 

62             System.out.print(processList.get(i).getTurnAroundTime() + "\t");

63         }

64         System.out.println();

65

66         System.out.print("\tTA wight:\t");

67         for (int i = 0; i 

68             System.out.print(Math.round(processList.get(i)

69                     .getTurnAroundTimeWithWeight() * 100) / 100.0 + "\t");

70         }

71         System.out.println();

72

73         System.out.println("\tAverage turn around time:"

74                 + Tools.calcAverageTurnAroundTime(processList) + "\t");

75         System.out.println("\tAverage turn around time with wight:"

76                 + Tools.calcAverageTurnAroundTimeWithWeight(processList));

77

78         System.out.println();

79     }

80 }

本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值