操作系統(tǒng)綜合性實驗報告-進程調度(含代碼)_第1頁
操作系統(tǒng)綜合性實驗報告-進程調度(含代碼)_第2頁
操作系統(tǒng)綜合性實驗報告-進程調度(含代碼)_第3頁
操作系統(tǒng)綜合性實驗報告-進程調度(含代碼)_第4頁
操作系統(tǒng)綜合性實驗報告-進程調度(含代碼)_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、XXXXXX計算機系綜合性實驗實 驗 報 告 課程名稱 操作系統(tǒng) B 實驗學期 XXXX 至 XXXX 學年 第 X 學期學生所在系部 計算機系 年級 XXXX 專業(yè)班級 XXXXXX 學生姓名 XXXX 學號 XXXXXXXXXXXX 任課教師 XXX 實驗成績 計算機系制 操作系統(tǒng)B 課程綜合性實驗報告開課實驗室: 年 月 日實驗題目進程調度算法模擬程序設計一、實驗目的通過對進程調度算法的模擬,進一步理解進程的基本概念,加深對進程運行狀態(tài)和進程調度過程、調度算法的理解。二、設備與環(huán)境1. 硬件設備:PC機一臺2. 軟件環(huán)境:安裝Windows操作系統(tǒng)或者Linux操作系統(tǒng),并安裝相關的程序

2、開發(fā)環(huán)境,如C C+Java 等編程語言環(huán)境。三、實驗內容1. 用C語言(或其它語言,如Java)編程實現(xiàn)對N個進程采用某種進程調度算法(如動態(tài)優(yōu)先權調度算法、先來先服務算法、短進程優(yōu)先算法、時間片輪轉調度算法)調度執(zhí)行的模擬。2. 每個用來標識進程的進程控制塊PCB可用結構來描述,包括以下字段:typedef struct node char name10; /進程的名字 int round; /一次分配CPU的時間片 int cputime; /CPU已執(zhí)行時間 int needtime; /進程執(zhí)行所需要的時間 char state; /進程的狀態(tài),W-就緒態(tài),R-執(zhí)行態(tài),F(xiàn)-完成態(tài) i

3、nt count; /記錄進程執(zhí)行的次數(shù) struct node *next; /隊列指針 PCB; 3.主要算法:(1)取得第一個就緒隊列節(jié)點void GetFirst() run = ready; if(ready!=NULL) run ->state = 'R' ready = ready ->next; run ->next = NULL; (2)將進程插入就緒片隊列void InsertTime(PCB *in) /將進程插入到就緒隊列尾部 PCB *fst; fst = ready; if(ready = NULL) in->next = r

4、eady; ready = in; else while(fst->next != NULL) fst = fst->next; in ->next = fst ->next; fst ->next = in; (3)時間片輪轉調度void RoundRun() int flag = 1; GetFirst(); while(run != NULL) Output(); while(flag) run->count+; run->cputime+; run->needtime-; if(run->needtime = 0) /進程執(zhí)行完畢

5、run ->state = 'F' InsertFinish(run); flag = 0; else if(run->count = run->round)/時間片用完 run->state = 'W' run->count = 0; /計數(shù)器清零,為下次做準備 InsertTime(run); flag = 0; flag = 1; GetFirst(); 4.流程圖:開始界面顯示輸入進程數(shù)目進程信息輸入并初始化將進程插入就緒隊列設標志flag=1取就緒隊列首節(jié)點Run!=null N結束輸出各隊列進程信息 YFlag=1 Nr

6、un->count+; run->cputime+;run->needtime-; run->cputime+; run->needtime-; Yrun->needtime = 0run->count= run->roundrun->roundrun->round Y N N 將進程插入完成隊列將進程插入就緒隊列 YFlag=0 四、實驗結果及分析 1.程序運行截圖:2.實驗體會(1)、本實驗的難點是每執(zhí)行一個時間片就讓它排到隊尾,也即重新排序,并從頭開始調度執(zhí)行?。?)、時間片的工作流程是:時間片輪轉的原則是系統(tǒng)將所有的就緒進程按

