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

下載本文檔

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

文檔簡介

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

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)挑選出隊列中的擁有最小 alltime值的塊,返回塊號,用于sjf算法PCB *p;/q 用來記錄這個塊的地址int min, id;/記錄最小值和塊號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)/ 挑選出隊列中的擁有最大優(yōu)先級的塊,返回塊號, 算法PCB *p;/q 用來記錄這個塊的地址int max,id;/ 記錄最大和塊號 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í)行算法后的就緒隊列:n",j);Display(head);m=(double)s/j;printf("完成順尋為:n");Display(over);printf("n");printf("每個進程等待的平均時間為:%lfn",m);printf(" 所有進程等待的總時間為: %d",s);void SJF(PCB *head,PCB *over)/sjf 算法PCB *p,*q,*b,*o;/b 用來記錄該塊的地址 int s ; /記錄塊號 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í)行算法后的就緒隊列:n",j); Display(head);f=(double)h/j;printf("完成順尋為:n");Display(over);printf(" 每個進程等待的平均時間為: %lfn",f); printf(" 所有進程等待的總時間為: %d",h);void

11、Prio(PCB *head,PCB *over)PCB *p,*q,*b,*o;/b 用來記錄該塊的地址int s;記錄塊號int m,n,h=0,d=0,j=0;double f; p=head->next;o=head;q=over;printf("當前擁有最大優(yōu)先級的塊號為: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í)行算法后的就緒隊列:n",j); Display(head);f=(double)h/j;printf("完成順尋為:n");Display(over);printf(&q

13、uot; 每個進程等待的平均時間為 %lfn",f); printf(" 所有進程等待的總時間為: %d",h);void RR(PCB *head,PCB *over,i nt t,i nt k) 時間片輪轉(zhuǎn)法/k 用來記錄剩余要執(zhí)行的進程數(shù)目PCB *p,*q,*r,*o,*tail;/o 用來記錄當前塊的地址 int n=0,s=0,f;double h;f=k;p=head->next;while(p->next)tail=p; p=p->next;printf(" 執(zhí)行順序為: 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)該進程還未執(zhí)行完成 p->Alltime=p->Alltime-t;n=n+t;s=s+n;o=p;printf("執(zhí)行進程 %d",p->ID);printf("該進程的 Alltime 變?yōu)閐n",p->Alltime); p=p->n ext;else/該進程可以完成了prin tf("完成進程:%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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論