模擬程序排程演算法

2021-06-27 18:32:10 字數 2923 閱讀 4104

模擬短作業優先演算法、時間片輪轉法和優先數演算法的執**況,並動態畫出其程序執行的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...