《網(wǎng)絡(luò)操作系統(tǒng)》課程設(shè)計(jì)進(jìn)程調(diào)度算法的設(shè)計(jì)_第1頁
《網(wǎng)絡(luò)操作系統(tǒng)》課程設(shè)計(jì)進(jìn)程調(diào)度算法的設(shè)計(jì)_第2頁
《網(wǎng)絡(luò)操作系統(tǒng)》課程設(shè)計(jì)進(jìn)程調(diào)度算法的設(shè)計(jì)_第3頁
《網(wǎng)絡(luò)操作系統(tǒng)》課程設(shè)計(jì)進(jìn)程調(diào)度算法的設(shè)計(jì)_第4頁
《網(wǎng)絡(luò)操作系統(tǒng)》課程設(shè)計(jì)進(jìn)程調(diào)度算法的設(shè)計(jì)_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、各專業(yè)全套優(yōu)秀畢業(yè)設(shè)計(jì)圖紙網(wǎng)絡(luò)操作系統(tǒng)課程設(shè)計(jì)報(bào)告題 目 進(jìn)程調(diào)度算法設(shè)計(jì) 姓 名 _ 學(xué) 號(hào) _12103463_ 同 組 者 _ 專 業(yè) 12103352 指導(dǎo)教師 成 績 網(wǎng)絡(luò)工程系2014年 12 月26日操作系統(tǒng)課程設(shè)計(jì)任務(wù)書學(xué)生姓 名學(xué) 號(hào)1210346312103352專業(yè)班級(jí)網(wǎng)絡(luò)工程1班設(shè)計(jì)題目 進(jìn)程調(diào)度算法的設(shè)計(jì) 內(nèi)容概要:設(shè)計(jì)進(jìn)程控制塊pcb表結(jié)構(gòu),適用于多級(jí)隊(duì)列反饋調(diào)度算法。建立進(jìn)程就緒隊(duì)列,編制入鏈子程序。編制多級(jí)隊(duì)列反饋調(diào)度算法文獻(xiàn)資料:計(jì)算機(jī)操作系統(tǒng)網(wǎng)絡(luò)操作系統(tǒng)c語言設(shè)計(jì)要求: 本程序用多級(jí)隊(duì)列反饋調(diào)度算法對(duì)五個(gè)進(jìn)程進(jìn)行調(diào)度,每個(gè)進(jìn)程可有三個(gè)狀態(tài),并假設(shè)初始狀態(tài)為就

2、緒狀態(tài)。為了便于處理,程序中的某進(jìn)程運(yùn)行時(shí)間以時(shí)間片為單位計(jì)算。各進(jìn)程的優(yōu)先數(shù)或輪轉(zhuǎn)時(shí)間數(shù)以及進(jìn)程需運(yùn)行的時(shí)間片數(shù)的初始值均由用戶給定。在優(yōu)先數(shù)算法中,優(yōu)先數(shù)的值為50與運(yùn)行時(shí)間的差值,即p_time-process-needtime。進(jìn)程每執(zhí)行一次,優(yōu)先數(shù)減3,cpu時(shí)間片數(shù)加1,進(jìn)程還需要的時(shí)間片數(shù)減1。在輪轉(zhuǎn)算法中,采用固定時(shí)間片(即:每執(zhí)行一次進(jìn)程,該進(jìn)程的執(zhí)行時(shí)間片數(shù)為已執(zhí)行了2個(gè)單位),這時(shí),cpu時(shí)間片數(shù)加2,進(jìn)程還需要的時(shí)間片數(shù)減2,并排列到就緒隊(duì)列的尾上。對(duì)于遇到優(yōu)先數(shù)一致的情況,采用fifo策略解決。 目 錄一. 設(shè)計(jì)目的二. 設(shè)計(jì)內(nèi)容1. 設(shè)計(jì)要求2. 設(shè)計(jì)技術(shù)參數(shù)三設(shè)計(jì)

