#include
#include
typedef struct processnode /*程序節點資訊*/
pcb;
typedef struct queue /*多級就緒佇列節點資訊*/
readyqueue;
pcb *running=null,*finished=null; /*定義三個佇列,就緒佇列,執行佇列和完成佇列*/
readyqueue *head = null; /*定義第乙個就緒佇列*/
static readyqueue *ready=null;
int num; /*程序個數*/
int readynum; /*就緒佇列個數*/
void output(); /*程序資訊輸出函式*/
void insertfinished(pcb *in); /*將程序插入到完成佇列尾部*/
void insertreadyqueue(readyqueue *in); /*插入就緒佇列,規定優先數越小,優先順序越低*/
void readyqueueinit(); /*建立就緒佇列初始化函式*/
void pop(readyqueue *queue); /*取得某乙個就緒佇列中的隊頭程序*/
void push(pcb *in,readyqueue *queue); /*將程序插入到就緒佇列尾部*/
void processcreate(); /*程序建立函式*/
void roundrobin(readyqueue *timechip); /*時間片輪轉排程演算法*/
void multidispatch(); /*多級排程演算法,每次執行乙個時間片*/
void output() /*程序資訊輸出函式*/
ready = ready->next;
if(ready!=null)
p = ready->linkpcb;
}p = finished;
if(p!=null)
printf("完成佇列.../n");
while(p!=null)
printf("/n/n");
p = running;
if(p!= null)
printf("執行佇列.../n");
while(p!=null)
}void insertfinished(pcb *in) /*將程序插入到完成佇列尾部*/
else
in ->next = fst ->next;
fst ->next = in;
} printf("the %s has finished!!!/n",in->name);
running = null;
output();
}void insertreadyqueue(readyqueue *in) /*建立就緒佇列,規定優先數越小,優先順序越低*/
else /*查到合適的位置進行插入*/
else
}if(fst ->next == null) /*已經搜尋到隊尾,則其優先級數最小,將其插入到隊尾即可*/
}} }
void readyqueueinit() /*建立就緒佇列輸入函式*/
printf("請輸入就緒佇列的時間片 : ");
scanf("%d",&(tmp->round)); /*輸入此就緒佇列中給每個程序所分配的cpu時間片*/
tmp ->prio = 50 - tmp->round; /*設定其優先順序,時間片越高,其優先順序越低*/
tmp ->linkpcb = null; /*初始化其連線的程序隊列為空*/
tmp ->next = null;
insertreadyqueue(tmp); /*按照優先順序從高到低,建立多個就緒佇列*/
}printf("**********multiple readyqueue information**********/n");
readyqueue *rq = head;
while(rq != null)
}void pop(readyqueue *queue) /*取得某乙個就緒佇列中的隊頭程序*/
}void push(pcb *in,readyqueue *queue) /*將程序插入到就緒佇列尾部*/
else
in ->next = fst ->next;
fst ->next = in;
}printf("push the %s into ready queue!!!/n",in->name);
}void processcreate() /*程序建立函式*/
else if(running->count == timechip ->round)/*時間片用完*/
}flag = 1;
pop(timechip);}}
void multidispatch() /*多級排程演算法,每次執行乙個時間片*/
else if(running->count == running->round)/*時間片用完*/
else
}
}flag = 1;
if(point ->linkpcb == null) /*就緒佇列指標下移,進入下一級就緒佇列!!!*/
point =point->next;
if(point ->next ==null)
pop(point);}}
int main(void)
多級反饋佇列排程演算法
多級反饋佇列排程演算法是一種cpu處理機排程演算法,unix作業系統採取的便是這種排程演算法。多級反饋佇列排程演算法即能使高優先順序的作業得到響應又能使短作業 程序 迅速完成。對比一下fcfs與高優先響應比排程演算法的缺陷 多級 假設為n級 反饋佇列排程演算法可以如下原理 1 設有n個佇列 q1,q...
多級反饋佇列排程演算法
多級反饋佇列排程演算法是一種cpu處理機排程演算法,unix作業系統採取的便是這種排程演算法。多級反饋佇列排程演算法即能使高優先順序的作業得到響應又能使短作業 程序 迅速完成。對比一下fcfs與高優先響應比排程演算法的缺陷 多級 假設為n級 反饋佇列排程演算法可以如下原理 1 設有n個佇列 q1,q...
多級佇列排程和多級反饋佇列的排程
多級反饋佇列排程演算法是一種cpu處理機排程演算法,unix作業系統採取的便是這種排程演算法。多級 假設為n級 反饋佇列排程演算法可以如下原理 1 設有n個佇列 q1,q2 qn 其中各個佇列對於處理機的優先順序是不一樣的,也就是說位於各個佇列中的作業 程序 的優先順序也是不一樣的。一般來說,優先順...