操作系統(tǒng)進(jìn)程控制與調(diào)度_第1頁(yè)
操作系統(tǒng)進(jìn)程控制與調(diào)度_第2頁(yè)
操作系統(tǒng)進(jìn)程控制與調(diào)度_第3頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、操作系統(tǒng)實(shí)驗(yàn)報(bào)告2012年 12 月 19 日一、實(shí)驗(yàn)內(nèi)容1、自定義進(jìn)程相關(guān)的數(shù)據(jù)結(jié)構(gòu);2、利用MFC類庫(kù)中的棧(queue),鏈表(list),向量(vector)等模板模擬進(jìn)程控制塊隊(duì)列、進(jìn) 程控制塊優(yōu)先級(jí)隊(duì)列、統(tǒng)計(jì)信息鏈表及其指令集合;3、利用 MSDN 和 MFC API 編程實(shí)現(xiàn)常見的進(jìn)程控制和調(diào)度策略(先來(lái)先服務(wù)算法、時(shí)間 片輪轉(zhuǎn)算法、最高優(yōu)先權(quán)優(yōu)先調(diào)度算法、最短進(jìn)程優(yōu)先調(diào)度算法) ;4、 測(cè)試以上進(jìn)程調(diào)度策略的周轉(zhuǎn)時(shí)間、帶權(quán)周轉(zhuǎn)時(shí)間、 平均周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間, 并定性評(píng)價(jià)它們的性能。二、實(shí)驗(yàn)要求用高級(jí)語(yǔ)言編寫和調(diào)試進(jìn)程調(diào)度的模擬程序,以加深對(duì)進(jìn)程調(diào)度算法的理解。三、實(shí)驗(yàn)步

2、驟typedef struct PCBNodeint ID;int Priority;int CPUtime;int Alltime;int Arrivetime;int state;int counter;struct PCBNode *next;PCB;定義數(shù)據(jù)結(jié)構(gòu)PCB *run;PCB *ready;PCB *over;PCB *head;/定義狀態(tài)量int Min(PCB *head)挑選出隊(duì)列中的擁有最小 alltime值的塊,返回塊號(hào),用于sjf算法PCB *p;/q 用來(lái)記錄這個(gè)塊的地址int min, id;/記錄最小值和塊號(hào)p=head->next;if(p)min=

3、p->Alltime;id=p->ID;while(p->next)if(min>p->next->Alltime) min=p->next->Alltime; id=p->next->ID; p=p->next;elsep=p->next;return id;prioint Max(PCB *head)/ 挑選出隊(duì)列中的擁有最大優(yōu)先級(jí)的塊,返回塊號(hào), 算法PCB *p;/q 用來(lái)記錄這個(gè)塊的地址int max,id;/ 記錄最大和塊號(hào) p=head->next;if(p) max=p->Priority; i