3、過程1. 實(shí)現(xiàn)功能2. 設(shè)計(jì)思路3. 算法和流程圖四源程序五. 操作界面截圖六. 設(shè)計(jì)總結(jié)七.個(gè)人遇到的困難與獲得的主要成果(分人寫) 正文一、 設(shè)計(jì)目的:通過課程設(shè)計(jì), 加深對(duì)操作系統(tǒng)各資源管理模塊的理解,掌握操作系統(tǒng)的基本原理及功能, 具有初步分析實(shí)際操作系統(tǒng)、設(shè)計(jì)、構(gòu)造和開發(fā)現(xiàn)代操作系統(tǒng)的基本能力。二、 設(shè)計(jì)內(nèi)容: 進(jìn)程調(diào)度算法的設(shè)計(jì)1. 設(shè)計(jì)要求:設(shè)計(jì)進(jìn)程控制塊pcb表結(jié)構(gòu),適用于多級(jí)隊(duì)列反饋調(diào)度算法。建立進(jìn)程就緒隊(duì)列,編制入鏈子程序。編制多級(jí)隊(duì)列反饋調(diào)度算法 開發(fā)環(huán)境:vc+6.02. 設(shè)計(jì)技術(shù)參數(shù):本程序用兩種算法對(duì)五個(gè)進(jìn)程進(jìn)行調(diào)度,每個(gè)進(jìn)程可有三個(gè)狀態(tài),并假設(shè)初始狀態(tài)為就緒狀態(tài)。

4、為了便于處理,程序中的某進(jìn)程運(yùn)行時(shí)間以時(shí)間片為單位計(jì)算。各進(jìn)程的優(yōu)先數(shù)或輪轉(zhuǎn)時(shí)間數(shù)以及進(jìn)程需運(yùn)行的時(shí)間片數(shù)的初始值均由用戶給定。在優(yōu)先數(shù)算法中,優(yōu)先數(shù)的值為50與運(yùn)行時(shí)間的差值,即p_time-process-needtime。進(jìn)程每執(zhí)行一次,優(yōu)先數(shù)減3,cpu時(shí)間片數(shù)加1,進(jìn)程還需要的時(shí)間片數(shù)減1。在輪轉(zhuǎn)算法中,采用固定時(shí)間片(即:每執(zhí)行一次進(jìn)程,該進(jìn)程的執(zhí)行時(shí)間片數(shù)為已執(zhí)行了2個(gè)單位),這時(shí),cpu時(shí)間片數(shù)加2,進(jìn)程還需要的時(shí)間片數(shù)減2,并排列到就緒隊(duì)列的尾上。對(duì)于遇到優(yōu)先數(shù)一致的情況,采用fifo策略解決。三、 設(shè)計(jì)過程1. 實(shí)現(xiàn)功能通過操作者輸入選擇0、1、2(輸入非法,則報(bào)錯(cuò)并顯示可

5、重新輸入)來確定要進(jìn)行的操作。選擇0表示退出程序。選擇1,進(jìn)入進(jìn)程就緒隊(duì)列的創(chuàng)建,創(chuàng)建完5個(gè)進(jìn)程后通過優(yōu)先級(jí)調(diào)度算法對(duì)5個(gè)進(jìn)程進(jìn)行調(diào)度并顯示結(jié)果。選擇2,也是進(jìn)入進(jìn)程就緒隊(duì)列的創(chuàng)建,創(chuàng)建完5個(gè)進(jìn)程后通過時(shí)間片輪轉(zhuǎn)調(diào)度算法對(duì)5個(gè)進(jìn)程進(jìn)行調(diào)度并顯示結(jié)果。2. 設(shè)計(jì)思路優(yōu)先級(jí)算法調(diào)度的設(shè)計(jì)分析:給每一個(gè)進(jìn)程確定一個(gè)優(yōu)先數(shù),優(yōu)先數(shù)的值為50與運(yùn)行時(shí)間的差值,即p_time-process-needtime。處理器調(diào)度每次選擇就緒進(jìn)程中優(yōu)先數(shù)最大者,讓它占有處理器運(yùn)行。接下來,進(jìn)程每執(zhí)行一次,優(yōu)先數(shù)減3,cpu時(shí)間片數(shù)加1,進(jìn)程還需要的時(shí)間片數(shù)減1。對(duì)于優(yōu)先數(shù)的插入算法,每一個(gè)進(jìn)來都按序排放,再需要插入

