模擬實現(xiàn)進程調(diào)度——采用高優(yōu)先數(shù)優(yōu)先和先來服務算法
進程調(diào)度算法:采用最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法(即把處理機分配給優(yōu)先數(shù)最高的進程)和先來先服務算法?! ∶總€進程有一個進程控制塊
進程調(diào)度算法:采用最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法(即把處理機分配給優(yōu)先數(shù)最高的進程)和先來先服務算法。
每個進程有一個進程控制塊( PCB)表示。進程控制塊可以包含如下信息:進程名、優(yōu)先數(shù)、到達時間、需要運行時間、已用CPU時間、進程狀態(tài)等等。
進程的優(yōu)先數(shù)及需要的運行時間可以事先人為地指定(也可以由隨機數(shù)產(chǎn)生)。進程的到達時間為進程輸入的時間。
進程的運行時間以時間片為單位進行計算。每個進程的狀態(tài)可以是就緒 W(Wait)、運行R(Run)、或完成F(Finish)三種狀態(tài)之一。
就緒進程獲得 CPU后都只能運行一個時間片。用已占用CPU時間加1來表示。
如果運行一個時間片后,進程的已占用 CPU時間已達到所需要的運行時間,則撤消該進程,如果運行一個時間片后進程的已占用CPU時間還未達所需要的運行時間,也就是進程還需要繼續(xù)運行,此時應將進程的優(yōu)先數(shù)減1(即降低一級),然后把它插入就緒隊列等待CPU。每進行一次調(diào)度程序都打印一次運行進程、就緒隊列、以及各個進程的 PCB,以便進行檢查。重復以上過程,直到所要進程都完成為止。
- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #define getpch(type) (type*)malloc(sizeof(type))
- struct pcb /* 定義進程控制塊PCB */
- {
- char name[10];
- char state;
- int super;
- int ntime;
- int rtime;
- struct pcb* link;
- }*ready = NULL, *p;
- typedef struct pcb PCB;
- sort() /* 建立對進程進行優(yōu)先級排列函數(shù)*/
- {
- PCB *first, *second;
- int insert = 0;
- if ((ready == NULL) || ((p->super) > (ready->super))) /*優(yōu)先級最大者,插入隊首*/
- {
- p->link = ready;
- ready = p;
- }
- else /* 進程比較優(yōu)先級,插入適當?shù)奈恢弥?/
- {
- first = ready;
- second = first->link;
- while (second != NULL)
- {
- if ((p->super) > (second->super)) /*若插入進程比當前進程優(yōu)先數(shù)大,*/
- { /*插入到當前進程前面*/
- p->link = second;
- first->link = p;
- second = NULL;
- insert = 1;
- }
- else /* 插入進程優(yōu)先數(shù)最低,則插入到隊尾*/
- {
- first = first->link;
- second = second->link;
- }
- }
- if (insert == 0) first->link = p;
- }
- }
- input() /* 建立進程控制塊函數(shù)*/
- {
- int i, num;
- printf("\n 請輸入進程數(shù)?");
- scanf("%d", &num);
- for (i = 0; i < num; i++)
- {
- printf("\n 進程號No.%d:\n", i);
- p = getpch(PCB);
- printf("\n 輸入進程名:");
- scanf("%s", p->name);
- printf("\n 輸入進程優(yōu)先數(shù):");
- scanf("%d", &p->super);
- printf("\n 輸入進程運行時間:");
- scanf("%d", &p->ntime);
- printf("\n");
- p->rtime = 0; p->state = 'w';
- p->link = NULL;
- sort(); /* 調(diào)用sort函數(shù)*/
- }
- }
- int space()
- {
- int l = 0; PCB* pr = ready;
- while (pr != NULL)
- {
- l++;
- pr = pr->link;
- }
- return(l);
- }
- disp(PCB * pr) /*建立進程顯示函數(shù),用于顯示當前進程*/
- {
- printf("\n qname \t state \t super \t ndtime \t runtime \n");
- printf("|%s\t", pr->name);
- printf("|%c\t", pr->state);
- printf("|%d\t", pr->super);
- printf("|%d\t", pr->ntime);
- printf("|%d\t", pr->rtime);
- printf("\n");
- }
- check() /* 建立進程查看函數(shù) */
- {
- PCB* pr;
- printf("\n **** 當前正在運行的進程是:%s", p->name); /*顯示當前運行進程*/
- disp(p);
- pr = ready;
- printf("\n ****當前就緒隊列狀態(tài)為:\n"); /*顯示就緒隊列狀態(tài)*/
- while (pr != NULL)
- {
- disp(pr);
- pr = pr->link;
- }
- }
- destroy() /*建立進程撤消函數(shù)(進程運行結(jié)束,撤消進程)*/
- {
- printf("\n 進程 [%s] 已完成.\n", p->name);
- free(p);
- }
- running() /* 建立進程就緒函數(shù)(進程運行時間到,置就緒狀態(tài)*/
- {
- (p->rtime)++;
- if (p->rtime == p->ntime)
- destroy(); /* 調(diào)用destroy函數(shù)*/
- else
- {
- (p->super)--;
- p->state = 'w';
- sort(); /*調(diào)用sort函數(shù)*/
- }
- }
- main() /*主函數(shù)*/
- {
- int len, h = 0;
- char ch;
- input();
- len = space();
- while ((len != 0) && (ready != NULL))
- {
- ch = getchar();
- h++;
- printf("\n The execute number:%d \n", h);
- p = ready;
- ready = p->link;
- p->link = NULL;
- p->state = 'R';
- check();
- running();
- printf("\n 按任一鍵繼續(xù)......");
- ch = getchar();
- }
- printf("\n\n 進程已經(jīng)完成.\n");
- ch = getchar();
- }

