操作系统FCFS算法和SPF算法源代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.#include

2.#define MAX 5

3.typedef int Time;

4.typedef struct

5.{

6.Time DD;//到达时间

7.Time FW;//服务时间

8.Time WC;//完成时间

9.int FLAG;

10.

11.} TCB;

12.typedef struct

13.{

14.TCB job[MAX];

15.int front;//队首

16.int reDD; //队尾

17.} SQ;

18.int main()

19.{

20.int K=MAX;

21.Time time=0;

22.TCB A= {0,4},B= {1,3},C= {2,4},D= {3,2},E= {4,4};

23.TCB tcb[MAX]= {A,B,C,D,E};

24.double Tatime[MAX]= {0}; //周转时间

25.double WTatime[MAX]= {0}; //带权周转时间

26.

27.TCB tcb0[MAX]= {A,B,C,D,E};

28.SQ sq;

29.sq.front=sq.reDD=0;

30.printf("FCFS算法\n");

31.for(time=0; K; time++)

32.{

33.for(int i=0; i

34.{

35.if(tcb0[i].DD==time)

36.{

37.sq.job[sq.reDD]=tcb0[i];

38.sq.job[sq.reDD].FLAG=i;

39.sq.reDD=(sq.reDD+1)%MAX;

40.}

41.}

42.if(time!=0)sq.job[sq.front].FW--;

43.if(sq.job[sq.front].FW==0)

44.{

45.int temp=sq.job[sq.front].FLAG;

46.tcb0[temp].WC=time;

47.printf("\n进程%d完成到达时间:%d 服务时间:%d 完成时

间:%d\n",temp,tcb0[temp].DD,tcb0[temp].FW,tcb0[temp].WC);

48.Tatime[temp]=(double)tcb0[temp].WC-(double)tcb0[temp].DD;

49.WTatime[temp]=(double)Tatime[temp]/(double)tcb0[temp].FW;

50.printf("\n周转时间:%.2f 带权周转时

间:%.2f\n",Tatime[temp],WTatime[temp]);

51.sq.front=(sq.front+1)%MAX;

52.K--;

53.}

54.}

55.for(int i=0; i

56.{

57.if(i==MAX-1)

58.{

59.printf("\n平均周转时间:%.2f 平均带权周转时间:%.2f\n\n",Tatime[MAX-

1]/MAX,WTatime[MAX-1]/MAX);

60.break;

61.}

62.Tatime[i+1]+=Tatime[i];

63.WTatime[i+1]+=WTatime[i];

64.}

65.printf("SPF算法\n\n");

66.K=MAX;

67.TCB tcb1[MAX]= {A,B,C,D,E};

68.int MIN=-1;

69.for(time=0; K; time++)

70.{

71.printf("Time=%d ",time);

72.if(MIN==-1)

73.{

74.for(int i=0; i

75.{

76.if(time>=tcb1[i].DD)

77.{

78.MIN=i;

79.break;

80.}

81.}

82.for(int i=0; i

83.{

84.if(tcb1[MIN].FW>tcb1[i].FW&&time>=tcb1[i].DD)

85.{

86.MIN=i;

87.}

88.}

89.}

90.if(time!=0)

91.{

92.tcb1[MIN].FW--;

93.}

94.if(MIN!=-1&&tcb1[MIN].FW==0)

95.{

96.tcb1[MIN].WC=time;

97.tcb1[MIN].FW=tcb[MIN].FW;

98.printf("\n进程%d完成到达时间:%d 服务时间:%d 完成时

间:%d\n",MIN,tcb1[MIN].DD,tcb1[MIN].FW,tcb1[MIN].WC);

99.Tatime[MIN]=(double)tcb1[MIN].WC-(double)tcb1[MIN].DD;

100.WTatime[MIN]=(double)Tatime[MIN]/(double)tcb1[MIN].FW; 101.printf("周转时间:%.2f 带权周转时

间:%.2f\n",Tatime[MIN],WTatime[MIN]);

102.K--;

103.tcb1[MIN].FW=2147483647;

104.MIN=-1;

105.}

106.}

107.for(int i=0; i

108.{

109.if(i==MAX-1)

110.{

111.printf("\n平均周转时间:%.2f 平均带权周转时

相关文档
最新文档