操作系統實驗二報告-時間片輪轉進程調度算法_第1頁
操作系統實驗二報告-時間片輪轉進程調度算法_第2頁
操作系統實驗二報告-時間片輪轉進程調度算法_第3頁
操作系統實驗二報告-時間片輪轉進程調度算法_第4頁
操作系統實驗二報告-時間片輪轉進程調度算法_第5頁
已閱讀5頁,還剩7頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

1、操作系統實驗報告實驗二時間片輪轉進程調度算法學號:班級:姓名:【實驗題目】:時間片輪轉進程調度算法 【實驗目的】 通過這次實驗,加深對進程概念的理解,進一步掌握進程狀態的轉變、進程調度的策略及對系統性能的評價方法?!緦嶒瀮热荨繂栴}描述:設計程序模擬進程的時間片輪轉RR調度過程。假設有n個進程分別在T1, ,Tn時刻到達系統,它們需要的服務時間分別為S1, ,Sn。分別利用不同的時間片大小q,采用時間片輪轉RR進程調度算法進行調度,計算每個進程的完成時間,周轉時間和帶權周轉時間,并且統計n個進程的平均周轉時間和平均帶權周轉時間。程序要求如下:1)進程個數n;每個進程的到達時間T1, ,Tn和服務

2、時間S1, ,Sn;輸入時間片大小q。2)要求時間片輪轉法RR調度進程運行,計算每個進程的周轉時間,帶權周轉時間,并且計算所有進程的平均周轉時間,帶權平均周轉時間;3)輸出:要求模擬整個調度過程,輸出每個時刻的進程運行狀態,如“時刻3:進程B開始運行”等等;4)輸出:要求輸出計算出來的每個進程的周轉時間,帶權周轉時間,所有進程的平均周轉時間,帶權平均周轉時間。實現提示:用C+語言實現提示:1)程序中進程調度時間變量描述如下:int ArrivalTime100;int ServiceTime100;int PServiceTime100;int FinishTime100;int WholeT

3、ime100;double WeightWholeTime100;double AverageWT,AverageWWT;bool Finished100;2)進程調度的實現過程如下: 變量初始化; 接收用戶輸入n,T1, ,Tn,S1, ,Sn;時間片大小q; 按照時間片輪轉RR算法進行進程調度,計算進程的完成時間、周轉時間和帶權周轉時間; 計算所有進程的平均周轉時間和平均帶權周轉時間; 按格式輸出調度結果。實驗要求:1)上機前認真復習時間片輪轉RR進程調度調度算法,熟悉進程調度的執行過程;2)上機時獨立編程、調試程序;3)根據具體實驗要求,完成好實驗報告(包括實驗的目的、內容、要求、源程序

4、、實例運行結果截圖)?!驹闯绦颉款^文件RR.h#include#include#include#include#include#define MaxNum 100typedef struct pcb /定義進程控制塊char NameMaxNum; /進程名int arrivetime; /到達時間int runtime; /運行時間int wholetime; /固定運行時間int FinishTime; /完成時間double WeightTime; /周轉時間double WeightWholeTime; /帶權周轉時間char state; /運行后的狀態struct pcb *nex

