版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、-. z題目4 基于優(yōu)先數(shù)的時間片輪轉調(diào)度算法調(diào)度處理器一、實驗目的在采用多道程序設計的系統(tǒng)中,同時處于就緒態(tài)的進程往往有多個,當就緒態(tài)的進程數(shù)大于處理器的個數(shù)時,就需按照*種策略進展分配處理器。本次設計模擬在單處理器情況下采用基于優(yōu)先數(shù)的時間片輪轉調(diào)度算法進展處理器調(diào)度,加深了解處理器調(diào)度工作過程。二、實驗容及要求1、設計一個程序實現(xiàn)基于優(yōu)先數(shù)的時間片輪轉調(diào)度算法調(diào)度處理器。2、假定系統(tǒng)有5個進程,每個進程用一個進程控制塊PCB開代表,進程控制塊的構造如下列圖1.2所示:進程名指針到達時間要求運行時間已運行時間優(yōu)先數(shù)進程狀態(tài)圖1其中:進程名:作為進程的標識。指針:進程按順序排成循環(huán)鏈表,用指
2、針指出下一個進程的進程控制塊首地址,最后一個進程中的指針指出第一個進程的進程控制塊首地址。要求運行時間:假設進程需要運行的單位時間數(shù)。已運行時間:假設進程已經(jīng)運行的單位時間數(shù),初值為0。狀態(tài):可假設有兩種狀態(tài),就緒狀態(tài)和完畢狀態(tài)。進程的初始狀態(tài)都為就緒狀態(tài)。3、每次運行所設計的處理器調(diào)度程序調(diào)度進程之前,為每個進程任意確定它的要求運行時間。4、此程序是模擬處理器調(diào)度,因此,被選中的進程并不實際啟動運行,而是執(zhí)行已運行時間+1來模擬進程的一次運行,表示進程已經(jīng)運行過一個單位時間。.5、在所設計的程序中應有顯示或打印語句,能顯示或打印每次被選中的進程名以及運行一次后進程隊列的變化。6、為進程任意確
3、定要求運行時間,運行所設計的處理器調(diào)度程序,顯示或打印逐次被選中進程的進程名以及進程控制塊的動態(tài)變化過程。7、設有一個就緒隊列,就緒進程按優(yōu)先數(shù)優(yōu)先數(shù)圍0100由小到大排列優(yōu)先數(shù)越小,級別越高。當*一進程運行完一個時間片后,其優(yōu)先級應下調(diào)如優(yōu)先數(shù)加2或3。8、例如一組進程如下表:進程名ABCDEFGHJKLM到達時間012368121212182525效勞時間641051251043158三、實驗報告1、程序中使用的數(shù)據(jù)構造及符號說明。2、給出主要算法的流程圖3、給出程序清單并附上注釋4、打印程序運行時的初值和運行結果。運行一個進程輸出一次結果三、實驗代碼#include#include#in
4、clude#define getpch(type) (type*)malloc(sizeof(type) /為進程創(chuàng)立一個空間struct worktimefloat Tb; /作業(yè)運行時刻float Tc; /作業(yè)完成時刻float Ti; /周轉時間float Wi; /帶權周轉時間;struct jcb char name10; /作業(yè)名float subtime; /作業(yè)到達時間float runtime; /作業(yè)所需的運行時間char resource; /所需資源float Rp; /后備作業(yè)響應比char state; /作業(yè)狀態(tài)int worked_time; /已運行時間st
5、ruct worktime wt;int need_time; /要求運行時間int flag; /進程完畢標志struct jcb* link; /鏈指針*ready=NULL,*p;typedefstruct jcb JCB;float T=0;int N;JCB *front,*rear; /時間輪轉法變量void sort() JCB *first, *second;int insert=0; /插入數(shù)if(ready=NULL)|(p-subtime)subtime) p-link=ready; ready=p; T=p-subtime; p-Rp=1; else first=rea
6、dy; second=first-link;while(second!=NULL) if(p-subtime)subtime) p-link=second; first-link=p; second=NULL; insert=1; else first=first-link; second=second-link; if (insert=0) first-link=p; void SJFget() JCB *front,*mintime,*rear;int ipmove=0; mintime=ready; rear=mintime-link;while(rear!=NULL) if (rear
7、!=NULL)&(T=rear-subtime)&(mintime-runtime)(rear-runtime) front=mintime; mintime=rear; rear=rear-link; ipmove=1; else rear=rear-link; if (ipmove=1) front-link=mintime-link; mintime-link=ready; ready=mintime;void HRNget() JCB *front,*mintime,*rear;int ipmove=0; mintime=ready; rear=mintime-link;while(r
8、ear!=NULL)if (rear!=NULL)&(T=rear-subtime)&(mintime-Rp)Rp) front=mintime; mintime=rear; rear=rear-link; ipmove=1; else rear=rear-link;if (ipmove=1) front-link=mintime-link; mintime-link=ready; ready=mintime;void creatJCB() /為每個作業(yè)創(chuàng)立一個JCB并初始化形成一個循環(huán)鏈隊列 JCB *p,*l;int i=0; l = (JCB *)malloc(sizeof(JCB);
9、printf(n 請輸入作業(yè)的個數(shù):); scanf(%d,&N); printf(n 作業(yè)號No.%d:n,i); printf(n請輸入作業(yè)的名字:); scanf(%s,l-name); printf(n請輸入作業(yè)的時間:); scanf(%d,&l-need_time); l-state = r; /作業(yè)初始狀態(tài)為就緒 l-worked_time = 0; l-link=NULL; l-flag=0; front=l;for(i =1;iname); printf(n請輸入作業(yè)的時間:); scanf(%d,&p-need_time); p-state=r; p-worked_time
10、=0; p-flag=0; l-link=p; l=l-link; rear=l;rear-link=front; void output()/進程輸出函數(shù)int j; printf(name runtime needtime staten);for(j=1;jname,front-worked_time,front-need_time,front-state); front=front-link; printf(n);int judge(JCB *p) /判斷所有進程運行完畢int flag=1,i;for(i=0;istate!=e) flag = 0;break; p=p-link; r
11、eturn flag;void RRget()/時間片輪轉算法 JCB *s;int flag1=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
12、&s-flag=0) printf(進程%s已經(jīng)運行完成!nn,s-name); s-flag=1; s=s-link; flag1=judge(s); printf(-n);void input()int i,num; printf(n 請輸入作業(yè)的個數(shù):); scanf(%d,&num);for(i=0;iname); printf(n 輸入作業(yè)到達時刻:); scanf(%f,&p-subtime); printf(n 輸入作業(yè)運行時間:); scanf(%f,&p-runtime); printf(n); p-state=w; p-link=NULL; sort(); int spac
13、e()int l=0; JCB* jr=ready;while(jr!=NULL) l+; jr=jr-link; return(l);void disp(JCB* jr,int select)if (select=3) printf(n 作業(yè)到達時間效勞時間響應比運行時刻完成時刻周轉時間帶權周轉時間n);else printf(n 作業(yè)到達時間效勞時間運行時刻完成時刻周轉時間帶權周轉時間n); printf( |%st,jr-name); printf( |%.2ft ,jr-subtime); printf( |%.2ft,jr-runtime);if (select=3&p=jr) pr
14、intf(|%.2f ,jr-Rp);if (p=jr) printf(|%.2ft ,jr-wt.Tb); printf( |%.2f ,jr-wt.Tc); printf( |%.2ft,jr-wt.Ti); printf( |%.2f,jr-wt.Wi); printf(n);int destroy() printf(n 作業(yè)%s 已完成.n,p-name); free(p);return(1);void check(int select) JCB* jr; printf(n * 當前正在運行的作業(yè)是:%s,p-name); disp(p,select); jr=ready; print
15、f(n *當前就緒隊列狀態(tài)為:n);while(jr!=NULL) jr-Rp=(jr-runtime+T-jr-subtime)/jr-runtime; disp(jr,select); jr=jr-link; destroy();void running(JCB* jr)if (T=jr-subtime) jr-wt.Tb=T;else jr-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;int ma
16、in()int select=0,len,h=0;float sumTi=0,sumWi=0; printf(t-*-n); printf(請選擇作業(yè)調(diào)度算法的方式:n); printf(t1.FCFS 2.SJF 3.HRN 4.RRnn); printf(t-*-n); printf(請輸入作業(yè)調(diào)度算法序號(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+=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 長沙商貿(mào)旅游職業(yè)技術學院《機械制圖與實驗》2023-2024學年第一學期期末試卷
- 配電網(wǎng)數(shù)據(jù)采集與分析
- 述職報告:技術領先之道模板
- 職業(yè)導論-2020年房地產(chǎn)經(jīng)紀人《職業(yè)導論》真題匯編
- 名畫欣賞與創(chuàng)作模板
- 公司年年會主持稿
- 二零二五年電子商務平臺入駐合作協(xié)議范本3篇
- 二零二五版北京車牌租賃市場推廣合作合同規(guī)范范本9篇
- 二零二五版基站建設場地使用權及通信網(wǎng)絡優(yōu)化合同2篇
- 吉林油田十二中2024-2025學年七年級上學期期末語文試卷(含答案)
- 分期還款協(xié)議書
- 小區(qū)住戶手冊范本
- ??低?視頻監(jiān)控原理培訓教材課件
- 《鄭伯克段于鄢》-完整版課件
- 土壤肥料全套課件
- 畢業(yè)生延期畢業(yè)申請表
- 學校6S管理制度
- 肽的健康作用及應用課件
- T.C--M-ONE效果器使用手冊
- 8小時等效A聲級計算工具
- 人教版七年級下冊數(shù)學計算題300道
評論
0/150
提交評論