《操作系統(tǒng)原理》報告_第1頁
《操作系統(tǒng)原理》報告_第2頁
《操作系統(tǒng)原理》報告_第3頁
《操作系統(tǒng)原理》報告_第4頁
《操作系統(tǒng)原理》報告_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、操作系統(tǒng)原理實驗指導(dǎo)書班級:信管*學(xué)號: *姓名:*信息管理與信息系統(tǒng)教研室實驗題目二:模擬進(jìn)程調(diào)度功能4一、題目類型:4二、實驗?zāi)康模?三、實驗環(huán)境:4四、實驗內(nèi)容:4五、實驗要求:4六、各功能簡要說明:5七、程序清單:5八、程序中使用的數(shù)據(jù)結(jié)構(gòu)及符號說明: 11九、調(diào)試程序時出現(xiàn)問題說明及解決的方法:11實驗題目五:模擬使用銀行家算法判斷系統(tǒng)的狀態(tài)11一、題目類型:11二、實驗?zāi)康模?1三、實驗環(huán)境:11四、實驗內(nèi)容:12五、實驗要求:12六、各功能簡要說明:13七、程序清單:1321八、程序中使用的數(shù)據(jù)結(jié)構(gòu)及符號說明: 21九、程序調(diào)試時出現(xiàn)問題及解決的方法:22操作系統(tǒng)是信息管理與信息

2、系統(tǒng)專業(yè)一門重要的專業(yè)理論課程,了解和掌 握操作系統(tǒng)的基本概念、功能和實現(xiàn)原理,對認(rèn)識整個計算機(jī)系統(tǒng)的工作原理十 分重要。操作系統(tǒng)實驗是操作系統(tǒng)課程的一個重要組成部分,通過試驗環(huán)節(jié)的鍛煉 使同學(xué)們不僅能夠?qū)σ郧暗乃鶎W(xué)過的基礎(chǔ)知識加以鞏間,同時能夠通過上機(jī)實 驗,對操作系統(tǒng)的抽彖理論知識加以理解,最終達(dá)到融會貫通的冃的,因此,實 驗環(huán)節(jié)是同學(xué)們理解、掌握操作系統(tǒng)基本理論的一個重要環(huán)節(jié)。本實驗指導(dǎo)書,根據(jù)教材中的重點內(nèi)容設(shè)定了相應(yīng)的實驗題目,由于實驗 課程的學(xué)時有限,我們規(guī)定了必做題目和選做題目,其中必做題目必須在規(guī)定的 上機(jī)學(xué)時中完成,必須有相應(yīng)的預(yù)習(xí)報告和實驗報告。選做題目是針對有能力或 感興

3、趣的同學(xué)利用課余時間或上機(jī)學(xué)時的剩余時間完成。實驗題目二:模擬進(jìn)程調(diào)度功能一、題目類型:必做題目。二、實驗?zāi)康模和ㄟ^本實驗,進(jìn)一步掌握進(jìn)程調(diào)度的功能和實現(xiàn)原理。三、實驗環(huán)境:1、硬件:pc機(jī)及其兼容機(jī)。2、軟件:windows os, turbo c 或 c+、vc+、vs. net、jam 等。實驗內(nèi)容:1、設(shè)計進(jìn)程調(diào)度功能,至少模擬兩種以上調(diào)度算法。如:優(yōu)先級調(diào)度算法、吋間片調(diào)度 算法等。2、進(jìn)程調(diào)度功能作為一個函數(shù)scheduler,加入到實驗題目一中。3、進(jìn)程調(diào)度程序從就緒隊列中挑選進(jìn)程,若隊列為空,應(yīng)顯示“無就緒進(jìn)程無法調(diào)度” 的提示信息。4、若選上一個進(jìn)程,以顯示:進(jìn)程名、狀態(tài)、時