7、照先來先服務的原則排成一個隊列,每次調度時,把CPU分配隊首進程,并令其執(zhí)行一個時間片,當執(zhí)行完時,有一個計時器發(fā)出時鐘中斷請求,該進程停止,并被送到就緒隊列的末尾,然后再把處理機分配就緒隊列的隊列進程,同時也讓它執(zhí)行一個時間片。(3)、通過親手實驗,對上述寫的時間片的工作流程和原理有了更貼切的認識。另外本次實驗遇到了很大的麻煩,其實大部分代碼是借鑒網(wǎng)上的,但自己通過修改,來獲取自己想要的,在自己的努力和同學的幫助下終于調試正確,很是高興。教 師 評 價評定項目ABCD評定項目ABCD算法正確界面美觀,布局合理程序結構合理操作熟練語法、語義正確解析完整實驗結果正確文字流暢報告規(guī)范題解正確其他:

8、評價教師簽名:年 月 日附代碼:#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct node char name10; /進程的名字 int round; /一次分配CPU的時間片 int cputime; /CPU已執(zhí)行時間 int needtime; /進程執(zhí)行所需要的時間 char state; /進程的狀態(tài),W-就緒態(tài),R-執(zhí)行態(tài),F(xiàn)-完成態(tài) int count; /記錄進程執(zhí)行的次數(shù) struct node *next; /隊列指針 PCB; PCB *

9、ready=NULL,*run=NULL,*finish=NULL; /定義三個隊列,就緒隊列,執(zhí)行隊列和完成隊列 int num; void GetFirst(); /從就緒隊列取得第一個節(jié)點 void Output(); /輸出各隊列信息 void InsertTime(PCB *in); /插入就緒片隊列 void InsertFinish(PCB *in); /插入完成隊列 void TimeCreate(); /時間片輸入函數(shù) void RoundRun(); /時間片輪轉調度 void main() printf("n* 歡迎光臨指導 *n"); printf(

10、"n*時間片輪轉進程調度算法 *n");printf("n* 計科B082 韓友 *n");printf("n* 200807014225 *n");printf("n* 2011年5月15日 *n"); printf("n請輸入要創(chuàng)建的進程數(shù)目:n"); scanf("%d",&num); getchar(); /吸收回車符號 TimeCreate(); RoundRun(); Output(); void GetFirst() /取得第一個就緒隊列節(jié)點 run =

11、 ready; if(ready!=NULL) run ->state = 'R' ready = ready ->next; run ->next = NULL; void Output() /輸出隊列信息 PCB *p; p = ready; printf("進程 輪數(shù) cpu時間 需要時間 進程狀態(tài) 計數(shù)器n"); while(p!=NULL) printf("%st%dt%dt%dt%ct%dn",p->name,p->round,p->cputime,p->needtime,p->

12、state,p->count); p = p->next; p = finish; while(p!=NULL) printf("%st%dt%dt%dt%ct%dn",p->name,p->round,p->cputime,p->needtime,p->state,p->count); p = p->next; p = run; while(p!=NULL) printf("%st%dt%dt%dt%ct%dn",p->name,p->round,p->cputime,p->

13、needtime,p->state,p->count); p = p->next; void InsertTime(PCB *in) /將進程插入到就緒隊列尾部 PCB *fst; fst = ready; if(ready = NULL) in->next = ready; ready = in; else while(fst->next != NULL) fst = fst->next; in ->next = fst ->next; fst ->next = in; void InsertFinish(PCB *in) /將進程插入到

14、完成隊列尾部 PCB *fst; fst = finish; if(finish = NULL) in->next = finish; finish = in; else while(fst->next != NULL) fst = fst->next; in ->next = fst ->next; fst ->next = in; void TimeCreate() /時間片輪轉輸入函數(shù) PCB *tmp; int i; printf("輸入進程名字和進程時間片所需時間:n"); for(i = 0;i < num; i+) i

15、f(tmp = (PCB *)malloc(sizeof(PCB)=NULL) perror("malloc"); exit(1); scanf("%s",tmp->name); getchar(); scanf("%d",&(tmp->needtime); tmp ->cputime = 0; tmp ->state ='W' tmp ->round = 2; /假設每個進程所分配的時間片是2 tmp ->count = 0; InsertTime(tmp); void RoundRun() /時間片輪轉調度算法 int flag = 1; GetFirst(); while(run != NULL) Output(); while(flag) run->count+; run->cputime+; run->needtime-; if(run-&

溫馨提示

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

評論

0/150

提交評論