基于優(yōu)先數(shù)的時間片輪轉調度算法調度處理器_第1頁
基于優(yōu)先數(shù)的時間片輪轉調度算法調度處理器_第2頁
基于優(yōu)先數(shù)的時間片輪轉調度算法調度處理器_第3頁
基于優(yōu)先數(shù)的時間片輪轉調度算法調度處理器_第4頁
基于優(yōu)先數(shù)的時間片輪轉調度算法調度處理器_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

題目4基于優(yōu)先數(shù)的時間片輪轉調度算法調度處理器一、實驗目的在采用多道程序設計的系統(tǒng)中,同時處于就緒態(tài)的進程往往有多個,當就緒態(tài)的進程數(shù)大于處理器的個數(shù)時,就需按照某種策略進行分配處理器。本次設計模擬在單處理器情況下采用基于優(yōu)先數(shù)的時間片輪轉調度算法進行處理器調度,加深了解處理器調度工作過程。二、實驗內容及要求1、設計一個程序實現(xiàn)基于優(yōu)先數(shù)的時間片輪轉調度算法調度處理器。2、假定系統(tǒng)有5個進程,每個進程用一個進程控制塊PCB開代表,進程控制塊的結構如下圖1.2所示:進程名指針到達時間要求運行時間已運行時間優(yōu)先數(shù)進程狀態(tài)圖1其中:進程名:作為進程的標識。指針:進程按順序排成循環(huán)鏈表,用指針指出下一個進程的進程控制塊首地址,最后一個進程中的指針指出第一個進程的進程控制塊首地址。要求運行時間:假設進程需要運行的單位時間數(shù)。已運行時間:假設進程已經運行的單位時間數(shù),初值為0。狀態(tài):可假設有兩種狀態(tài),就緒狀態(tài)和結束狀態(tài)。進程的初始狀態(tài)都為就緒狀態(tài)。3、每次運行所設計的處理器調度程序調度進程之前,為每個進程任意確定它的要求運行時間。4、此程序是模擬處理器調度,因此,被選中的進程并不實際啟動運行,而是執(zhí)行已運行時間+1來模擬進程的一次運行,表示進程已經運行過一個單位時間。.5、在所設計的程序中應有顯示或打印語句,能顯示或打印每次被選中的進程名以及運行一次后進程隊列的變化。6、為進程任意確定要求運行時間,運行所設計的處理器調度程序,顯示或打印逐次被選中進程的進程名以及進程控制塊的動態(tài)變化過程。7、設有一個就緒隊列,就緒進程按優(yōu)先數(shù)(優(yōu)先數(shù)范圍0-100)由小到大排列(優(yōu)先數(shù)越小,級別越高)。當某一進程運行完一個時間片后,其優(yōu)先級應下調(如優(yōu)先數(shù)加2或3)。8、例如一組進程如下表:進程名ABCDEFGHJKLM到達時間012368121212182525服務時間641051251043158三、實驗報告1、程序中使用的數(shù)據結構及符號說明。2、給出主要算法的流程圖3、給出程序清單并附上注釋4、打印程序運行時的初值和運行結果。(運行一個進程輸出一次結果)三、實驗代碼#include<stdio.h>#include<stdlib.h>#include<conio.h>#definegetpch(type)(type*)malloc(sizeof(type))//為進程創(chuàng)建一個空間structworktime{floatTb;//作業(yè)運行時刻floatTc;//作業(yè)完成時刻floatTi;//周轉時間floatWi;//帶權周轉時間};structjcb{charname[10];//作業(yè)名floatsubtime;//作業(yè)到達時間floatruntime;//作業(yè)所需的運行時間charresource;//所需資源floatRp;//后備作業(yè)響應比charstate;//作業(yè)狀態(tài)}printf("\n");}intjudge(JCB*p)//判斷所有進程運行結束{intflag=1,i;for(i=0;i<N;i++){if(p->state!='e'){flag=0;break;}p=p->link;}returnflag;}voidRRget()//時間片輪轉算法{JCB*s;intflag1=0;s=(JCB*)malloc(sizeof(JCB));s=front;printf("\n--------------------------------------------\n");output();printf("請輸入任意一鍵繼續(xù)\n");getch();//按任意鍵繼續(xù)s=front;while(flag1!=1){if(s->state=='r'){s->worked_time++;s->need_time--;if(s->need_time==0)s->state='e';output();printf("請輸入任意一鍵繼續(xù)...\n");getch();}if(s->state=='e'&&s->flag==0){printf("進程%s已經運行完成!\n\n",s->name);s->flag=1;}s=s->link;flag1=judge(s);}printf("--------------------------------------------\n");}voidinput(){inti,num;printf("\n請輸入作業(yè)的個數(shù):");scanf("%d",&num);for(i=0;i<num;i++){printf("\n作業(yè)號No.%d:\n",i);p=getpch(JCB);printf("\n輸入作業(yè)名:");scanf("%s",p->name);printf("\n輸入作業(yè)到達時刻:");scanf("%f",&p->subtime);printf("\n輸入作業(yè)運行時間:");scanf("%f",&p->runtime);printf("\n");p->state='w';p->link=NULL;sort();}}intspace(){intl=0;JCB*jr=ready;while(jr!=NULL){l++;jr=jr->link;}return(l);}voiddisp(JCB*jr,intselect){if(select==3)printf("\n作業(yè)到達時間服務時間響應比運行時刻完成時刻周轉時間帶權周轉時間\n");elseprintf("\n作業(yè)到達時間服務時間運行時刻完成時刻周轉時間帶權周轉時間\n");printf("|%s\t",jr->name);printf("|%.2f\t",jr->subtime);printf("|%.2f\t",jr->runtime);if(select==3&&p==jr)printf("|%.2f",jr->Rp);if(p==jr){printf("|%.2f\t",jr->wt.Tb);printf("|%.2f",jr->wt.Tc);printf("|%.2f\t",jr->wt.Ti);printf("|%.2f",jr->wt.Wi);}printf("\n");}intdestroy(){printf("\n作業(yè)[%s]已完成.\n",p->name);free(p);return(1);}voidcheck(intselect){JCB*jr;printf("\n****當前正在運行的作業(yè)是:%s",p->name);disp(p,select);jr=ready;printf("\n****當前就緒隊列狀態(tài)為:\n");while(jr!=NULL){jr->Rp=(jr->runtime+T-jr->subtime)/jr->runtime;disp(jr,select);jr=jr->link;}destroy();}voidrunning(JCB*jr){if(T>=jr->subtime)jr->wt.Tb=T;elsejr->wt.Tb=jr->subtime;jr->wt.Tc=jr->wt.Tb+jr->runtime;jr->wt.Ti=jr->wt.Tc-jr->subtime;jr->wt.Wi=jr->wt.Ti/jr->runtime;T=jr->wt.Tc;}intmain(){intselect=0,len,h=0;floatsumTi=0,sumWi=0;printf("\t---*****************---\n");printf("請選擇作業(yè)調度算法的方式:\n");printf("\t1.FCFS2.SJF3.HRN4.RR\n\n");printf("\t---*****************---\n");printf("請輸入作業(yè)調度算法序號(1-4):");scanf("%d",&select);if(select==4){creatJCB();RRget();}else{input();len=space();while((len!=0)&&(ready!=NULL)){h++;printf("\n執(zhí)行第%d個作業(yè)\n",h);p=ready;ready=p->link;p->link=NULL;p->state='R';running(p);sumTi+=p->wt.Ti;sumWi+=p->wt.Wi;check(select);if(select==2&&h<len-1)SJFget();if(s

溫馨提示

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

評論

0/150

提交評論