4、間片、優(yōu)先級等信息表示一個進(jìn)程被執(zhí) 行。若運(yùn)行完,應(yīng)刪除相應(yīng)pcb。五、實驗要求:1、在實驗題目一中的主菜單中加入一個菜單項:6 調(diào)度,選擇該菜單項后,系統(tǒng)進(jìn)入 進(jìn)程調(diào)度。2、進(jìn)程調(diào)度的結(jié)構(gòu):進(jìn)程調(diào)度子菜單0返回主菜單1 優(yōu)先級調(diào)度2 時間片調(diào)度請選擇您需要的功能選項:讀入選擇=x六、各功能簡要說明:1、返回主菜單:當(dāng)用戶選擇該項功能時,系統(tǒng)退出進(jìn)程調(diào)度功能,返冋到實驗題目一屮 的主菜單。2、優(yōu)先級調(diào)度:選擇該功能選項時,系統(tǒng)將從就緒隊列屮選擇優(yōu)先級最高的進(jìn)程,使該 進(jìn)程處于執(zhí)行狀態(tài)(將進(jìn)程pcb的內(nèi)容顯示在屏幕上,顯示完成后,該進(jìn)程結(jié)束,即 撤銷該進(jìn)程的pcb)。3、時間片調(diào)度:每選擇一次該

5、功能,將就緒隊列中所有進(jìn)程的內(nèi)容顯示在屏幕上,并將 每個執(zhí)行進(jìn)程的執(zhí)行時間減去一個時間片,若某進(jìn)程的剩余時間小于等于0,則表明 該進(jìn)程運(yùn)行結(jié)束,撤銷該進(jìn)程的pcb。七、程序清單:1:程序代碼#include<stdio. h> #includestring. h>void priority(); void time();struct pcbchar name 4; int priority; int runtime;)j » struct pcb pcb5;進(jìn)程的數(shù)量int q=5;void main()int p, i;strcpy (pcboj. name, &

6、quot;pl") ;/序列隊列,優(yōu)先級由高到低為1, 2, 3. pcb0 priority = 2;pcb0. runtime = 3;strcpy(pcbl. name, p2") ;/序列隊列 pcbl priority = 3;pcbl. runtime = 2;strcpy (pcb2. name, "p3") ;/序列隊列 pcb2.priority 二 1;pcb2. runtime = 4;strcpy (pcb 3. name, "p4");/序列隊列 pcb3. priority = 5;pcb3< run

7、time = 6;strcpy (pcb4. name, "p5) ;/序列隊列 pcb4 priority = 4;pcb4. runtime 二 5;printfc進(jìn)程調(diào)度子菜單no;printf (/z0退出系統(tǒng)n");printffl優(yōu)先級調(diào)度n);printf ("2時間片調(diào)度n);printf("nn顯示所有進(jìn)程n);printff進(jìn)程名稱 優(yōu)先級 運(yùn)行時間n);for(i=0;i<5;i+)printf (z/%s %d %drt, pcbi name, pcbi. priority, pcbi run time);printff請選

8、擇您需要的功能選項n);scanf (d", &p);printf("*、; while (1)iif(p=0) break;swi tch(p)case 0: break;case 1:printf (,?優(yōu)先級調(diào)度算法n"); priority ();break;case 2:printf (/z時間片調(diào)度算法n"); time();break;printfc請選擇您需要的功能選項n); scanf ("%d", &p);void priority0int i, j;int t=0, r=0;char nanie2

9、=" “;/將優(yōu)先級高的排序在前 for(i=0;i<q-l;i+)for(j=i;j<q;j+)if(pcbi priority>pcbj priority)/將 pcbi. name 賦值給 name strcpy(name, pcbi name); strcpy(pcbi> name, pcbj name); strcpy(pcbj name, name);t=pcbi priority; pcbi. priority二pcbj.priority; pcbj priority二t;r=pcbil runtime; pcbi.runtime=pcbj. r

