處理機排程-優先順序排程(PSA)
阿新 • • 發佈:2018-12-12
優先順序排程,按照給定的優先順序排程,優先順序越高,優先被排程。
輸入:作業的數目,作業的到達時間與服務時間及其權值.
輸出:作業的呼叫序列與其週轉時間與結束時間。
執行結果:
所需資料結構:
//程序 struct Process { int id; //程序標記 int start_time; //進入時間 int surves_time; //服務時間 int turnover_time; //週轉時間 int end_time; //結束時間 double priority; //權值 };
輔助函式:
//按照權值進行排序,如果權值相等,則按照進入時間進行排序
bool cmp3(const Process &p1, const Process &p2)
{
return (p1.priority > p2.priority) || (p1.priority==p2.priority && p1.start_time<p2.start_time);
}
實現方法:
void PSA(queue<int> &q, Process *p, int n) { int i, j, finish; finish = 0; j = 0; sort(p, p+n, cmp1); for(i = 0; i < n; i++) { while(j<n && p[j].start_time <= finish) j++; sort(p+i, p+j, cmp3); //每次都按照優先順序排序。 if(p[i].start_time > finish) p[i].end_time = p[i].start_time + p[i].surves_time; else p[i].end_time = finish + p[i].surves_time; p[i].turnover_time = p[i].end_time - p[i].start_time; finish = p[i].end_time; q.push(p[i].id); } }