作业调度算法--高响应比优先 操作系统_处理器管理_编程题
生活随笔
收集整理的這篇文章主要介紹了
作业调度算法--高响应比优先 操作系统_处理器管理_编程题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
操作系統_處理器管理_編程題
作業調度算法–高響應比優先
輸入N個作業,輸入每個的作業名字,到達的時間,服務的時間,根據高響應比優先算法,計算出每個作業的完成的時間,周轉的時間,帶權周轉的時間(其中保留2位小數)。
輸入格式:
第1行輸入作業的數目,第2行輸入作業名字,第3行輸入到達的時間,第4行輸入服務的時間。
輸出格式:
根據到達的時間由小到大排序,第1行輸出作業名字,第2行輸出到達的時間,第3行輸出服務的時間,第4行輸出完成的時間,第5行輸出完成的時間,第六行輸出帶權周轉的時間。
輸入樣例:
給出了1組輸出。如下:
輸出樣例:
給出了相應輸出。如下:
代碼_C(gcc)
#include<stdio.h> #include<stdlib.h> struct pcb {char name[10]; int ASD; int DD; int NN; int NC; int ww; double wtime; double rp; int state; };void input(struct pcb* p, int n) {for (int i = 0; i < n; i++) {scanf("%s", p[i].name, sizeof(p[i]));}for (int i = 0; i < n; i++) {scanf("%d", &p[i].ASD);}for (int i = 0; i < n; i++) {scanf("%d", &p[i].DD);} }void output(struct pcb* p, int n) {printf("作 業 名:");for (int i = 0; i < n; i++) {if (i == n - 1) {printf("%s", p[n - 1].name);printf("\n");}else {printf("%s ", p[i].name);}}printf("到達時間:");for (int i = 0; i < n; i++) {if (i == n - 1) {printf("%d", p[n - 1].ASD);printf("\n");}else {printf("%d ", p[i].ASD);}}printf("服務時間:");for (int i = 0; i < n; i++) {if (i == n - 1) { printf("%d", p[n - 1].DD);printf("\n");}else {printf("%d ", p[i].DD);}}printf("完成時間:");for (int i = 0; i < n; i++) {if (i == n - 1) {printf("%d", p[n - 1].NC);printf("\n");}else {printf("%d ", p[i].NC);}}printf("周轉時間:");for (int i = 0; i < n; i++) {if (i == n - 1) {printf("%d", p[n - 1].ww);printf("\n");}else {printf("%d ", p[i].ww);}}printf("帶權周轉時間:");for (int i = 0; i < n; i++) {if (i == n - 1) {printf("%.2f", p[n - 1].wtime);printf("\n");}else {printf("%.2f ", p[i].wtime);}}}//ASD升序 void sort(struct pcb* p, int n) {for (int i = 0; i < n - 1; i++){struct pcb temp;for (int j = 0; j < n - i - 1; j++){if (p[j].ASD > p[j + 1].ASD){temp = p[j];p[j] = p[j + 1];p[j + 1] = temp;}}} }void hrrf(struct pcb* p, int n) {int finishedcount = 0; //記錄已經完成的進程數int unfinishedposition = 0; //記錄未完成進程的位置double nowtime = 0; //現在時間for (int i = 0; i < n; i++) { p[i].state = 0;}while (finishedcount < n) {double max_rp = 0; //中間變量比較響應比int next = 0; //記錄下一個要運行的位置下標for (int i = unfinishedposition; (i < n && p[i].ASD <= nowtime&&i!=0); i++) {if (p[i].state == 1) { continue;}if (p[i].rp > max_rp) { max_rp = p[i].rp;next = i; }}if (nowtime < p[unfinishedposition].ASD * 1.0) {nowtime = p[unfinishedposition].ASD * 1.0;next = unfinishedposition;}{nowtime = nowtime + p[next].DD; p[next].state = 1; p[next].NC = nowtime; p[next].ww = nowtime - p[next].ASD; p[next].wtime = 1.0 * p[next].ww / p[next].DD; for (int i = unfinishedposition; i < n; i++) { if (p[i].state == 0) {unfinishedposition = i;break;}}finishedcount++; }for (int i = 0; i < n && (p[i].ASD <= nowtime); i++) {if (p[i].state == 1) { continue;}else {p[i].rp = (nowtime + p[i].DD-p[i].ASD) / p[i].DD;}}} }int main() {int n; scanf("%d", &n);struct pcb p[333];input(p, n);sort(p, n);hrrf(p, n);output(p, n);return 0; }總結
以上是生活随笔為你收集整理的作业调度算法--高响应比优先 操作系统_处理器管理_编程题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 作业调度算法--短作业优先 操作系统_处
- 下一篇: 在循环系统中给药