模擬短作業優先演算法、時間片輪轉法和優先數演算法的執**況,並動態畫出其程序執行的gantt圖,計算以上演算法的每個程序的響應時間和周轉時間。
/*
name:geting
time:2014-12-10
*/#includeusing namespace std;
const int max = 100;
//定義程序結構體
struct process;
struct gantt;
process p[max]; //程序陣列
gantt g[max]; //gantt圖陣列
int p_num; //實際程序數
char filename[20]; //程序序列檔名
int maxreachtime; //最大到達時間
int bereached[max]; //到達程序陣列
int reach_num; //到達程序數
//讀檔案
int readfile()
else
if(c == eof)
else
//輸出所讀入的程序資料
cout << endl << "從檔案 " << filename << " 讀入的程序資料:" << endl << endl;
cout << "程序名 到達時間 執行時間 優先數" << endl;
for(i = 0; i < p_num; i++)
cout << endl << "程序總數:" << p_num << endl << endl;
return 0;
} } }
//找到所有程序中的最大到達時間
void getmaxreachtime()
}//全部初始化
void init()
p_num = 0;
maxreachtime = 0;
reach_num = 0;
readfile();
getmaxreachtime();
}//檢查是否所有程序都執行結束
bool checkfinish()
return true;
}//顯示gantt圖
void showgantt()
cout << endl;
}//顯示每個程序的響應時間和周轉時間
void showtime()
cout << endl;
}//更新到達程序陣列和到達程序數
void updatereacharray(int t)
} }}//短作業優先演算法,搶占排程
void spn()
}if(ilmin != imin) //若當前執行程序和上個執行程序不是同乙個,則j++
g[j].run_time += 1;
p[imin].run_time -= 1;
if(p[imin].response_time == -1) p[imin].response_time = t - p[imin].reach_time; //記錄該程序響應時間
if(p[imin].run_time == 0) p[imin].turnaround_time = t + 1 - p[imin].reach_time; //記錄該程序周轉時間
if(checkfinish()) break;
t++; //時間加1
} showgantt();
showtime();
}//時間片輪轉法演算法,搶占排程,btime為時間片大小的引數
void rr(int btime)
if(k == reach_num) k = 0; //已執行到佇列最後程序之後,從佇列最前重新執行
while(p[bereached[k]].run_time == 0) //如果該程序已執行結束,跳到下乙個程序
strcpy(g[j].p_name, p[bereached[k]].p_name);
g[j].run_time += 1;
p[bereached[k]].run_time -= 1;
if(p[bereached[k]].response_time == -1) p[bereached[k]].response_time = t - p[bereached[k]].reach_time; //記錄該程序響應時間
if(p[bereached[k]].run_time == 0) p[bereached[k]].turnaround_time = t + 1 - p[bereached[k]].reach_time; //記錄該程序周轉時間
if(checkfinish()) break;
t++; //時間加1
fbtime++; //已用時間片加1
} showgantt();
showtime();
}//優先數演算法
void priority()
}if(ilmin != imin) //若當前執行程序和上個執行程序不是同乙個,則j++
g[j].run_time += 1;
p[imin].run_time -= 1;
if(p[imin].response_time == -1) p[imin].response_time = t - p[imin].reach_time; //記錄該程序響應時間
if(p[imin].run_time == 0) p[imin].turnaround_time = t + 1 - p[imin].reach_time; //記錄該程序周轉時間
if(checkfinish()) break;
t++; //時間加1
} showgantt();
showtime();
}void information()
void main()
程序排程模擬演算法
1.先進先出排程。程序按申請進入記憶體的時間執行。2.優先順序排程。程序按作業系統分配的優先順序,執行。3.時間輪轉排程。程序按申請進入記憶體的時間依次執行乙個時間片。4.分級排程。時間輪轉排程 優先順序排程。先執行優先順序較高的按時間輪轉排程的方法執行,在執行優先順序較低的。a.設計程序控制塊pc...
程序排程演算法模擬
最近學了作業系統的程序排程的各種演算法,手癢實現了一下,僅供參考,若有bug,請指出.v 先到先服務 fcfs 1 先來先服務排程演算法 2 include 3 define time 500 限制最長程序執行時間 4 define n 100 5 define state int 6using n...
程序排程模擬
實驗平台 windows 7,vs2010 實驗目標 模擬短作業優先演算法,時間片輪轉演算法,和優先數演算法,並動態畫出grant圖,計算每個程序的響應時間和周轉時間 資料結構 class process fin.close void sjf void void preemptive sjf int...