進程調度課程設計報告_第1頁
進程調度課程設計報告_第2頁
進程調度課程設計報告_第3頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、.進程調度課程設計2.1 實驗目的用高級語言編寫和調試一個有N 個進程并行的進程調度程序,以加深對進程的概念及進程調度算法的理解。2.2 實驗設備PC 機、 windows2000操作系統(tǒng)、 Turbo C 2.0 / VC+6.02.3 實驗要求實驗前應復習實驗中所涉及的理論知識和算法,針對實驗要求完成基本代碼編寫、實驗中認真調試所編代碼并進行必要的測試、記錄并分析實驗結果。實驗后認真書寫符合規(guī)范格式的實驗報告,按時上交。2.4 實驗內容設計一個有N 個進程并行的進程調度程序。進程調度算法: 采用最高優(yōu)先數(shù)優(yōu)先的調度算法(即把處理機分配給優(yōu)先數(shù)最高的進程)和先來先服務算法。具體描述如下:每個

2、進程有一個進程控制塊(PCB)表示。進程控制塊可以包含如下信息:進程名、優(yōu)先數(shù)、到達時間、需要運行時間、已用CPU 時間、進程狀態(tài)等等。分析:進程的優(yōu)先數(shù)及需要的運行時間可以事先人為地指定(也可以由隨機數(shù)產生)。進程的到達時間為進程輸入的時間。進程的運行時間以時間片為單位進行計算。每個進程的狀態(tài)可以是就緒W ( Wait)、運行R(Run)、或完成F( Finish )三種狀態(tài)之一。就緒進程獲得CPU 后都只能運行一個時間片。用已占用CPU 時間加 1 來表示。如果運行一個時間片后,進程的已占用CPU 時間已達到所需要的運行時間,則撤消該進程,如果運行一個時間片后進程的已占用CPU 時間還未達

3、所需要的運行時間,也就是進程還需要繼續(xù)運行,此時應將進程的優(yōu)先數(shù)減1(即降低一級) ,然后按照優(yōu)先數(shù)的大小把它插入就緒隊列等待CPU。每進行一次調度程序都打印一次運行進程、就緒隊列、以及各個進程的PCB,以便進行檢查。重復以上過程,直到所要進程都完成為止。調度算法的參考流程圖如下:.2.5實驗結果及分析實驗代碼:#include<stdio.h>#include<stdlib.h>struct pcbchar name2;char status;int priority;int need_time;int used_time;struct pcb *next;.;typ

4、edef struct pcb *PCB;PCB Initpcb()PCB P;P=(PCB)malloc(sizeof(struct pcb);P->next=NULL;return P;void Sort(PCB P,struct pcb *p)struct pcb *s,*q;s=P->next;if(s=NULL)p->next=P->next;P->next=p;elseq=s->next;while(q!=NULL)if(p->priority<=s->priority&&p->priority>q-

5、>priority)s->next=p;p->next=q;break;else.s=q;q=q->next;if(p->priority<=s->priority)s->next=p;p->next=q;elses=P->next;P->next=p;p->next=s;void Input(PCB P)int SIZE,i;struct pcb *p;printf("Please input the number of process:");scanf("%d",&SIZ

6、E);printf("Please input the process's name status priority need_time used_time:n ");for(i=0;i<SIZE;i+)printf("Process NO.%d n",i+1);p=(struct pcb *)malloc(sizeof(struct pcb);scanf("%s %c %d %d %d",p->name,&p->status,&p->priority,&p->need_t

7、ime,&p->used_time);.printf("n");p->next=NULL;Sort(P,p);int QueueNull(PCB P)if(P->next=NULL)return 0;void Timeout(PCB P,int time)int t;t=P->next->need_time-P->next->used_time;if(t>time)P->next->used_time=P->next->used_time+time;elseP->next->used

8、_time=P->next->used_time+t;P->next->priority=P->next->priority-1;void display2(PCB P)int n=0;struct pcb *s,*t;s=t=P;s=P->next;while(s!=NULL)if(n=0).printf("Running process:n");printf("NameStatusPriorityNeed_TimeUsed_timen");s->status='R'printf(&quo

9、t;%6s%10c%11d%12d%12dn",s->name,s->status,s->priority+1,s->need_time,s->used_time-2);n=1;elseprintf("Waiting process:n");s->status='W'printf("NameStatusPriorityNeed_TimeUsed_timen");printf("%6s%10c%11d%12d%12dn",s->name,s->status,s-&

10、gt;priority,s->need_time,s->used_time);t=s;s=t->next;printf("nn");void Deletepcb(PCB P)struct pcb * s,*q;s=P;q=P->next;P->next=q->next;free(q);void Sort2(PCB P)/該函數(shù)的作用是將頭結點的后一個節(jié)點在鏈表中重新排序.struct pcb * s,*q,*p;s=P->next;p=s;q=s->next;P->next=q;Sort(P,p);/ 排序函數(shù)main()int time;struct pcb * s,*q,*p;printf("Please input the size of time:");scanf("%d",&time);

溫馨提示

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

評論

0/150

提交評論