4、d=p->ID;while(p->next) if(max<=p->next->Priority) max=p->next->Priority; id=p->next->ID; p=p->next;elsep=p->next;return id;PCB *CreatPCB(int n)int i;PCB *p,*q; head=(PCB*)malloc(sizeof(PCB); head->next=NULL;p=head;for(i=1;i<=n;i+) q=(PCB*)malloc(sizeof(PCB); q-

5、>ID=i;q->CPUtime=0; q->Alltime=rand()%200; q->Priority=rand()%10;q->state=Ready; q->Arrivetime=0; p->next=q;p=q; q->next=NULL;head->next->Priority=0;return head;/創(chuàng)建pcb塊void Display(PCB *head)statePCB *p; p=head->next;printf("ID Arrivetime CPUtime(已占用)Alltime Pri

6、ority n");while(p)printf("%d",p->ID);printf("%d",p->Arrivetime);printf("%d",p->CPUtime);printf("%d",p->Alltime);printf("%d",p->Priority);printf("%dn",p->state);p=p->next;/顯示PCB塊void FCFS(PCB *head,PCB *over)PCB *p,

7、*q;int j=0;int n=0,s=0;double m;ready=head; p=ready->next; q=over;while(p) p->state=Running; ready->next=p->next; n=p->Alltime+n; p->CPUtime=p->Alltime; p->Alltime=0; s=s+n; p->next=NULL; q->next=p; p->state=Over; q=q->next; q->next=NULL; p=head->next; j+;pr

8、intf("第%d次執(zhí)行算法后的就緒隊(duì)列:n",j);Display(head);m=(double)s/j;printf("完成順尋為:n");Display(over);printf("n");printf("每個(gè)進(jìn)程等待的平均時(shí)間為:%lfn",m);printf(" 所有進(jìn)程等待的總時(shí)間為: %d",s);void SJF(PCB *head,PCB *over)/sjf 算法PCB *p,*q,*b,*o;/b 用來(lái)記錄該塊的地址 int s ; /記錄塊號(hào) int m,n,h=0,d

9、=0,j=0;double f; p=head->next;q=over; o=head; printf("完成順尋為:n");m=p->ID;n=p->Alltime; s=Min(head);b=p->next;printf("%d: n",s); while(head->next) while(s!=p->ID) o=p; p=p->next; d=p->Alltime+d; p->CPUtime=p->Alltime; p->Alltime=0; h=d+h; b=p; q->

10、;next=b; o->next=p->next; p=head->next; b->next=NULL; o=head;q=q->next; s=Min(head); j+;printf("第%d次執(zhí)行算法后的就緒隊(duì)列:n",j); Display(head);f=(double)h/j;printf("完成順尋為:n");Display(over);printf(" 每個(gè)進(jìn)程等待的平均時(shí)間為: %lfn",f); printf(" 所有進(jìn)程等待的總時(shí)間為: %d",h);void

11、Prio(PCB *head,PCB *over)PCB *p,*q,*b,*o;/b 用來(lái)記錄該塊的地址int s;記錄塊號(hào)int m,n,h=0,d=0,j=0;double f; p=head->next;o=head;q=over;printf("當(dāng)前擁有最大優(yōu)先級(jí)的塊號(hào)為:n"); m=p->ID; n=p->Alltime; s=Max(head); b=p->next;printf("%d: n",s);while(head->next) while(s!=p->ID) o=p; p=p->next

12、; d=p->Alltime+d; p->CPUtime=p->Alltime;p->Alltime=0;h=d+h;b=p;q->next=b; o->next=p->next; p=head->next; b->next=NULL;o=head;q=q->next; s=Max(head);j+;printf("第%d次執(zhí)行算法后的就緒隊(duì)列:n",j); Display(head);f=(double)h/j;printf("完成順尋為:n");Display(over);printf(&q

13、uot; 每個(gè)進(jìn)程等待的平均時(shí)間為 %lfn",f); printf(" 所有進(jìn)程等待的總時(shí)間為: %d",h);void RR(PCB *head,PCB *over,i nt t,i nt k) 時(shí)間片輪轉(zhuǎn)法/k 用來(lái)記錄剩余要執(zhí)行的進(jìn)程數(shù)目PCB *p,*q,*r,*o,*tail;/o 用來(lái)記錄當(dāng)前塊的地址 int n=0,s=0,f;double h;f=k;p=head->next;while(p->next)tail=p; p=p->next;printf(" 執(zhí)行順序?yàn)椋?n"); tail=p;o=p;前驅(qū)t

14、ail->n ext=head->n ext; p=head->n ext;q=over;while(k>0)r=head->n ext; if(p->Alltime>t)該進(jìn)程還未執(zhí)行完成 p->Alltime=p->Alltime-t;n=n+t;s=s+n;o=p;printf("執(zhí)行進(jìn)程 %d",p->ID);printf("該進(jìn)程的 Alltime 變?yōu)閐n",p->Alltime); p=p->n ext;else/該進(jìn)程可以完成了prin tf("完成進(jìn)程:%dn",p->ID);n=n+p->Alltime;s=s+n;p->Alltime=0;o->n ext=p->n ext;q->n ext=p;q=q->n e

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論