6、時(shí)就只需按序查找,就能找到確定位置,查找時(shí)需要用到兩個(gè)指針,一個(gè)是前去指針,一個(gè)為當(dāng)前指針,方便數(shù)據(jù)的插入。具體算法如下:priority_insert(pcb *q) pcb *p1,*s,*prior; int n; s=q; /*待插入的pcb指針*/ p1=ready; /*就緒隊(duì)列頭指針*/ prior=p1; /*prior做p1的前驅(qū)指針*/ n=1; while(p1!=null)&n) /*根據(jù)優(yōu)先數(shù)確定插入位置*/ if(p1-prio=s-prio) prior=p1; p1=p1-next; else n=0; if(prior!=p1) /*如果條件成立說明插入在pr

7、ior與p1之間*/ prior-next=s; s-next=p1; else s-next=p1; /*否則插入在就緒隊(duì)列的頭*/ ready=s; 輪轉(zhuǎn)法調(diào)度的設(shè)計(jì)分析:在輪轉(zhuǎn)算法中,采用固定時(shí)間片(即:每執(zhí)行一次進(jìn)程,該進(jìn)程的執(zhí)行時(shí)間片數(shù)為已執(zhí)行了2個(gè)單位),這時(shí),cpu時(shí)間片數(shù)加2,進(jìn)程還需要的時(shí)間片數(shù)減2,并排列到就緒隊(duì)列的尾上。新的進(jìn)程到來時(shí)也是直接插到就緒隊(duì)列的隊(duì)尾,具體算法如下:roundrun_insert(pcb *p2) tail-next=p2; /*將新的pcb插入在當(dāng)前就緒隊(duì)列的尾*/ tail=p2; p2-next=null;3. 算法和流程圖在優(yōu)先數(shù)算法中,

8、優(yōu)先數(shù)的值為50與運(yùn)行時(shí)間的差值,即p_time-process-needtime。進(jìn)程每執(zhí)行一次,優(yōu)先數(shù)減3,cpu時(shí)間片數(shù)加1,進(jìn)程還需要的時(shí)間片數(shù)減1。在輪轉(zhuǎn)算法中,采用固定時(shí)間片(即:每執(zhí)行一次進(jìn)程,該進(jìn)程的執(zhí)行時(shí)間片數(shù)為已執(zhí)行了2個(gè)單位),這時(shí),cpu時(shí)間片數(shù)加2,進(jìn)程還需要的時(shí)間片數(shù)減2,并排列到就緒隊(duì)列的尾上。對(duì)于遇到優(yōu)先數(shù)一致的情況,采用fifo策略解決的工作狀態(tài)初始化pcb,創(chuàng)建進(jìn)程先對(duì)其按優(yōu)先級(jí)數(shù)排列就緒隊(duì)列空?yn就緒隊(duì)列首過程投入入進(jìn)行運(yùn)行進(jìn)程所需時(shí)間減1,占用cpu加1,優(yōu)先級(jí)減3進(jìn)程完成?y撤銷進(jìn)程采用優(yōu)先級(jí)調(diào)度算法n選擇0、1、212運(yùn)行進(jìn)程已占用cpu時(shí)間達(dá)到時(shí)

9、間片?開始結(jié)束y初始化pcb,創(chuàng)建進(jìn)程就緒隊(duì)列空?n就緒隊(duì)列首過程投入進(jìn)行時(shí)間片到,進(jìn)程已占用cpu時(shí)間+2撤銷進(jìn)程進(jìn)程所需時(shí)間數(shù)減2,把該進(jìn)程插入到就緒隊(duì)列yn采用時(shí)間片輪轉(zhuǎn)調(diào)度算法0四、 源程序#include#includeusing namespace std;class process /創(chuàng)建一個(gè)進(jìn)程 public:string processname; / 進(jìn)程名字 int time; / 進(jìn)程運(yùn)行需要的時(shí)間 int leval; / 進(jìn)程的優(yōu)先級(jí) int lefttime; / 進(jìn)程運(yùn)行一段時(shí)間后還需要的時(shí)間;/void copy ( process proc1, process

10、 proc2); / 把proc2賦值給proc1void sort( process pr, int size) ; / 此排序后暗優(yōu)先級(jí)從大到小排序void timeturn( process process, int num, int timepice); / 時(shí)間片輪轉(zhuǎn)算法void priority( process process, int num, int timepice); / 優(yōu)先級(jí)算法/int main() int a; coutendl; cout 選擇調(diào)度算法:endl; cout 1: 時(shí)間片輪換 2: 優(yōu)先級(jí)調(diào)度 a; const int size =30; pro

