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

下載本文檔

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

文檔簡介

1、題目4 基于優(yōu)先數的時間片輪轉調度算法調度處理器一、實驗目的在采用多道程序設計的系統(tǒng)中,同時處于就緒態(tài)的進程往往有多個,當就緒態(tài)的進程數大于處理器的個數時,就需按照某種策略進行分配處理器。本次設計模擬在單處理器情況下采用基于優(yōu)先數的時間片輪轉調度算法進行處理器調度,加深了解處理器調度工作過程。二、實驗內容及要求1、設計一個程序實現基于優(yōu)先數的時間片輪轉調度算法調度處理器。2、假定系統(tǒng)有5個進程,每個進程用一個進程控制塊PCB開代表,進程控制塊的結構如下圖1.2所示:進程名指針到達時間要求運行時間已運行時間優(yōu)先數進程狀態(tài)圖1其中:進程名:作為進程的標識。指針:進程按順序排成循環(huán)鏈表,用指針指出下

2、一個進程的進程控制塊首地址,最后一個進程中的指針指出第一個進程的進程控制塊首地址。要求運行時間:假設進程需要運行的單位時間數。已運行時間:假設進程已經運行的單位時間數,初值為0。狀態(tài):可假設有兩種狀態(tài),就緒狀態(tài)和結束狀態(tài)。進程的初始狀態(tài)都為就緒狀態(tài)。3、每次運行所設計的處理器調度程序調度進程之前,為每個進程任意確定它的要求運行時間。4、此程序是模擬處理器調度,因此,被選中的進程并不實際啟動運行,而是執(zhí)行已運行時間+1來模擬進程的一次運行,表示進程已經運行過一個單位時間。.5、在所設計的程序中應有顯示或打印語句,能顯示或打印每次被選中的進程名以及運行一次后進程隊列的變化。6、為進程任意確定要求運

3、行時間,運行所設計的處理器調度程序,顯示或打印逐次被選中進程的進程名以及進程控制塊的動態(tài)變化過程。7、設有一個就緒隊列,就緒進程按優(yōu)先數(優(yōu)先數范圍0100)由小到大排列(優(yōu)先數越小,級別越高)。當某一進程運行完一個時間片后,其優(yōu)先級應下調(如優(yōu)先數加2或3)。8、例如一組進程如下表:進程名ABCDEFGHJKLM到達時間012368121212182525服務時間641051251043158三、實驗報告1、程序中使用的數據結構及符號說明。2、給出主要算法的流程圖3、給出程序清單并附上注釋4、打印程序運行時的初值和運行結果。(運行一個進程輸出一次結果)程序源代碼:#include"

4、stdio.h"#include"string.h"#define num 12/假定系統(tǒng)中進程個數為12struct PCB char ID;/進程名int runtime;/要求運行時int pri;/優(yōu)先數char state; /狀態(tài),R-就緒,F-結束; struct PCB pcblistnum;/定義進程控制塊數組 void init()/PCB初始化子程序 int i; for(i=0;i<num;i+) printf("PCB%d:ID pri runtime n",i+1);/為每個進程任意指定pri和runtime

5、scanf("%s%d%d",&pcblisti.ID,&pcblisti.pri,&pcblisti.runtime); pcblisti.state='R'/進程初始狀態(tài)均為就緒getchar();/接收回車符 int max_pri_process()/確定最大優(yōu)先級進程子程序 int max=-100;/max為最大優(yōu)先數,初始化為-100 int i; int key; for(i=0;i<num;i+) if(pcblisti.state='r')/r為輔助狀態(tài)標志,表示正在運行return -1;/

6、返回-1 elseif(max<pcblisti.pri&&pcblisti.state='R')/從就緒進程中選取優(yōu)先數最大的進程 max=pcblisti.pri;/max存放每次循環(huán)中的最大優(yōu)先數key=i;/將進程號賦給key if(pcblistkey.state='F')/具有最大優(yōu)先數的進程若已運行完畢return -1;/則返回-1 else/否則return key;/將key作為返回值返回 void show()/顯示子程序int i; printf("n ID pri runtime staten"

7、); printf("-n"); for(i=0;i<num;i+)/依次顯示每個進程的名、優(yōu)先數、要求運行時間和狀態(tài) printf("%s%6d%8d %sn",&pcblisti.ID,pcblisti.pri,pcblisti.runtime,&pcblisti.state); printf(" press any key to continue.n"); void run()/進運行子程序int i,j; int t=0;/t為運行次數for(j=0;j<num;j+) t+=pcblistj.ru

8、ntime;/運行次數即為各個進程運行時間之和printf("nbefore run,the conditon is:n"); show(); /調用show()子程序顯示運行前PCB的情況getchar();/等待輸入回車符for(j=0;j<t;j+) while(max_pri_process()!=-1)/具有最大優(yōu)先數的進程沒有運行完,讓其運 pcblistmax_pri_process().state='r'/將其狀態(tài)置為r,表示其正在運行 for(i=0;i<num;i+) if(pcblisti.state='r') pcblisti.pri-=1;/將當前運行進程的優(yōu)先數減pcblisti.runtime-;/要求運行時間減 if(pcblisti.runtime=0) pcblisti.state='F'/運行完則將該進程狀態(tài)置為結束elsepcblisti.stat

溫馨提示

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

評論

0/150

提交評論