-
大小: 8KB文件類型: .cpp金幣: 1下載: 0 次發(fā)布日期: 2021-06-06
- 語言: C/C++
- 標簽: 操作系統(tǒng)??
資源簡介
用C語言實現(xiàn)的多級反饋隊列調(diào)度算法,操作系統(tǒng)課程作業(yè)。用VC6.0調(diào)試通過。
代碼片段和文件信息
#include????
#include????
#include????
typedef?struct?node?????????????????????????/*進程節(jié)點信息*/??
{???
char?name[20];?????????????????????????????/*進程的名字*/??
int?prio;??????????????????????????????????/*進程的優(yōu)先級*/??
int?round;?????????????????????????????????/*分配CPU的時間片*/??
int?cputime;???????????????????????????????/*CPU執(zhí)行時間*/??
int?needtime;????????????????????????????/*進程執(zhí)行所需要的時間*/??
char?state;??????????????/*進程的狀態(tài),W——就緒態(tài),R——執(zhí)行態(tài),F(xiàn)——完成態(tài)*/??
int?count;?????????????????????????????/*記錄執(zhí)行的次數(shù)*/??
struct?node?*next;??????????????????????/*鏈表指針*/??
}PCB;???
typedef?struct?Queue?????????????????/*多級就緒隊列節(jié)點信息*/??
{???
PCB?*linkPCB;??????????????????????/*就緒隊列中的進程隊列指針*/??
int?prio;????????????????????????????/*本就緒隊列的優(yōu)先級*/??
int?round;???????????????????????????/*本就緒隊列所分配的時間片*/??
struct?Queue?*next;??????????????????/*指向下一個就緒隊列的鏈表指針*/??
}ReadyQueue;???
PCB?*run=NULL*finish=NULL;?????/*定義三個隊列,就緒隊列,執(zhí)行隊列和完成隊列*/??
ReadyQueue?*Head?=?NULL;???????????????????/*定義第一個就緒隊列*/??
int?num;???????????????????????????????????/*進程個數(shù)*/??
int?ReadyNum;???????????????????????????/*就緒隊列個數(shù)*/??
void?Output();???????????????????????????/*進程信息輸出函數(shù)*/??
void?InsertFinish(PCB?*in);???????/*將進程插入到完成隊列尾部*/??
void?InsertPrio(ReadyQueue?*in);?????/*創(chuàng)建就緒隊列,規(guī)定優(yōu)先數(shù)越小,優(yōu)先級越低*/??
void?PrioCreate();???????????????????????/*創(chuàng)建就緒隊列輸入函數(shù)*/??
void?GetFirst(ReadyQueue?*queue);?????/*取得某一個就緒隊列中的隊頭進程*/??
void?InsertLast(PCB?*inReadyQueue?*queue);???/*將進程插入到就緒隊列尾部*/??
void?ProcessCreate();???????????????????????/*進程創(chuàng)建函數(shù)*/??
void?RoundRun(ReadyQueue?*timechip);?????/*時間片輪轉(zhuǎn)調(diào)度算法*/??
void?MultiDispatch();?????????????/*多級調(diào)度算法,每次執(zhí)行一個時間片*/??
??
int?main(void)???
{???
PrioCreate();?????????????????????????/*創(chuàng)建就緒隊列*/??
ProcessCreate();??????????????????????/*創(chuàng)建就緒進程隊列*/??
MultiDispatch();??????????????????????/*算法開始*/??
Output();?????????????????????????????/*輸出最終的調(diào)度序列*/??
return?0;???
}???
void?Output()????????????????????????/*進程信息輸出函數(shù)*/??
{???
ReadyQueue?*print?=?Head;???
PCB?*p;???
printf(“進程名\t輪數(shù)\tcpu時間\t需要時間\t進程狀態(tài)\n“);???
while(print)???
{???
??if(print?->linkPCB?!=?NULL)???
??{???
???p=print?->linkPCB;???
???while(p)???
???{???
????printf(“%s\t%d\t%d\t%d\t\t%c\n“p->namep->round-1p->cputimep->needtimep->state);??????
????p?=?p->next;???
???}???
??}???
??print?=?print->next;???
}???
p?=?finish;???
while(p!=NULL)???
{???
??printf(“%s\t%d\t%d\t%d\t\t%c\n“p->namep->round-1p->cputimep->needtimep->state);???
??p?=?p->next;???
}???
p?=?run;???
while(p!=NULL)???
{???
??printf(“%s\t%d\t%d\t%d\t\t%c\n“p->namep->round-1p->cputimep->needtimep->statep->count);???
??p?=?p->next;???
}???
??
??
}???
void?InsertFinish(PCB?*in)???????????/*將進程插入到完成隊列尾部*/??
{???
PCB?*fst;???
fst?=?finish;???
??
if(finish?==?NULL)???
{???
??in->next?=?finish;???
??finish?=?in;???
}???
else??
{???
??while(fst->next?!=?NULL)???
??{???
???fst?=?fst->next;???
??}???
??in?->next?=?fst?->next;???
??fst?->next?=?i
評論
共有 條評論