11、cess processsize ; int num; int timepice; cout 輸入進(jìn)程個(gè)數(shù):num; cout 輸入此進(jìn)程時(shí)間片大小: timepice; for( int i=0; i num; i+) string name; int cputime; int leval; cout 輸入第 i+1 個(gè)進(jìn)程的名字、cpu時(shí)間和優(yōu)先級(jí):name; cin cputimeleval; processi.processname =name; processi.time =cputime; processi.leval =leval; coutendl; for ( int k=0

12、;knum;k+) processk.lefttime=processk.time ;/對(duì)進(jìn)程剩余時(shí)間初始化 cout (說明:在本程序所列進(jìn)程信息中,優(yōu)先級(jí)一項(xiàng)是指進(jìn)程運(yùn)行后的優(yōu)先級(jí)! ); coutendl; coutendl; cout進(jìn)程名字 共需占用cpu時(shí)間 還需要占用時(shí)間 優(yōu)先級(jí) 狀態(tài) endl; if(a=1) timeturn( process,num,timepice);else if(a=2) sort( process, num); priority( process , num, timepice);/ void copy ( process proc1, proce

13、ss proc2) proc1.leval =proc2.leval ; proc1.processname =proc2.processname ; proc1.time =proc2.time ;/void sort( process pr, int size) /以進(jìn)程優(yōu)先級(jí)高低排序 / 直接插入排序 for( int i=1;i0 & temp.levalsize/2;d-) process temp; temp=pr d; pr d = pr size-d-1; pr size-d-1=temp; / 此排序后按優(yōu)先級(jí)從大到小排列/ 時(shí)間片輪轉(zhuǎn)調(diào)度算法實(shí)現(xiàn)/void timeturn

14、( process process, int num, int timepice) while(true) if(num=0) cout 所有進(jìn)程都已經(jīng)執(zhí)行完畢!endl; exit(1); if(process0.lefttime=0) cout 進(jìn)程 process0.processname 已經(jīng)執(zhí)行完畢 !endl; for (int i=0;inum;i+) processi=processi+1; num-; if( processnum-1.lefttime =0 ) cout 進(jìn)程 processnum-1.processname 已經(jīng)執(zhí)行完畢! 0) cout1) proces

15、s0.lefttime=process0.lefttime- timepice; elseprocess0.lefttime=process0.lefttime-1; process0.leval =process0.leval-1; cout process0.processname process0.time ; coutprocess0.lefttime process0.leval 運(yùn)行; coutendl; for(int s=1;snum;s+) cout processs.processname processs.time ; coutprocesss.lefttime proc

16、esss.leval; if(s=1) cout 就緒 endl; else cout 等待 endl; process temp; temp = process0; for( int j=0;jnum;j+) processj = processj+1; processnum-1 = temp; / else coutendl; system( pause); coutendl; / while/ 優(yōu)先級(jí)調(diào)度算法的實(shí)現(xiàn)/void priority( process process, int num, int timepice) while( true) if(num=0) cout 所有進(jìn)程

17、都已經(jīng)執(zhí)行完畢!endl; exit(1); if(process0.lefttime=0) cout 進(jìn)程 process0.processname 已經(jīng)執(zhí)行完畢! endl; for( int m=0;mnum;m+) processm = processm+1; /一個(gè)進(jìn)程執(zhí)行完畢后從數(shù)組中刪除 num-; / 此時(shí)進(jìn)程數(shù)目減少一個(gè) if( num!=1 & processnum-1.lefttime =0 ) cout 進(jìn)程 processnum-1.processname 已經(jīng)執(zhí)行完畢! 0) cout1) process0.lefttime=process0.lefttime- t

18、imepice; else process0.lefttime=process0.lefttime-1; process0.leval =process0.leval-1; cout process0.processname process0.time ; coutprocess0.lefttime process0.leval 運(yùn)行; coutendl; / 輸出其他進(jìn)程 for(int s=1;snum;s+) cout processs.processname processs.time ; coutprocesss.lefttime processs.leval ; if(s=1) cout 就緒endl; else cout 等待endl; / else sort(process, num); coutendl; system( pause); coutendl; 五、 操作界面部分截圖六、 設(shè)計(jì)總結(jié):通過這次的課程設(shè)計(jì),加深了我對(duì)操作系統(tǒng)中不少概念的理解(因?yàn)槌跗谶€沒想好要做哪一個(gè)題目,所以在選擇做這一題之前,也把其他題中的知識(shí)也順便了解了一下),最后選擇了做調(diào)度算法這個(gè)題目,更使我對(duì)調(diào)度算法有了一個(gè)更加全面的認(rèn)識(shí),因?yàn)槠綍r(shí)就只是

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論