




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、可搶占調度算法(在VC下編譯通過)#include #include #include #include #include #include const int FINISH=0;/完成狀態const int RUNNING=1;/運行狀態const int READY=2;/就緒狀態const int PCBNUM=3;/進程個數typedef struct long pid;char pname10;int pstate;int pneedtime;int ptime;int priority;pcbs;/pcb結構class pcbnode;/隊列結點class pcbnodepubli
2、c:pcbs *pcb;pcbnode *link;pcbnode();pcbnode();int run();/運行操作int runend();/運行結束?int insertnode(pcbnode *p,pcbnode *q);/在q后插入結點pint deletenode(pcbnode *p,pcbnode *q);/刪除p結點,q為p的前驅int addnode(pcbnode *p);/增加結點;pcbnode:pcbnode()pcb=0;link=0;pcbnode:pcbnode()if(link)delete link;if(pcb)pcb-pstate=FINISH;
3、int pcbnode:run()pcb-pstate=RUNNING;+(pcb-ptime);pcb-priority-;/優先級降低return 0;int pcbnode:runend()return (pcb-pneedtimeptime);int pcbnode:addnode(pcbnode *p)pcbnode *q;q=this;p-pcb-pstate=READY;while(q-link)q=q-link;q-link=p;return 0;int pcbnode:insertnode(pcbnode *p,pcbnode *q)p-link=q-link;q-link=
4、p;return 0;int pcbnode:deletenode(pcbnode *p,pcbnode *q)q-link=p-link;p-link=0;return 0;int randInt( int seed)/隨機函數:產生不大于seed的正整數int r;r=rand();while(rseed|rpid=order;strcpy(pcb-pname, proc);_itoa(order,buf,10);strcat(pcb-pname,buf);pcb-pneedtime=randInt(5);/進程需要時間pcb-ptime=0;pcb-priority=randInt(10
5、);/優先度void pprint(pcbs *pcb, int count)/打印進程狀態ofstream ofs(result.txt, ios:out|ios:app);coutidtnametstattneedtruntimetpriendl;ofsidtnametstattneedtruntimetpriendl;for(int i=0;icount;i+)coutpcbi.pidt pcbi.pnamet;ofs pcbi.pidt pcbi.pnamet;switch(pcbi.pstate) case RUNNING:coutRU;ofsRU;break;case READY:
6、coutRE;ofsRE;break;case FINISH:coutFI;ofsFI;break;couttpcbi.pneedtime;ofstpcbi.pneedtime;couttpcbi.ptime;ofstpcbi.ptime;couttpcbi.priority;ofstpcbi.priority;coutendl;ofsendl;void priority(pcbs *pcb, int pcbsnum)/可搶占的優先調度/* 從就緒隊列中取出最優先的進程送到運行隊列* 每運行一次,正在運行的進程優先數減1,等待的進程優先數加1* 如果就緒隊列中的最大優先數進程的優先數大于正在運
7、行的優先數,* 則運行的進程讓出cpu,排到就緒隊列的尾部,將最大優先數的進程送進* 運行隊列。*/pcbnode running,ready,blocked;pcbnode *p,*f,*front;pcbnode *q;/*將進程表中的進程加到就緒隊列中*/for(int i=0;ipcb=pcb+i;ready.addnode(p);while(ready.link|running.link)/判斷將運行隊列中的進程是否結束if(running.link)if(running.link-runend() /運行結束?p=running.link;p-pcb-priority=0;runn
8、ing.link=0;delete p;/尋找最大的一個優先級p=ready.link;q=p;f=&ready;front=f;if(p)int maxpri=p-pcb-priority;while(p)if(p-pcb-prioritymaxpri)maxpri=p-pcb-priority;front=f;q=p;f=p;p=p-link;/如果最大優先級大于正在運行的優先級則強占cpu/p=running.link;if(q)if(p)if(p-pcb-prioritypcb-priority)ready.addnode(p);running.deletenode(p, &runni
9、ng);p-pcb-pstate=READY;running.addnode(q);ready.deletenode(q,front);q-pcb-pstate=RUNNING;elserunning.addnode(q);ready.deletenode(q,front);q-pcb-pstate=RUNNING;/* * 運行進程 */p=running.link;q=&running;if(p)int r;r=p-run();/運行進程 /動態計算就緒隊列優先級p=ready.link;while(p)(p-pcb-priority)+;p=p-link;/print proc stat
10、epprint(pcb,pcbsnum);void main(int argc, char* argv)pcbs *pcblist;/進程表remove(result.txt);pcblist=new pcbsPCBNUM;/為進程表分配空間for(int i=0; iPCBNUM; i+)newpcb(pcblist+i),i);/產生進程pprint(pcblist,PCBNUM);/打印進程priority(pcblist,PCBNUM);/可強占優先法delete pcblist;/釋放進程空間用C語言編寫如下:實驗(一)一, 實驗內容: 三,實驗內容(任選一個)1、按優先權調度算法實
11、現處理機調度的程序; PCB內容:要求進程名/PID;要求運行時間(單位時間);優先權;l例如:5狀態:登記進程當前狀態(就緒、執行、阻塞)PCB指針;指向本進程隊列中下個進程的PCB1、可隨時輸入若干進程,并按優先權排序;2、從就緒隊首選進程運行:優先權-1,要求運行時間-1,要求運行時間=0時,撤銷該進程3、重新排序,進行下輪調度;4、每次調度后,顯示各進程狀態。七,源程序清單:#include #include #include #include #define NULL 0#define FINISH 1#define RUNNING 2#define READY 3struct pc
12、bsint pid;int pstate;int pneedtime;int ptime;int priority;struct pcbs *link;pcbs;struct pcbs *running,*ready;struct pcbs *pcblist;int PCBNUM;FILE *fp;void run(struct pcbs *p)p-pstate=RUNNING;p-ptime=p-ptime+1;if(PCBNUM!=1)p-priority=p-priority-1;int runend(struct pcbs *p)if(p-ptime=p-pneedtime)p-pst
13、ate=FINISH;p-priority=NULL;return 1;elsereturn NULL;struct pcbs *deletenode(struct pcbs *p,struct pcbs *q)struct pcbs *f,*g;f=p;g=q;if(p=q)f=f-link;if(p-link) p-link=NULL;return f;else while(f-link!=g) f=f-link; f-link=g-link; if(g-link) g-link=NULL; return p;struct pcbs *addnode(struct pcbs *q,stru
14、ct pcbs *p)struct pcbs *g,*f,*d;f=q;d=p;if(f=NULL)f=d;d-pstate=READY;return f;elseg=q;while(q-link) q=q-link;d-pstate=READY;q-link=d;return g;int randInt(int seed)int r;r=rand();while(rseed|rpid); fprintf(fp,%dt,f-pid); switch(f-pstate) case RUNNING: printf(RUt); fprintf(fp,%st,RU); break; case READ
15、Y: printf(REt); fprintf(fp,%st,RE); break; case FINISH: fprintf(fp,%st,FI); printf(FIt); break; default: printf( t); fprintf(fp,%st, ); printf(%dt,f-pneedtime); fprintf(fp,%dt,f-pneedtime); printf(%dt,f-ptime); fprintf(fp,%dt,f-ptime); printf(%dn,f-priority); fprintf(fp,%dn,f-priority); printf(n); f
16、=f-link; i+;if(i=PCBNUM|i=1)fprintf(fp,%sn,=);void priority()struct pcbs *addnode();void pprint();void run();struct pcbs *deletenode();int runend();int i=0;int maxpri;struct pcbs *p,*q;struct pcbs *f;if(PCBNUM=1) running=pcblist; while(!runend(running) run(running); pprint(running); pprint(pcblist);
17、else while(ipriority=0; ready=addnode(ready,f); f-pstate=FINISH; running=deletenode(running,f); i+; q=ready; p=ready; maxpri=p-priority; while(p) if(p-priority)maxpri) maxpri=p-priority; f=p; q=p; p=p-link; p=running; if(p&q&(p-priority)priority) p-pstate=READY; q-pstate=RUNNING; ready=addnode(ready
18、,p); running=deletenode(running,p); running=addnode(running,q); ready=deletenode(ready,q); else if(!runend(q)&running=NULL) q-pstate=RUNNING; running=addnode(running,q); ready=deletenode(ready,q); p=ready; while(p) if(p-pstate!=FINISH)&(p-pstate!=RUNNING)(p-priority)+; p=p-link; if(running|ready) if
19、(ready) pprint(ready); if(running)run(running);pprint(running);p=ready; main( )int i,j=0;struct pcbs *p=NULL,*q=NULL;void priority();void pprint();struct pcbs *addnode();int randInt();if(fp=fopen(result1.txt,a)=NULL)printf(cannot open file!n);exit(1);printf(nenter pcbnum(ensure pcbnum0):);scanf(%d,&
20、PCBNUM);while(PCBNUM0) /*可隨時加入進程*/for(i=0;ilink=NULL; p-pid=i+j; p-pneedtime=randInt(10); p-ptime=0; p-priority=randInt(10); if (q=NULL) pcblist=q=p; p=NULL; else q-link=p;q=q-link;p=NULL;running=NULL;pprint(pcblist);q=pcblist;while(q) ready=addnode(ready,q); /*將進程加入后備隊列*/ q=deletenode(q,q);pprint(r
21、eady);priority();for(i=0;ilink; free(p); j=j+PCBNUM;printf(nenter pcbnum:);scanf(%d,&PCBNUM);fclose(fp); 實驗(二) 一, 實驗內容:實現主存儲器的分配和回收。二, 實驗題目:在可變分區管理方式下,用最先適應算法實現主存空間的分配和回收。注:提示及要求: 1、自行假設主存空間大小,預設操作系統所占大小并構造未分分區表; 表目內容:起址、長度、狀態(未分/空表目)2、結合實驗一,PCB增加為: PID,要求運行時間,優先權,狀態,所需主存大小,主存起始位置,PCB指針3、采用最先適應算法分配主
22、存空間;4、進程完成后,回收主存,并與相鄰空閑分區合并。三, 實驗原理:目前的內存分區管理辦法分為兩種類型:連續分配方式和離散分配方式,其中連續分配方式又存在兩種形式:靜態分區分配和動態分區分配。這次實驗采用的是連續分配算法中的動態分區分配算法中的最佳適應算法:其原理如下:每次為作業分配內存時,總是把能滿足要求,又是最小的空閑分區分配給作業,實現對分配空間的合理利用。三、 程序清單:#include #include #include #include #define NULL 0#define FINISH 1#define RUNNING 2#define READY 3#define N
23、UM 50struct pcbsint pid;int pstate;int pneedtime;int ptime;int priority;int needsize;int startaddress;struct pcbs *link;pcbs;struct pcbs *running,*ready;struct pcbs *pcblist;int PCBNUM;FILE *fp;struct wordint flag;int size;int address;struct word *next,*llink;struct pcbs *space;word;void run(struct
24、pcbs *p) /*運行進程*/p-pstate=RUNNING;p-ptime=p-ptime+1;if(PCBNUM!=1)p-priority=p-priority-1;int runend(struct pcbs *p) /*判斷進程是否運行完畢*/if(p-ptime=p-pneedtime)p-pstate=FINISH;p-priority=NULL;return 1;elsereturn NULL;struct pcbs *deletenode(struct pcbs *p,struct pcbs *q) /*刪除節點*/struct pcbs *f,*g;f=p;g=q;i
25、f(p=q) /*要刪除節點是頭節點*/f=f-link;if(p-link) p-link=NULL;return f;else /*要刪除節點不是頭節點*/ while(f-link!=g) f=f-link; f-link=g-link; if(g-link) g-link=NULL; return p;struct pcbs *addnode(struct pcbs *q,struct pcbs *p) /*增加節點*/struct pcbs *g,*f,*d;f=q;d=p;if(f=NULL) /*把節點增加到隊列的隊首*/f=d;d-pstate=READY;return f;e
26、lseg=q;while(q-link) q=q-link;d-pstate=READY;q-link=d;return g;int randInt(int seed) /*產生不大于seed的隨機數*/int r;r=rand();while(rseed|rpid); fprintf(fp,%dt,f-pid); switch(f-pstate) case RUNNING: printf(RUt); fprintf(fp,%st,RU); break; case READY: printf(REt); fprintf(fp,%st,RE); break; case FINISH: fprin
27、tf(fp,%st,FI); printf(FIt); break; default: printf( t); fprintf(fp,%st, ); printf(%dt,f-pneedtime); fprintf(fp,%dt,f-pneedtime); printf(%dt,f-ptime); fprintf(fp,%dt,f-ptime); printf(%dt,f-priority); fprintf(fp,%dt,f-priority); printf(%dtt,f-needsize); fprintf(fp,%dtt,f-needsize); printf(%dn,f-starta
28、ddress); fprintf(fp,%dn,f-startaddress); fprintf(fp,n); printf(n); f=f-link; i+;if(i=PCBNUM|(i=1&p!=ready)fprintf(fp,%sn,-);printf(-);void priority() /*可搶占優先調度算法*/struct pcbs *addnode();void pprint();void run();struct pcbs *deletenode();int runend();int i=0;int maxpri;struct pcbs *p,*q;struct pcbs *
29、f;if(PCBNUM=1) running=pcblist; while(!runend(running) run(running); pprint(running); pprint(pcblist);else while(ipriority=0; ready=addnode(ready,f); f-pstate=FINISH; running=deletenode(running,f); i+; q=ready; p=ready; maxpri=p-priority; while(p) /*動態尋找最大的一個優先級*/ if(p-priority)maxpri&p-pstate!=FINI
30、SH) maxpri=p-priority; f=p; q=p; p=p-link; p=running; if(p&q&(p-priority)priority) /*如果最大優先級大于正在運行的優先級則強占cpu*/ p-pstate=READY; q-pstate=RUNNING; ready=addnode(ready,p); running=deletenode(running,p); running=addnode(running,q); ready=deletenode(ready,q); else if(!runend(q)&running=NULL) q-pstate=RUN
31、NING; running=addnode(running,q); ready=deletenode(ready,q); p=ready; while(p) if(p-pstate!=FINISH)&(p-pstate!=RUNNING)(p-priority)+; p=p-link; if(running|ready) if(ready) pprint(ready); if(running)run(running); /*運行進程*/pprint(running);p=ready; main( )int i,j,sum=0,k=0;struct pcbs *p=NULL,*q=NULL;st
32、ruct word *pav=NULL,*s=NULL,*f=NULL;void priority();void pprint();struct pcbs *addnode();int randInt();if(fp=fopen(result.txt,w)=NULL)printf(cannot open file!n);exit(1);printf(nenter pcbnum(ensure pcbnum0):);scanf(%d,&PCBNUM);fprintf(fp,nthe pcb number is:%dnn,PCBNUM);for(i=0;ispace=(struct pcbs *)malloc(NUM); /*請求內存*/ if(pav-spa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國褥墊行業市場發展現狀及投資戰略咨詢報告
- 2022-2027年中國蛋白飲料行業市場深度分析及發展戰略規劃報告
- 棕剛玉砂輪項目投資可行性研究分析報告(2024-2030版)
- 中國低壓母線橋市場深度分析及投資戰略咨詢報告
- 中國移動機器人(AGV) 行業市場行情動態分析及發展前景趨勢預測報告
- 中國鋁焊條行業市場調查報告
- 中國鴛鴦養殖行業市場全景評估及投資策略咨詢報告
- 中國位置大數據行業投資潛力分析及行業發展趨勢報告
- 2025年 內蒙古公務員考試行測試題省直附答案
- 2025年 河南信陽申信發展投資集團有限公司招聘考試筆試試題附答案
- 四川2024年11月四川南充市人民政府辦公室遴選(考調)工作人員3人國家公務員考試消息筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 2025年云南省保山市隆陽區小升初模擬數學測試卷含解析
- 跨國知識產權爭議解決的國際合作與協調
- 2024年鄭州市公安機關招聘警務輔助人員筆試真題
- 火災解封申請書
- 2025年江蘇鹽城市燕舞集團有限公司招聘筆試參考題庫含答案解析
- 對發生爆炸及發現可疑爆炸物品事件的防范與處理預案
- 整體施工勞務服務方案
- DBJT13-119-2010 福建省住宅工程質量分戶驗收規程
- 2025年貴州盤江精煤股份有限公司招聘筆試參考題庫含答案解析
- 2002版《水利工程施工機械臺時費定額》
評論
0/150
提交評論