




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、淮海工學(xué)院計算機(jī)工程學(xué)院實驗報告書課程名: 操作系統(tǒng)原理 題 目: 進(jìn)程調(diào)度 班 級: 學(xué) 號: 姓 名: 評語:成績: 指導(dǎo)教師: 批閱時間: 年 月 日一、實驗?zāi)康倪M(jìn)程是操作系統(tǒng)最重要的概念之一,進(jìn)程調(diào)度是操作系統(tǒng)內(nèi)核的重要功能,本實驗要求用C語言編寫一個進(jìn)程調(diào)度模擬程序,使用優(yōu)先級或時間片輪轉(zhuǎn)法實現(xiàn)進(jìn)程調(diào)度。本實驗可加深對進(jìn)程調(diào)度算法的理解。實驗環(huán)境Turbo C 2.0/3.0或VC+6.0實驗學(xué)時4學(xué)時,必做實驗。二、實驗內(nèi)容1、設(shè)計有5個進(jìn)程并發(fā)執(zhí)行的模擬調(diào)度程序,每個程序由一個PCB表示。2、模擬調(diào)度程序可任選兩種調(diào)度算法之一實現(xiàn)。3、程序執(zhí)行中應(yīng)能在屏幕上顯示出各進(jìn)程的狀態(tài)變化
2、,以便于觀察調(diào)度的整個過程。3、 實驗說明1、優(yōu)先級算法說明(1)PCB的結(jié)構(gòu):IdSpanUsedNeedSatusNext優(yōu)先級算法中,設(shè)PCB的結(jié)構(gòu)如右圖所示,其中各數(shù)據(jù)項的含義如下:Id:進(jìn)程標(biāo)識符號,取值15。Prior:優(yōu)先級,隨機(jī)產(chǎn)生,范圍15。Used:目前已占用的CPU時間數(shù),初值為0;當(dāng)該進(jìn)程被調(diào)用執(zhí)行時,每執(zhí)行一個時間片,Used加1。Need:進(jìn)程尚需的CPU時間數(shù),初值表示該進(jìn)程需要運(yùn)行的總時間,取值范圍為510。并隨機(jī)產(chǎn)生,每運(yùn)行一個時間片need減1;need為0則進(jìn)程結(jié)束。Status:進(jìn)程狀態(tài)R(運(yùn)行),J(就緒),F(xiàn)(完成);初始時都處于就緒狀態(tài)。Next:
3、指向就緒隊列中下一個進(jìn)程的PCB的指針。(2)初始狀態(tài)及就緒隊列組織:5個進(jìn)程初始都處于就緒狀態(tài),進(jìn)程標(biāo)識15,used初值都為0。各進(jìn)程的優(yōu)先級隨機(jī)產(chǎn)生,范圍15。處于就緒狀態(tài)的進(jìn)程,用隊列加以組織,隊列按優(yōu)先級由高到低依次排列,隊首指針設(shè)為head,隊尾指針設(shè)為tail。(3)調(diào)度原則以及運(yùn)行時間的處理:正在執(zhí)行的進(jìn)程每執(zhí)行一個時間片,其優(yōu)先級減1(允許優(yōu)先級為負(fù))。進(jìn)程調(diào)度將在以下情況發(fā)生:當(dāng)正在運(yùn)行的程序其優(yōu)先級小于就緒隊列隊首進(jìn)程的優(yōu)先級時。程序中進(jìn)程的運(yùn)行時間以邏輯時間片為單位。2、時間片輪轉(zhuǎn)算法說明(1)PCB的結(jié)構(gòu)(如下圖所示):輪轉(zhuǎn)法中,設(shè)PCB的結(jié)構(gòu)如右圖所示,其中各數(shù)據(jù)項
4、的含義如下:IdSpanUsedNeedSatusNextId:進(jìn)程標(biāo)識符號,取值15。Span:在某一輪中,分配給先運(yùn)行進(jìn)程的時間片數(shù),取值13。Used:現(xiàn)運(yùn)行進(jìn)程在本輪執(zhí)行過程已用的時間片數(shù)。Need:進(jìn)程尚需的CPU時間數(shù),初值表示該進(jìn)程需要運(yùn)行的總時間,取值范圍510。并隨機(jī)產(chǎn)生,每運(yùn)行一個時間片need減1;need為0則進(jìn)程結(jié)束。Status:進(jìn)程狀態(tài)R(運(yùn)行),J(就緒),F(xiàn)(完成);初始時所有進(jìn)程處于就緒狀態(tài)。Next:指向就緒隊列中下一個進(jìn)程的PCB的指針。(2)初始狀態(tài)及就緒隊列組織:Span、Used在每輪開始時賦初值,Used初值值為0,Span初值要求隨機(jī)產(chǎn)生。(3
5、)調(diào)度原則:當(dāng)一個進(jìn)程被調(diào)度程序執(zhí)行時,每經(jīng)過一個時間片,Need減1,Used加1,如果Need為0,表示該進(jìn)程結(jié)束,如果Need不為0,并且Used小于本輪Span值,則該進(jìn)程可繼續(xù)運(yùn)行,若Need不為0,且Used等于Span值,則該進(jìn)程本輪運(yùn)行時間已到,應(yīng)調(diào)度下一個隊首進(jìn)程運(yùn)行。4、 實驗步驟1、 理解本實驗中關(guān)于兩種調(diào)度算法的說明。2、 根據(jù)調(diào)度算法的說明,畫出相應(yīng)的程序流程圖。3、 按照程序流程圖,用C語言編程并實現(xiàn)。五、分析與思考1、 邏輯時間片該如何實現(xiàn)?系統(tǒng)將所有的就緒進(jìn)程按先來先服務(wù)算法的原則,排成一個隊列,每次調(diào)度時,系統(tǒng)把處理機(jī)分配給隊列首進(jìn)程,并讓其執(zhí)行一個時間片。當(dāng)
6、執(zhí)行的時間片用完時,由一個計時器發(fā)出時鐘中斷請求,調(diào)度程序根據(jù)這個請求停止該進(jìn)程的運(yùn)行,將它送到就緒隊列的末尾,再把處理機(jī)分給就緒隊列中新的隊首進(jìn)程,同時讓它也執(zhí)行一個時間片。2、 如果不使用指針操作,是否也可以使用數(shù)組實現(xiàn)進(jìn)程就緒隊列的組織?可以。六、測試數(shù)據(jù)與實驗結(jié)果采用先來先服務(wù)調(diào)度算法的進(jìn)程調(diào)度流程圖如圖(1)圖(1)采用先來先服務(wù)調(diào)度算法的進(jìn)程調(diào)度流程圖采用高優(yōu)先權(quán)優(yōu)先調(diào)度算法的進(jìn)程調(diào)度流程圖如圖(2)圖(2)采用高優(yōu)先權(quán)優(yōu)先調(diào)度算法的進(jìn)程調(diào)度流程圖先來先服務(wù)測試數(shù)據(jù)與結(jié)果1.初始化隊列如圖(3)圖(3)初始化隊列2.輸入所有進(jìn)程后的進(jìn)程信息如下如圖(4)圖(4)進(jìn)程信息3. 按除i
7、鍵以外的任意鍵繼續(xù)運(yùn)行進(jìn)程如圖(5)圖(5)繼續(xù)運(yùn)行4.繼續(xù)運(yùn)行進(jìn)程如圖(6)圖(6)繼續(xù)運(yùn)行5. 運(yùn)行若干次后的狀態(tài)如圖(7)圖(7)運(yùn)行若干次后的狀態(tài)6. 添加新的進(jìn)程如圖(8)圖(8)添加新進(jìn)程高優(yōu)先權(quán)優(yōu)先測試數(shù)據(jù)與結(jié)果1、 就緒隊列如圖(9)圖(9)2、 運(yùn)行過程如圖(10)圖(10)圖(11)3、 最終結(jié)果如圖(11)圖(12)七、實驗心得與體會通過這次實驗,知道了,.界面設(shè)計應(yīng)該在編寫之前確定,因為本程序是用來模擬一個調(diào)度算法,需要不斷地刷新顯示結(jié)果,其清晰性很重要,界面不能很潦草,固然需要一開始就設(shè)計好。而不是作為一個中間環(huán)節(jié)在程序中不斷調(diào)試。關(guān)鍵算法的編寫。通常在編寫時都是在I
8、DE下直接寫代碼,如果有問題就進(jìn)行調(diào)試,直到正確通過。但是有的關(guān)鍵算法稍微有點復(fù)雜,在運(yùn)行出錯時候多次調(diào)試后仍然不能正確,此時靜下心來,在紙上畫一下算法流程,以及數(shù)據(jù)結(jié)構(gòu)圖示,并將代碼寫到紙上修改,實踐證明,如此方法效率更高。用C語言編寫了一個進(jìn)程調(diào)度模擬程序,使用優(yōu)先級算法實現(xiàn)了進(jìn)程調(diào)度。通過這次實驗加深了對進(jìn)程調(diào)度算法的理解。附錄1. 先來先服務(wù)#include#include#include#define getpch(type) (type*)malloc(sizeof(type)#define NULL 0#define TIME 2/時間片長度typedef struct pcb/
9、進(jìn)程管理塊char name10;/進(jìn)程名字char state;/進(jìn)程狀態(tài)int queue;/進(jìn)程所在的隊列int ntime;/進(jìn)程需要運(yùn)行的時間int rtime;/進(jìn)程已經(jīng)運(yùn)行的時間int etime;/進(jìn)程在本隊列可運(yùn)行的時間片struct pcb *link;PCB;PCB*ready = NULL, *pinsert = NULL, *pfend = NULL,*p =NULL;/就緒隊列,進(jìn)程插入位置的變量int geti()/使用戶僅能輸入整數(shù)char ch;int i = 0;fflush(stdin);ch = getchar();while(ch = n)printf
10、(tf輸入不能為空.請重新輸入n);fflush(stdin);ch = getchar();while(ch != n)if(ch 9 | ch link | (ps- link-queue - ps-queue) 1) pinsert = ps;elsewhile (ps-link & ps -link-queue != (pfend -queue +2)ps = ps-link;pinsert = ps;void insert()/插入進(jìn)程if(!ready )ready = p;pfend = p;pinsert = p;else if(ready -queue = 1)/第一隊列存在
11、p-link = pfend-link;pfend-link = p;pfend = p;findpos();elsep-link = ready;ready = p;findpos();void input()/*建立進(jìn)程控制塊函數(shù)*/int i,num;printf(n請輸入進(jìn)程的個數(shù)?);num = geti();for(i=0; i name);printf(n輸入進(jìn)程運(yùn)行時間:);p -ntime = geti();printf(n);p-rtime=0;p-state=w;p-queue =1;p-etime = TIME;p-link=NULL;insert();/*調(diào)用inse
12、rt函數(shù)*/void disp(PCB *pr)/*建立進(jìn)程現(xiàn)實函數(shù),用于顯示當(dāng)前進(jìn)程*/printf(nnamet statet queuet ntimet rtimet在隊列可停留時間t n);printf(|%st,pr-name);printf( |%ct,pr-state);printf( |%dt,pr-queue);printf( |%dt,pr-ntime);printf( |%dt,pr-rtime);printf( |%dt,pr-etime);printf(n);void check()/*建立進(jìn)程查看函數(shù)*/PCB *pr;printf(n *當(dāng)前正在運(yùn)行的進(jìn)程是:%s
13、,ready-name);/*顯示當(dāng)前運(yùn)行的進(jìn)程*/disp(ready);pr= ready -link;printf(n*當(dāng)前就緒隊列狀態(tài)為:n);/*顯示就緒隊列狀態(tài)*/while(pr!=NULL)disp(pr);pr=pr-link;void sort()/調(diào)整進(jìn)程隊列if(!ready-link |ready-queue link-queue) return;p = ready -link;ready -link = pinsert -link;pinsert -link = ready;pinsert = ready;ready = p;if (ready & ready -
14、queue = pinsert -queue)findpos();void addnew()/添加新的進(jìn)程if(ready -queue != 1)(ready - queue)+;ready-etime *= 2;ready - state=w;sort();/*調(diào)用sort函數(shù)*/input();elseinput(); void destroy()/*建立進(jìn)程撤銷函數(shù)(進(jìn)程運(yùn)行結(jié)束,撤銷進(jìn)程)*/printf(n進(jìn)程%s已完成.n,ready-name);p = ready;ready = ready-link;free(p);if (ready & ready - queue = pi
15、nsert -queue)findpos();void running()/*建立進(jìn)程就緒函數(shù)(進(jìn)程運(yùn)行時間到,置就緒狀態(tài))*/(ready - rtime)+;ready -etime -;if(ready-rtime = ready-ntime)destroy();return;else if(ready -etime = 0)int time = 2;(ready - queue)+;for(int i = 2; i != ready-queue; +i)time *= 2;ready-etime = time;ready - state=w;sort();/*調(diào)用sort函數(shù)*/voi
16、d main()char ch;input();while(ready != NULL)printf(nThe execute name:%sn,ready -name);ready -state = R;check();running();printf(n按i鍵添加新進(jìn)程.按其他任意鍵繼續(xù)運(yùn)行.);fflush(stdin);ch = getchar();if (ch = i| ch=I)addnew();printf(nn 進(jìn)程已經(jīng)完成n);getchar();2.2高優(yōu)先權(quán)優(yōu)先#include stdio.h #include stdlib.h #include #define getp
17、ch(type) (type*)malloc(sizeof(type)struct pcb /* 定義進(jìn)程控制塊PCB */ char name10; char state; int super; int ntime; int rtime; struct pcb* next; *ready=NULL,*p;typedef struct pcb PCB;void sort(PCB *a) /* 建立對進(jìn)程進(jìn)行優(yōu)先級排列函數(shù)*/ PCB *first, *second; int insert=0; if(ready=NULL)|(a-super)(ready-super) /*優(yōu)先級最大者,插入隊
18、首*/ a-next=ready; ready=a; else /* 進(jìn)程比較優(yōu)先級,插入適當(dāng)?shù)奈恢弥?/ first=ready; second=first-next; while(second!=NULL) if(a-super)(second-super) /*若插入進(jìn)程比當(dāng)前進(jìn)程優(yōu)先數(shù)大,插入到當(dāng)前進(jìn)程前面*/ a-next=second; first-next=a; second=NULL; insert=1; else /* 插入進(jìn)程優(yōu)先數(shù)最低,則插入到隊尾*/ first=first-next; second=second-next; if(insert=0) first-nex
19、t=a; void createpcb() /* 建立進(jìn)程控制塊函數(shù)*/ int i,num; printf(*-*n);printf(|*最高優(yōu)先權(quán)優(yōu)先調(diào)度算法模擬*|n);printf(*-*n);printf(n 請輸入進(jìn)程數(shù)目:); scanf(%d,&num); for(i=0;iname,&p-super,&p-ntime); p-rtime=0; p-state=w; p-next=NULL; sort(p); void display1() /*建立進(jìn)程顯示函數(shù),用于顯示當(dāng)前進(jìn)程*/ printf(n進(jìn)程名 狀態(tài) 優(yōu)先數(shù) 要求服務(wù)的時間 已運(yùn)行時間 n); void display2(PCB * pr) printf(%3.5s %7c %6d %12d %10d,pr-name,pr-state,pr-super,pr-ntime,pr-rtime);printf(n); void check() /* 建立進(jìn)程查看函數(shù) */ PCB *pr; printf(n-);printf(n * 當(dāng)前正在運(yùn)行的進(jìn)程是%s,它的狀態(tài)如下:,p-name); /*顯示當(dāng)前運(yùn)行進(jìn)程*/ display1();display2(p); pr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 財務(wù)管理b卷試題及答案
- 2019-2025年消防設(shè)施操作員之消防設(shè)備高級技能考前沖刺模擬試卷A卷含答案
- 2019-2025年消防設(shè)施操作員之消防設(shè)備中級技能考試題庫
- 工程熱力學(xué)應(yīng)用測試及答案
- 農(nóng)業(yè)現(xiàn)代化種植標(biāo)準(zhǔn)化體系建設(shè)方案
- 客戶咨詢與需求記錄表
- 傳統(tǒng)文化在初中英語課中深度融入教案
- 儀器設(shè)備使用說明及維護(hù)保養(yǎng)指導(dǎo)書
- 美容美發(fā)服務(wù)安全責(zé)任協(xié)議書
- 《小學(xué)數(shù)學(xué)幾何圖形識別與性質(zhì)理解教學(xué)方案》
- 干部考察談話記錄范文
- 面館合作伙伴合同協(xié)議書
- GB 30254-2024高壓三相籠型異步電動機(jī)能效限定值及能效等級
- 醫(yī)學(xué)課件胸腔穿刺術(shù)3
- 重大事故隱患判定標(biāo)準(zhǔn)與相關(guān)事故案例培訓(xùn)課件
- 部編版《道德與法治》六年級下冊第6課《探訪古代文明》精美課件(第1課時)
- (正式版)CB∕T 4548-2024 船舶行業(yè)企業(yè)相關(guān)方安全管理要求
- 全過程工程咨詢管理服務(wù)方案
- 20S515 鋼筋混凝土及磚砌排水檢查井
- 防火封堵施工施工工藝
- 古詩惠崇春江晚景課件市公開課一等獎省賽課微課金獎?wù)n件
評論
0/150
提交評論