作业调度算法--高响应比优先 操作系统_处理器管理_编程题
生活随笔
收集整理的這篇文章主要介紹了
作业调度算法--高响应比优先 操作系统_处理器管理_编程题
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
操作系統(tǒng)_處理器管理_編程題
作業(yè)調(diào)度算法–高響應(yīng)比優(yōu)先
輸入N個(gè)作業(yè),輸入每個(gè)的作業(yè)名字,到達(dá)的時(shí)間,服務(wù)的時(shí)間,根據(jù)高響應(yīng)比優(yōu)先算法,計(jì)算出每個(gè)作業(yè)的完成的時(shí)間,周轉(zhuǎn)的時(shí)間,帶權(quán)周轉(zhuǎn)的時(shí)間(其中保留2位小數(shù))。
輸入格式:
第1行輸入作業(yè)的數(shù)目,第2行輸入作業(yè)名字,第3行輸入到達(dá)的時(shí)間,第4行輸入服務(wù)的時(shí)間。
輸出格式:
根據(jù)到達(dá)的時(shí)間由小到大排序,第1行輸出作業(yè)名字,第2行輸出到達(dá)的時(shí)間,第3行輸出服務(wù)的時(shí)間,第4行輸出完成的時(shí)間,第5行輸出完成的時(shí)間,第六行輸出帶權(quán)周轉(zhuǎn)的時(shí)間。
輸入樣例:
給出了1組輸出。如下:
輸出樣例:
給出了相應(yīng)輸出。如下:
代碼_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("作 業(yè) 名:");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("到達(dá)時(shí)間:");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("服務(wù)時(shí)間:");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("完成時(shí)間:");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("周轉(zhuǎn)時(shí)間:");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("帶權(quán)周轉(zhuǎn)時(shí)間:");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; //記錄已經(jīng)完成的進(jìn)程數(shù)int unfinishedposition = 0; //記錄未完成進(jìn)程的位置double nowtime = 0; //現(xiàn)在時(shí)間for (int i = 0; i < n; i++) { p[i].state = 0;}while (finishedcount < n) {double max_rp = 0; //中間變量比較響應(yīng)比int next = 0; //記錄下一個(gè)要運(yùn)行的位置下標(biāo)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; }總結(jié)
以上是生活随笔為你收集整理的作业调度算法--高响应比优先 操作系统_处理器管理_编程题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 作业调度算法--短作业优先 操作系统_处
- 下一篇: 苏区振兴下的赣州发展状况分析