操作系统FCFS算法和SPF算法源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 平均带权周转时