版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實驗一 處理機(jī)調(diào)度實驗一、 實驗?zāi)康模河酶呒壵Z言編寫和調(diào)試一個進(jìn)程調(diào)度程序,以加深對進(jìn)程的概念及進(jìn)程調(diào)度算法的理解。二、 實驗要求: 用C+語言實驗對N個進(jìn)程采用非搶占式的動態(tài)優(yōu)先權(quán)優(yōu)先算法的進(jìn)程調(diào)度三、 實驗內(nèi)容:(1) 設(shè)計一個有N個進(jìn)程并發(fā)的進(jìn)程調(diào)度程序。進(jìn)程調(diào)度算法:采用最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法(即把處理機(jī)分配給優(yōu)先數(shù)最高的進(jìn)程)算法。(2) 每個進(jìn)程有一個進(jìn)程控制塊(PCB)表示。PCB用結(jié)構(gòu)來描述,包括以下字段:l 進(jìn)程標(biāo)識ID、l 優(yōu)先數(shù),為初始設(shè)定的模擬條件l 到達(dá)時間,為初始設(shè)定的模擬條件l 需要運行時間,為初始設(shè)定的模擬條件l 已用CPU時間,為初始設(shè)定的模擬條件l 進(jìn)程阻
2、塞時間startblock(表示進(jìn)程在運行startblock個時間片后,進(jìn)程將進(jìn)入阻塞狀態(tài)),為初始設(shè)定的模擬條件l 進(jìn)程被阻塞的時間blocktime(表示進(jìn)程等待blocktime個時間片后,將轉(zhuǎn)換成就緒狀態(tài)),為初始設(shè)定的模擬條件,模擬執(zhí)行I/O操作需要的時間l 進(jìn)程狀態(tài)state,就緒W(Wait)、運行R(Run)、或完成F(Finish)三種狀態(tài)l 隊列指針next等等。(3) 優(yōu)先數(shù)改變的規(guī)則進(jìn)程在就緒對列中呆一個時間片,優(yōu)先數(shù)增加1;進(jìn)程每運行一個時間片,優(yōu)先數(shù)減3;(4) 運行過程描述首先按照初始化輸入,按照各進(jìn)程優(yōu)先級高低排列就緒隊列中進(jìn)程順序,優(yōu)先級最高的進(jìn)程最先獲得C
3、PU控制權(quán)運行。如果運行一個時間片后,進(jìn)程的已占用CPU時間已達(dá)到所需要的運行時間,則撤消該進(jìn)程,如果運行一個時間片后進(jìn)程的已占用CPU時間還未達(dá)所需要的運行時間,此時應(yīng)將進(jìn)程的優(yōu)先數(shù)減3(即降低一級),如果到了進(jìn)程需被阻塞的時間點,阻塞進(jìn)程,然后把它插入阻塞隊列,等待經(jīng)過blocktime后,再喚醒進(jìn)程,把它按照優(yōu)先級高低,插入就緒隊列相應(yīng)位置等待CPU。每進(jìn)行一次調(diào)度程序都打印一次運行進(jìn)程、就緒隊列、以及各個進(jìn)程的PCB,以便進(jìn)行檢查。重復(fù)以上過程,直到所要進(jìn)程都完成為止。備注:進(jìn)程的優(yōu)先數(shù)及需要的運行時間可以事先人為地指定(也可以由隨機(jī)數(shù)產(chǎn)生)。進(jìn)程的到達(dá)時間為進(jìn)程輸入的時間或順序。參考
4、資料:部分?jǐn)?shù)據(jù)結(jié)構(gòu)說明:struct pcb /* 定義進(jìn)程控制塊PCB */ char name10; char state; int super; int ntime; int rtime; 。struct pcb* link;部分函數(shù)說明:sort( ) /* 建立對進(jìn)程進(jìn)行優(yōu)先級排列函數(shù)*/ input( ) /* 建立進(jìn)程控制塊函數(shù),初始化數(shù)據(jù)*/ disp( ) /*建立進(jìn)程顯示函數(shù),用于顯示當(dāng)前進(jìn)程信息*/ running( ) /* 建立進(jìn)程執(zhí)行函數(shù)(進(jìn)程運行時間到,置就緒狀態(tài)*/ main( ) /*主函數(shù)*/ 源代碼:#include<stdio.h>#incl
5、ude<stdlib.h>#include<conio.h>#define getpch(type) (type*)malloc(sizeof(type)#define NULL 0#define TIME 2/時間片長度typedef struct pcb/進(jìn)程管理塊char name10;/進(jìn)程名字char state; /進(jìn)程狀態(tài)int queue; /進(jìn)程所在的隊列int ntime; /進(jìn)程需要運行的時間int rtime; /進(jìn)程已經(jīng)運行的時間int etime; /進(jìn)程在本隊列可運行的時間片struct pcb *link;PCB;PCB *ready =
6、 NULL, *pinsert = NULL, *pfend = NULL,*p =NULL; /就緒隊列,進(jìn)程插入位置的變量int geti() /使用戶僅能輸入整數(shù)char ch;int i = 0;fflush(stdin);ch = getchar();while(ch = 'n')printf("tf輸入不能為空.請重新輸入n");fflush(stdin);ch = getchar();while(ch != 'n')if(ch > '9' | ch < '0')printf("
7、;t輸入有誤!輸入只能為正整數(shù),請重新輸入.n");fflush(stdin);i = 0;ch = getchar();elsei = i*10 + (ch - '0');ch = getchar();return i;void findpos()/更新狀態(tài)量PCB *ps = pfend;if(!ps | !ps -> link | (ps-> link->queue - ps->queue) > 1)pinsert = ps;elsewhile (ps->link && ps ->link->que
8、ue != (pfend ->queue +2)ps = ps->link;pinsert = ps;void insert()/插入進(jìn)程if(!ready )ready = p;pfend = p;pinsert = p;else if(ready ->queue = 1)/第一隊列存在p->link = pfend->link;pfend->link = p;pfend = p;findpos();elsep->link = ready;ready = p;findpos();void input()/*建立進(jìn)程控制塊函數(shù)*/int i,num;p
9、rintf("n請輸入進(jìn)程的個數(shù)?");num = geti();for(i=0; i < num; i+)printf("n進(jìn)程號No.%d:n",i+1);p=getpch(PCB);printf("n輸入進(jìn)程名:");scanf("%s",p->name);printf("n輸入進(jìn)程運行時間:");p ->ntime = geti();printf("n");p->rtime=0;p->state='w'p->queu
10、e =1;p->etime = TIME;p->link=NULL;insert();/*調(diào)用insert函數(shù)*/void disp(PCB *pr)/*建立進(jìn)程現(xiàn)實函數(shù),用于顯示當(dāng)前進(jìn)程*/printf("nnamet statet queuet ntimet rtimet在隊列可停留時間t n");printf("|%st",pr->name);printf(" |%ct",pr->state);printf(" |%dt",pr->queue);printf(" |%d
11、t",pr->ntime);printf(" |%dt",pr->rtime);printf(" |%dt",pr->etime);printf("n");void check()/*建立進(jìn)程查看函數(shù)*/PCB *pr;printf("n *當(dāng)前正在運行的進(jìn)程是:%s",ready->name);/*顯示當(dāng)前運行的進(jìn)程*/ disp(ready);pr= ready ->link;printf("n*當(dāng)前就緒隊列狀態(tài)為:n");/*顯示就緒隊列狀態(tài)*/wh
12、ile(pr!=NULL)disp(pr);pr=pr->link;void sort()/調(diào)整進(jìn)程隊列if(!ready->link |ready->queue < ready->link->queue) return;p = ready ->link;ready ->link = pinsert ->link;pinsert ->link = ready;pinsert = ready;ready = p;if (ready && ready -> queue = pinsert ->queue)fin
13、dpos();void addnew()/添加新的進(jìn)程if(ready ->queue != 1)(ready -> queue)+;ready->etime *= 2;ready -> state='w'sort();/*調(diào)用sort函數(shù)*/input();elseinput();void destroy()/*建立進(jìn)程撤銷函數(shù)(進(jìn)程運行結(jié)束,撤銷進(jìn)程)*/ printf("n進(jìn)程%s已完成.n",ready->name);p = ready;ready = ready->link;free(p);if (ready &
14、amp;& ready -> queue = pinsert ->queue)findpos();void running()/*建立進(jìn)程就緒函數(shù)(進(jìn)程運行時間到,置就緒狀態(tài))*/ (ready -> rtime)+;ready ->etime -;if(ready->rtime = ready->ntime)destroy();return;else if(ready ->etime = 0)int time = 2;(ready -> queue)+;for(int i = 2; i != ready->queue; +i)time *= 2;ready->etime = time;ready -> state='w'sort();/*調(diào)用sort函數(shù)*/void main()char ch;input();while(ready != NULL)printf("nThe execute name:%sn&q
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 腹腔鏡微創(chuàng)手術(shù)治療異位妊娠的臨床效果及安全性研究
- 二零二五年度林業(yè)碳匯交易林地承包合同范本3篇
- 二零二五年度環(huán)保產(chǎn)業(yè)委托擔(dān)保合同模板3篇
- 通信行業(yè)安全設(shè)備檢修
- 二零二五年度個人租賃車輛保險合同范本2篇
- 《二零二五版水電站施工合同爭議解決及仲裁條款》3篇
- 二零二五年度電子商務(wù)平臺銷售擔(dān)保合同范本
- 初中學(xué)年度第二學(xué)期八年級地理教案
- 關(guān)注民生-加強(qiáng)公共安全-構(gòu)建和諧社會
- 二零二五年度金融創(chuàng)新產(chǎn)品居間服務(wù)合同3篇
- 無違法犯罪記錄證明申請表(個人)
- 電捕焦油器火災(zāi)爆炸事故分析
- 大學(xué)生勞動教育PPT完整全套教學(xué)課件
- 繼電保護(hù)原理應(yīng)用及配置課件
- 《殺死一只知更鳥》讀書分享PPT
- 蓋洛普Q12解讀和實施完整版
- 2023年Web前端技術(shù)試題
- 品牌策劃與推廣-項目5-品牌推廣課件
- DB31T 685-2019 養(yǎng)老機(jī)構(gòu)設(shè)施與服務(wù)要求
- 燕子山風(fēng)電場項目安全預(yù)評價報告
- 高一英語課本必修1各單元重點短語
評論
0/150
提交評論