10、untime; pcbjl runtime=r;printfc按優(yōu)先級高低排序n);printff進(jìn)程名稱 優(yōu)先級 運(yùn)行時間n);for(i=0;i<q;i+)printf(s %d %dpcbi. name, pcbi. priori ty, pcbi.runtime);printff顯示優(yōu)先級最高的進(jìn)程rt);printf("%s %d %dpcb0. name, pcb0. priority, pcb0. runtime);for (i=0;i<q;i+)strcpy(pcbij. name, pcbi+l name); pcbij. priority = pcbi

11、+lpriority; pcbil runtime = pcbi+l. runtime; pri ntf (*n,z);printfc使最高優(yōu)先級的進(jìn)程處于執(zhí)行狀態(tài)(撤銷該進(jìn)程)n); for(i=0;i<q-l;i+)/撤銷進(jìn)程printf (/z%s %d %dpcbi n ame, pcbi. priority, pcbi run time);q二qt ;void time()int i, j, t;printf(,z進(jìn)程名稱 優(yōu)先級 運(yùn)行時間n);for(i=0;i<q;i+)printf (s %d %dpcbi. name, pcbi. priority, pcbi.

12、runtime);for (i=0;i<q;i+)pcbil runtime = pcbi+l. runtime-1;printff將每個執(zhí)行進(jìn)行的執(zhí)行時間減去一個時間片);for(i=0;iq;i+)if(pcbiruntime=0)t=i;for(j=t;j<q;j+)strcpy (pcbj. name, pcbj+1. name); pcbjpriority = pcbj+l. priority; pcbje runtime = pcbj+1. runtime; q二q-1;printfc將進(jìn)行結(jié)束的進(jìn)行撤銷rt);for(i=0;i<q;i+)printf (/z%

13、s %d %dpcbi name, pcb訂.priority, pcbi. runtime);2、程序運(yùn)行圖:p1.2單菜度n先級運(yùn)行時間12 33 2145 6看45睛選擇您肅要的功能選項t«* *i!.n匚cp2&4*234543256運(yùn)行時間卡*卓4(*克* 車車檢最高優(yōu)先級的進(jìn)程處于執(zhí)行狀態(tài)(撤消該進(jìn)程)2345i青選擇您需要的功能選項3256級先進(jìn)耳琳32465£52 3 15 4霉履嚮度毬級運(yùn)行時閭pl 2 3p2 3 2p3 14p4 5 6pe 4 5« *宣疔侯* 定 ”* sfc*)!*宣 將毎個山行暹行的執(zhí)行時間減去一個時間片 湫*

14、水*減 斗* 壯 *宣4*宜心* 杠*初*水*曲* 將進(jìn)行結(jié)束的進(jìn)行做消p1 21p2 3 3p3 1 5p4 5 4請選擇您需要的功能選項攙狗拼音輸入法全八、程序中使用的數(shù)據(jù)結(jié)構(gòu)及符號說明:1)結(jié)構(gòu)體pcb:模擬一個進(jìn)程,包扌舌進(jìn)程的名稱name優(yōu)先級priority和運(yùn)行時間runtime。2)變量p:代表進(jìn)程的數(shù)量,隨著進(jìn)程的撤銷改變其余的請看程序注釋。九、調(diào)試程序時出現(xiàn)問題說明及解決的方法:1、再時間片調(diào)度算法邏輯上還有些模糊:百度時間片調(diào)度算法之后,仔細(xì)閱讀了網(wǎng)上 的講解,理解了算法的邏輯。2、調(diào)試的時候出錯;基本上是符號的問題,細(xì)心點根據(jù)錯誤提示就能解決。實驗題目五:模擬使用銀行家

15、算法判斷系統(tǒng) 的狀態(tài)一、題目類型:選作題目二、實驗?zāi)康模恒y行家算法是操作系統(tǒng)中避免死鎖的算法,本實驗通過對銀行家算法的模擬,加強(qiáng)學(xué)生對該算法的理解與應(yīng)用。三、實驗環(huán)境:1、硬件:pc機(jī)及其兼容機(jī)。軟件:windows os, turbo c 或 c+、vc+、vs.net、java 等。、實驗內(nèi)容:1、建立to時刻的資源分配表,初始化。2、設(shè)計銀行家算法,輸入一個進(jìn)程的資源請求,按銀行家算法步驟進(jìn)行檢查。3、設(shè)計安全性算法,檢查某時系統(tǒng)是否安全。4、設(shè)計顯示函數(shù),顯示資源分配表,安全分配序列。五、實驗要求:1 > to時刻的資源分配表由進(jìn)程數(shù)組,max, al location, nee

