// // 多重プログラミング機構でのFCFSシミュレーション // #include "stdio.h" #include "conio.h" #define NumJob 4 #define MaxTime 16 #define MaxExecTime 300 // cpuBurstには,CPUバースト時間のとき1, CPU遊休時間のとき0を入れる。 // 以下は「護送船団効果」が現れるよう設定してある。 int cpuBurst[][MaxTime]={{1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0}, {1,0,1,1,1,1,0,1,0,1,0,1,0,1,0,0}, {1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,0}, {1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0}}; int checkEnd(int cpuCount[],int N){ // シミュレーション終了の判定 for(int i=0;i=0;n--){ for(int i=0;i0)return n; } return 0; } int main(void){ int cpuProc[MaxExecTime], cpuCount[NumJob], tCount=0, Exe=-1; for(int i=0;i=0){ if(cpuBurst[Exe][cpuCount[Exe]]==0) Exe=-1;} if(Exe<0){ // CPUバーストのプロセスを見つける for(int i=0;i=MaxExecTime){ printf("\n *** Error : Area Over Flow");break;} cpuProc[tCount++]=Exe; // 現実行プロセス番号を保存 } int n=effectiveNumTime(cpuBurst); // 後ろの0を無視 printf("\n\n ** CPU Burst\n "); for(int j=1;j<=n;j++) printf("%2d",j %10); for(int i=0;i=0;n--)if(cpuBurst[i][n]>0) break;//0を無視 for(int j=0;j<=n;j++){ if(cpuBurst[i][j]!=0) printf("="); else printf("…"); } } for(n=tCount-1;n>=0;n--)if(cpuProc[n]>0) break;//後ろの0を無視して printf("\n\n ** Time Chart\n     "); for(int j=1;j<=n+1;j++)printf("%2d",j%10); for(int i=0;i=0;mm--) if(cpuProc[mm]==i)break; for(int j=0;j<=mm;j++){ if(cpuProc[j]==i)printf("="); else printf("…"); } } int T=0; printf("\n\n Start and End Time\n"); for(int i=0;i=0;mm--) if(cpuProc[mm]==i)break; mm++; T += mm; printf("\n Job %C : Start Time = %3d End time = %3d ", 'A'+ i,ms,mm); } double dT = (double)T / (double)NumJob; printf("\n\n Average of Turnaround Time = %8.4lf\n\n", dT); getchar(); return 0; }