責任編輯:售電衡衡
免責聲明:本文僅代表作者個人觀點,與本站無關。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實,對本文以及其中全部或者部分內(nèi)容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,并請自行核實相關內(nèi)容。
我要收藏
個贊
-
權威發(fā)布 | 新能源汽車產(chǎn)業(yè)頂層設計落地:鼓勵“光儲充放”,有序推進氫燃料供給體系建設
2020-11-03新能源,汽車,產(chǎn)業(yè),設計 -
中國自主研制的“人造太陽”重力支撐設備正式啟運
2020-09-14核聚變,ITER,核電 -
探索 | 既耗能又可供能的數(shù)據(jù)中心 打造融合型綜合能源系統(tǒng)
2020-06-16綜合能源服務,新能源消納,能源互聯(lián)網(wǎng)
-
新基建助推 數(shù)據(jù)中心建設將迎爆發(fā)期
2020-06-16數(shù)據(jù)中心,能源互聯(lián)網(wǎng),電力新基建 -
泛在電力物聯(lián)網(wǎng)建設下看電網(wǎng)企業(yè)數(shù)據(jù)變現(xiàn)之路
2019-11-12泛在電力物聯(lián)網(wǎng) -
泛在電力物聯(lián)網(wǎng)建設典型實踐案例
2019-10-15泛在電力物聯(lián)網(wǎng)案例
-
新基建之充電樁“火”了 想進這個行業(yè)要“心里有底”
2020-06-16充電樁,充電基礎設施,電力新基建 -
燃料電池汽車駛?cè)雽こ0傩占疫€要多久?
-
備戰(zhàn)全面電動化 多部委及央企“定調(diào)”充電樁配套節(jié)奏
-
權威發(fā)布 | 新能源汽車產(chǎn)業(yè)頂層設計落地:鼓勵“光儲充放”,有序推進氫燃料供給體系建設
2020-11-03新能源,汽車,產(chǎn)業(yè),設計 -
中國自主研制的“人造太陽”重力支撐設備正式啟運
2020-09-14核聚變,ITER,核電 -
能源革命和電改政策紅利將長期助力儲能行業(yè)發(fā)展
-
探索 | 既耗能又可供能的數(shù)據(jù)中心 打造融合型綜合能源系統(tǒng)
2020-06-16綜合能源服務,新能源消納,能源互聯(lián)網(wǎng) -
5G新基建助力智能電網(wǎng)發(fā)展
2020-06-125G,智能電網(wǎng),配電網(wǎng) -
從智能電網(wǎng)到智能城市