16、d, available 5個數(shù)組構(gòu) 成。2、系統(tǒng)總體結(jié)構(gòu)。初始化to時刻資源分配表1. 資源申請2. 顯示資源分配表其屮資源屮請模塊功能描述如下:資源申請讀入一個進(jìn)程的巾請按銀行家算法檢查輸出:拒絕分配利用安全算法檢查此時是否安全v返回v顯示:此次資源請求成功修改資源分配表六、各功能簡要說明:1、資源屮請:讀入一個進(jìn)程屮請,按銀行家算法,安全算法進(jìn)行試分配。2、顯示資源分配表:分屏顯示資源分配表某時刻狀態(tài)。3、退出:退出系統(tǒng)七、程序清單:1、程序代碼:#include <stdio.h>include <stdlib. h>#ineludeconio.h>#de

17、fine bool chardefine true 1#define false 0#define m 50/數(shù)據(jù)的長度int nol;/進(jìn)程數(shù)int no2;/資源數(shù)int r;int allocationmm, needmm, availablem, maxmm;char name1m, name2m;void main()void check();void print ();int i, j, p=0, q=0;char c;int requestm, al 1ocationlmm, needlmm, availablelm;printf 銀行家算法rt);printfc請輸入進(jìn)程總數(shù):

18、);scanf(d", &nol);printfc請輸入資源種類數(shù):);scanf ("%d: &no2);/*竊這是一個nxm的矩陣,它定義了系統(tǒng)中n個進(jìn)程中的每一個進(jìn)程對m類資源的最 大需求。*如果maxti, j=k,則表示進(jìn)程i需要rj類資源的最大數(shù)目為k。*/printf (*輸入最大需求矩陣max: n);for (i=0;i<nol;i+) for (j=0;j<no2;j+)printf(z/第拠個進(jìn)程對第%d類資源的最大需求量為:n,i+1, j+1);scanf &maxi j) ;/輸入已知進(jìn)程最大資源需求量/*這也

19、是一個nxm的矩陣,它定義了系統(tǒng)中每一類資源當(dāng)前已分配給每一進(jìn)程的資 源數(shù)。*如果allocationti, j=k,則表示進(jìn)程i當(dāng)前已分得rj類資源的數(shù)目為k。*/printf (,z輸入當(dāng)前分配矩陣 al location: n");for(i=0;i<nol;i+) for(j=0;j<no2;j+) printfc第%<1個進(jìn)程當(dāng)前已分得第d類資源的資源數(shù):n,i+1, j+1); scanf ("%ct, &allocationi j);輸入已知的進(jìn)程已分配的資源數(shù)1/*這也是一個nxm的矩陣,用以表示每一個進(jìn)程尚需的各類資源數(shù)。*如果n

20、eedi,j二k,則表示進(jìn)程i還需要rj類資源k個,方能完成其任務(wù)。*/for(i=0;i<nol;i+)for(j=0;j<no2;j+)need訂j=maxi j-allocationi j;/根據(jù)輸入的兩個數(shù)組計算 出need矩陣的值/*是個含有m個元素的數(shù)組,其中的每一個元素代表一類可利用的資源數(shù)目。 *如果availablej=k,則表示系統(tǒng)中現(xiàn)有rj類資源k個。*/printf (*請輸入可利用資源向量available: n");for(i=0;i<no2;i+) printf f系統(tǒng)中第%d類資源的可用數(shù)量:,1+1);scanf (“d"

21、, &avai lablei) ;/輸入已知的可用資源數(shù)print ();/輸出已知條件check ();檢測to時刻已知條件的安全狀態(tài)辻(r-1) 如果安全則執(zhí)行以下代碼doq=0;p=0;printf cn請輸入請求資源的進(jìn)程號(04): n);for (j=0;j<10;j+)scanf&i);if(i>=nol)!printf (z/輸入錯誤,請重新輸入:n); conti nuo;else break;printf ("n請輸入該進(jìn)程所請求的資源數(shù)request j: n);for (j=0;j<no2;j+)seanf ("%c

22、t, &requestj);for(j=0;j<no2;j+)if(requestj>needi j)p=l; /判斷請求是否超過該進(jìn)程所需要的資源數(shù)if(p)printf (,z請求資源超過該進(jìn)程資源需求量,請求失??! n"); elseifor(j=0;j<no2;j+)if(requestj>availablej)q=l ;/判斷請求是否超過可用資源數(shù)if(q)printf(z/沒有做夠的資源分配,請求失??! n); else!for(j=0;j<no2;j+)avai lablel j=avai lablej; allocationl i

23、 j二allocationi j; needlij=needij;/保存原已分配的資源數(shù),仍需要的資源數(shù)和可用的資源數(shù) availablej=availablej-requestj; allocationij+二requestj;needij二needij-request j;/系統(tǒng)嘗試把資源分配給請求的進(jìn)程print ();check() ;/檢測分配后的安全性if(r-o)如果分配后系統(tǒng)不安全!for(j二0;jno2;j+)availablej=availablelj; allocationij二allocationlij;need訂j=needl i j;還原已分配的資源數(shù),仍需要的資

24、源數(shù)和可用的資源數(shù) printfc返回分配前資源數(shù)n); print ();printf (/zn你還要繼續(xù)分配嗎? y or n? n");/判斷是否繼續(xù)進(jìn)行資源分配c二getche(); while(c二二'y | |c=- y');void check()/安全算法函數(shù)int k, f, v=0, i, j;int workni, am;bool finishm;r=l;for (i=0;i<nol;i+)finishi=false;/初始化進(jìn)程均沒有得到足夠資源數(shù)并完成for(i=0;i<no2;i+)worki=availablei; /work

25、i表示對提供進(jìn)程繼續(xù)運(yùn)行的各類資源數(shù)k=nol;dofor(i=0;i<nol;i+)if(finishi=false)f=l;for(j=0;j<no2;j+)if(needij>workj)f 二0;if(f-l)/找到還沒有完成且需求小于可提供進(jìn)程繼續(xù)運(yùn)行的資源數(shù)的進(jìn)程finishi=true;av+=i ;/記錄安全序列號for(j=0;j<no2;j+)workj+=allocationi j;/釋放該進(jìn)程已分配的資源1k-;/每完成一個進(jìn)程分配,未完成的進(jìn)程數(shù)就減1while(k>0);f 二1;for (i=0; i<nol; i+)/判斷是否

26、所有的進(jìn)程都完成if (f in ishi=falsc)f 二0;break;辻(f=0)/若有進(jìn)程沒有完成,則為不安全狀態(tài)printfc系統(tǒng)處在不安全狀態(tài)! );r=0;else!printfcn系統(tǒng)當(dāng)前為安全狀態(tài),安全序列為:); for(i=0;i<nol;i+)printf (,zp%d ", ai);/輸出安全序列void print()/輸出函數(shù)int i, j;printf("n");printf ("此時刻資源分酉己惰況n");printf (進(jìn)程號/名|最大需求矩陣|當(dāng)前分配矩陣|需求矩陣i ); for(i=0;i&l

27、t;nol;i+)printf c p%d/%d ”,i,i);for (j=0;j<no2;j+)printf (z/%d", maxi j);for(j=0;j<no2;j+)printf (,z %d ,z, allocationi j);for(j=0;j<no2;j+)printf (/z %d ", needi j);ptintf("n");printf("rt);printf(z/各類資源可利用的資源數(shù)為:); for(j=0;j<no2;j+)printff第%(3類資源可用資源數(shù)為:,j+l); pri

28、ntf (z,%dz,, availablej);printf("rt);sir 藕醤殳綜的最大需求重為:2、運(yùn)行截圖:i®108能躡的資源敎:爭1個進(jìn)程對第2類資源的最大需求里為: 川2個進(jìn)程對第1類資源的最大需求里為: 箱2個進(jìn)程對第2類資源的最大需求里為:爭1個進(jìn)程當(dāng)前已分得第2類資源的資源敎: 爭2個進(jìn)程當(dāng)前已分得第1類資源的資源敎: 爭2個進(jìn)程當(dāng)前已分得第2類資源的資源敎:崇統(tǒng)中第2類資源的可用敎里:逬程號/名i最幾ib闕鐺蠶矩陣i需求矩陣ipo/o111100pl/12 11011各類資源可利用的資源敎為:第1類資源可用資源敎為:2第2類資源可用資源敎為:2 素統(tǒng)當(dāng)前為安全狀態(tài),安全序列為:豁頭請求資源的進(jìn)程號04):1請輸入該進(jìn)程所請求的資源數(shù)request j :1誇求資源超過該進(jìn)程資源需求重,請求尖敗! 你還要繼續(xù)分酉!嗎? y or n?nfress any key to continue"d:vc6.0vc+

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論