5、t;PCB;/全局變量int N; /實際進程數double SumWT; /周轉時間之和double SumWWT; /帶權周轉時間之和double AverageWT; /平均周轉時間double AverageWWT; /平均帶權周轉時間typedef struct /定義隊列,封裝頭結點,指針分別指向隊頭和隊尾PCB *front,*rear;queue;queue *init() /進程隊列置空queue *head;head=(queue*)malloc(sizeof(queue);head-front=NULL;head-rear=NULL;return head;int emp

6、ty(queue *head) /檢驗隊列是否為空return (head-front?0:1);queue *append(queue *head,char cMaxNum,int a,int r,char s) /進程隊列入隊,往后插入PCB *p;p=(PCB *)malloc(sizeof(PCB);strcpy(p-Name,c);p-arrivetime=a;p-runtime=r;p-wholetime=r;p-state=s;/p-FinishTime=0;/p-WeightTime=0;/p-WeightWholeTime=0;p-next=NULL;if(empty(hea

7、d)head-front=head-rear=p;elsehead-rear-next=p;head-rear=p;return head;queue *creat(queue *head) /創建進程隊列char cMaxNum;char s=R;int a,r,i;printf(請輸入共有幾個進程:n);scanf(%d,&N);for(i=1;ifront;if(!p)printf(時間片輪轉調度隊列為空!n);while(p)printf(Name=%s arrivetime=%d runtime=%d state=%c,p-Name,p-arrivetime,p-runtime,p-

8、state);printf(n);p=p-next;/*時間片輪轉法調度算法的實現*/void RR(queue *head,int q)int t=head-front-arrivetime, lt=head-rear-arrivetime;if(head-front-runtimefront-runtime;elset=t+q;/*進程隊列為不空才可調度*/while(!empty(head)PCB *p1,*p2; printf(n時刻 進程 運行后的狀態n);/*第一種情況:當前運行的時間小于最后一個進程到達時間做一下操作*/while(tfront;printf(%2d %s,t,p

9、1-Name);p1-runtime=p1-runtime-q;/1.運行時間小于0,刪除隊首if(p1-runtimestate=C;printf( %cn,p1-state);p1-FinishTime=t;p1-WeightTime=p1-FinishTime-p1-arrivetime;p1-WeightWholeTime=p1-WeightTime/p1-wholetime; SumWT+=p1-WeightTime;SumWWT+=p1-WeightWholeTime;printf(時刻%2d進程%s運行結束,進程%s周轉時間=%5.2f,帶權周轉時間=%5.2fn,t,p1-Na

10、me,p1-Name,p1-WeightTime,p1-WeightWholeTime);head-front=p1-next;free(p1);/2.運行時間大于0,向后找位置插入elseprintf( %cn,p1-state);p2=p1-next;while(p2-next & p2-arrivetime != t)p2=p2-next;/此時無新進入隊列的進程,有兩種情況:1.不用找位置往后插入,隊首不變,不做操作/2.找位置往后插入if(p2-arrivetime != t)PCB *p3=p1,*p4;while(p3-next & p3-arrivetimenext;if(p3

11、-arrivetimet)if(p4!=p1) /p1插在p4后,頭為p1-nexthead-front=p1-next;p1-next=p4-next;p4-next=p1;else /不做操作p4=p3=p2=NULL;elsep4=p3=p2=NULL;/此時有新進入隊列的進程時:p1插在新進入隊列的進程p2后,隊首為p1-nextelsehead-front=p1-next;p1-next=p2-next;p2-next=p1;/時刻變化 if(head-front-runtimefront-runtime;elset=t+q;/*第一種情況結束*/*第二種情況:當期運行的時間大于最后

12、一個進程到達的時間做以下操作*/while(t=lt)p1=head-front;printf(%2d %s,t,p1-Name);p1-runtime=p1-runtime-q;/1.運行時間小于0,刪除隊首if(p1-runtimestate=C;printf( %cn,p1-state); p1-FinishTime=t;p1-WeightTime=p1-FinishTime-p1-arrivetime;p1-WeightWholeTime=p1-WeightTime/p1-wholetime; SumWT+=p1-WeightTime;SumWWT+=p1-WeightWholeTim

13、e;printf(時刻%2d進程%s運行結束,進程%s周轉時間=%5.2f,帶權周轉時間=%5.2fn,t,p1-Name,p1-Name,p1-WeightTime,p1-WeightWholeTime);/printf(時刻%2d進程%s運行結束,t,p1-pname);head-front=p1-next;free(p1);/2.運行時間大于0,直接插在隊尾elseprintf( %cn,p1-state);/若原隊列只有一個進程,不必往隊尾插 if(!p1-next)head-front=p1; /若原隊列有多個進程elsehead-front=p1-next; head-rear-n

14、ext=p1;head-rear=p1;p1-next=NULL;/時刻變化,隊列為空時不做時刻變化if(empty(head)return;elseif(head-front-runtimefront-runtime;elset=t+q;/*第二種情況結束*/主程序Main.cpp#include#include#include#include#includevoid main()queue *head;int q;head=init();head=creat(head);printf(n您輸入的時間片輪轉進程隊列為:n);print(head);printf(n請輸入時間片輪轉調度的時間片為:);scanf(%d,&q);/時間片輪轉調度RR(head,q);AverageWT=SumWT/N;AverageWWT=SumWWT/N;printf(平

溫馨提示

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

評論

0/150

提交評論