操作系統(tǒng)課程設(shè)計-銀行家算法_第1頁
操作系統(tǒng)課程設(shè)計-銀行家算法_第2頁
操作系統(tǒng)課程設(shè)計-銀行家算法_第3頁
操作系統(tǒng)課程設(shè)計-銀行家算法_第4頁
操作系統(tǒng)課程設(shè)計-銀行家算法_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、課 程 設(shè) 計 報 告課程名稱 操作系統(tǒng) 課題名稱 銀行家算法 專 業(yè) 班 級 學(xué) 號 姓 名 指導(dǎo)教師 2013年7 月 5 日湖南工程學(xué)院課 程 設(shè) 計 任 務(wù) 書課程名稱 操作系統(tǒng) 課 題 銀行家算法 專業(yè)班級 學(xué)生姓名 學(xué) 號 指導(dǎo)老師 審 批 任務(wù)書下達(dá)日期 2013 年 6 月 24 日任務(wù)完成日期 2013年 7 月5日一、設(shè)計內(nèi)容與設(shè)計要求1設(shè)計內(nèi)容:課題1:銀行家算法 編制銀行家算法通用程序,并檢測所給狀態(tài)的系統(tǒng)安全性。假設(shè)有n個進(jìn)程m類資源,則有如下數(shù)據(jù)結(jié)構(gòu):(1) 可利用資源向量Available。這是一個含有m個元素的數(shù)組,其中的每一個元素代表一類可利用的資源數(shù)目,其初

2、始值是系統(tǒng)中所配置的該類全部可用資源的數(shù)目,其數(shù)值隨該類資源的分配和回收而動態(tài)地改變。Availablej=K,則表示系統(tǒng)中現(xiàn)有Rj 類資源K個。(2) 最大需求矩陣Max。這是一個n*m的矩陣,它定義了系統(tǒng)中n個進(jìn)程中的每一個進(jìn)程對m類資源的最大需求。如果Maxi,j=K,則表示進(jìn)程i需要Rj類資源的最大數(shù)目為K。(3) 分配矩陣Allocation。這也是一個n*m的矩陣,它定義了系統(tǒng)中每一類資源當(dāng)前已分配給每一進(jìn)程的資源數(shù)。如果Allocationi,j=K,則表示進(jìn)程i當(dāng)前已分得Rj類資源的數(shù)目為K。(4) 需求矩陣Need。這也是一個n*m的矩陣,用以表示每一個進(jìn)程尚需的各類資源數(shù)。

3、如果Needi,j=K,則表示進(jìn)程i還需要Rj類資源K個,方能完成其任務(wù)。上述三個矩陣存在如下關(guān)系:Needi,j= Maxi,j- Allocationi,j。設(shè)進(jìn)程I提出請求RequestN,則銀行家算法按如下規(guī)則進(jìn)行判斷:(1)如果RequestN=NEEDI,N,則轉(zhuǎn)(2);否則,出錯。 (2)如果RequestN=AVAILABLE,則轉(zhuǎn)(3);否則,出錯。 (3)系統(tǒng)試探分配資源,修改相關(guān)數(shù)據(jù): AVAILABLE=AVAILABLE-REQUEST ALLOCATION=ALLOCATION+REQUEST NEED=NEED-REQUEST (4)系統(tǒng)執(zhí)行安全性檢查,如安全,則

4、分配成立;否則試探險性分配作廢,系統(tǒng)恢復(fù)原狀,進(jìn)程等待。課題2:模擬操作系統(tǒng)中進(jìn)程調(diào)度過程。要求設(shè)計一個程序,該程序可模擬對10個以上的進(jìn)程進(jìn)行FCFS、SJF、HRP的方式進(jìn)行調(diào)度。( 1) 設(shè)計進(jìn)程控制塊PCB,進(jìn)程控制塊至少包括進(jìn)程號、到達(dá)時間和要求服務(wù)時間; (2) 動態(tài)或靜態(tài)創(chuàng)建多個(10)進(jìn)程;(3) 實現(xiàn)FCFS、SJF、HRP調(diào)度算法;(4) 調(diào)度所創(chuàng)建的進(jìn)程并顯示調(diào)度結(jié)果。課題3:模擬短進(jìn)程優(yōu)先(SJF)調(diào)度要求:(1) 每一個進(jìn)程有一個PCB,PCB的內(nèi)容可以根據(jù)具體情況設(shè)定;(2) 可以由用戶界面設(shè)定互斥資源(包括兩種:輸入設(shè)備和輸出設(shè)備)的數(shù)目;(3) 進(jìn)程數(shù)、進(jìn)入內(nèi)存

5、的時間和要求服務(wù)時間可以由用戶界面設(shè)定,程序應(yīng)檢查其合理性;(4) 進(jìn)程之間存在一定的同步與互斥關(guān)系,可以通過界面進(jìn)行設(shè)定,其表示方法如下:進(jìn)程的服務(wù)時間由四段組成:I2C10O5C5(表示進(jìn)程的服務(wù)時間由2個時間片的輸入,10個時間片的計算,5個時間片的輸出,5個時間片的計算組成);進(jìn)程間的同步關(guān)系用一個段表示:W2,表示該進(jìn)程先要等待P2進(jìn)程執(zhí)行結(jié)束后才可以運(yùn)行,因此,進(jìn)程間的同步與互斥關(guān)系、服務(wù)時間可以統(tǒng)一用五段表示為:I2C10O5C5W2;(5) 可以在運(yùn)行中顯示各進(jìn)程的狀態(tài):就緒、阻塞、執(zhí)行;(6)采用可視化界面,可以在進(jìn)程調(diào)度過程中隨時暫停調(diào)度,查看當(dāng)前進(jìn)程的狀態(tài)以及相應(yīng)的阻塞隊

6、列;(7) 具有一定的數(shù)據(jù)容錯性;(8) 模擬6個以上短進(jìn)程優(yōu)先調(diào)度的程序。界面用VC中的MFC框架結(jié)構(gòu)寫。課題4:利用多線程模擬實現(xiàn)生產(chǎn)者/消費(fèi)者問題。生產(chǎn)者/消費(fèi)者問題是一個多線程同步問題的經(jīng)典案例。該問題描述了兩個共享固定大小緩沖區(qū)的線程即所謂的“生產(chǎn)者”和“消費(fèi)者”在實際運(yùn)行時會發(fā)生的問題。生產(chǎn)者的主要作用是生成一定量的數(shù)據(jù)放到緩沖區(qū)中,然后重復(fù)此過程。與此同時,消費(fèi)者也在緩沖區(qū)消耗這些數(shù)據(jù)。該問題的關(guān)鍵就是要保證生產(chǎn)者不會在緩沖區(qū)滿時加入數(shù)據(jù),消費(fèi)者也不會在緩沖區(qū)中空時消耗數(shù)據(jù)。要解決該問題,就必須讓生產(chǎn)者在緩沖區(qū)滿時休眠,等到下次消費(fèi)者消耗緩沖區(qū)中的數(shù)據(jù)的時候,生產(chǎn)者才能被喚醒,開

7、始往緩沖區(qū)添加數(shù)據(jù)。同樣,也可以讓消費(fèi)者在緩沖區(qū)空時進(jìn)入休眠,等到生產(chǎn)者往緩沖區(qū)添加數(shù)據(jù)之后,再喚醒消費(fèi)者。通常采用進(jìn)程間通信的方法解決該問題,如采用信號量方法。如果解決方法不夠完善,則容易出現(xiàn)死鎖的情況。出現(xiàn)死鎖時,兩個線程都會陷入休眠,等待對方喚醒自己。課題5:模擬實現(xiàn)讀者寫者問題讀者寫者問題是一個經(jīng)典的并發(fā)程序設(shè)計問題,是經(jīng)常出現(xiàn)的一種同步問題。所謂讀者寫者問題,是指保證一個writer進(jìn)程必須與其他進(jìn)程互斥地訪問共享對象的同步問題。讀者寫者問題可以這樣的描述,有一群寫者和一群讀者,寫者在寫同一本書,讀者也在讀這本書,多個讀者可以同時讀這本書,但是,只能有一個寫者在寫書,并且,讀者比寫者

8、優(yōu)先,也就是說,讀者和寫者同時提出請求時,讀者優(yōu)先。當(dāng)讀者提出請求時需要有一個互斥操作,另外,需要有一個信號量S來當(dāng)前是否可操作。課題6:分析LINUX內(nèi)核中進(jìn)程調(diào)度部分源代碼從LINUX官網(wǎng)/上載LINUX源代碼,將其解壓后,分析其中includelinux sched.h 和kernel/sched/core.c及相關(guān)源文件,了解其進(jìn)程控制塊結(jié)構(gòu),分析LINUX進(jìn)程調(diào)度策略及過程。課題7:分析LINUX中信號量實現(xiàn)部分源代碼從LINUX官網(wǎng)/上載LINUX源代碼,將其解壓后,分析其中includelinux

9、semaphore.h和 kernel/sched/ semaphore.c及相關(guān)源文件,分析LINUX中信號量的定義及其相應(yīng)操作的實現(xiàn)。2 選題方案:所選題目根據(jù)學(xué)號確定,學(xué)號模7加1,即(學(xué)號%7+1)。如你的學(xué)號為9,則所選題目號為:9%7+1(題目3)。3設(shè)計要求:3.1 課程設(shè)計報告規(guī)范(1)需求分析a.程序的功能。b.輸入輸出的要求。(2)概要設(shè)計a.程序由哪些模塊組成以及模塊之間的層次結(jié)構(gòu)、各模塊的調(diào)用關(guān)系;每個模塊的功能。b.課題涉及的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)庫結(jié)構(gòu);即要存儲什么數(shù)據(jù),這些數(shù)據(jù)是什么樣的結(jié)構(gòu),它們之間有什么關(guān)系等。(3)詳細(xì)設(shè)計a.采用C語言定義相關(guān)的數(shù)據(jù)類型。b 寫出各

10、模塊的類C碼算法。c.畫出各函數(shù)的調(diào)用關(guān)系圖、主要函數(shù)的流程圖。(4)調(diào)試分析以及設(shè)計體會a.測試數(shù)據(jù):準(zhǔn)備典型的測試數(shù)據(jù)和測試方案,包括正確的輸入及輸出結(jié)果和含有錯誤的輸入及輸出結(jié)果。b.程序調(diào)試中遇到的問題以及解決問題的方法。c.課程設(shè)計過程經(jīng)驗教訓(xùn)、心得體會。(5)使用說明用戶使用手冊:說明如何使用你編寫的程序,詳細(xì)列出每一步的操作步驟。(6)書寫格式a.設(shè)計報告要求用A4紙打印成冊:b.一級標(biāo)題用3號黑體,二級標(biāo)題用四號宋體加粗,正文用小四號宋體;行距為22。(7)附錄源程序清單(帶注釋)3.2 考核方式指導(dǎo)老師負(fù)責(zé)驗收程序的運(yùn)行結(jié)果,并結(jié)合學(xué)生的工作態(tài)度、實際動手能力、創(chuàng)新精神和設(shè)計

11、報告等進(jìn)行綜合考評,并按優(yōu)秀、良好、中等、及格和不及格五個等級給出每位同學(xué)的課程設(shè)計成績。具體考核標(biāo)準(zhǔn)包含以下幾個部分:(1)平時出勤 (占10%)(2)系統(tǒng)需求分析、功能設(shè)計、數(shù)據(jù)結(jié)構(gòu)設(shè)計及程序總體結(jié)構(gòu)合理與否(占10%)(3)程序能否完整、準(zhǔn)確地運(yùn)行,個人能否獨(dú)立、熟練地調(diào)試程序(占40%)(4)設(shè)計報告(占30%)注意:不得抄襲他人的報告(或給他人抄襲),一旦發(fā)現(xiàn),成績?yōu)榱惴帧#?)獨(dú)立完成情況(占10%)。3.3 課程驗收要求(1)運(yùn)行所設(shè)計的系統(tǒng)。(2)回答有關(guān)問題。(3)提交課程設(shè)計報告。(4)提交軟盤(源程序、設(shè)計報告文檔)。(5)依內(nèi)容的創(chuàng)新程度,完善程序情況及對程序講解情況打

12、分。二、 進(jìn)度安排第 19 周:星期一 8:0012:00 上機(jī) 星期二 8:0012:00 上機(jī)星期三 14:3018:30 上機(jī) 一、課題的主要功能1.程序的功能 編寫銀行家算法通用程序,并檢測所給狀態(tài)的系統(tǒng)安全性,可利用資源向量Available。這是一個含有N個元素的數(shù)組,其中的每一個元素代表一類可利用的資源數(shù),其初始值是系統(tǒng)中所配置的該類全部可用資源的數(shù)目,其數(shù)值隨該類資源的分配和回收而動態(tài)地改變。 最大需求矩陣Max這是一個M*N的矩陣,它定義了系統(tǒng)中M個進(jìn)程中的每一個進(jìn)程對N類資源的最大需求。如果Maxij=K,則表示進(jìn)程i需要Rj類資源的最大數(shù)目為K。 分配矩陣Allocati

13、on。這也是一個n*m的矩陣,它定義了系統(tǒng)中每一類資源 當(dāng)前已分配給沒一進(jìn)程的資源數(shù)。如果Allocationij=K,則表示 進(jìn)程i當(dāng)前已分得Rj類資源的數(shù)目為K。 需求矩陣Need。這也是一個M*N的矩陣,用以表示每一個進(jìn)程尚需的各類資源數(shù)。如果Needij= Maxij- Allocationij,則表示i個進(jìn)程對j類資源需求量,方能完成其任務(wù)。 設(shè)Requesti 是進(jìn)程Pi的請求向量,如果Requestij=K,表示進(jìn)程Pi需要K個Rj類型的資源。當(dāng)Pi發(fā)出資源請求后,系統(tǒng)按下述步驟進(jìn)行檢查:如果Requestij= Needij,便轉(zhuǎn)向步驟2;否則認(rèn)為出錯,因為它所需要的資源數(shù)已超

14、過它所宣布的最大值,不能進(jìn)行資源分配。2.輸入輸出的要求(1)以鍵盤輸入的方式輸入進(jìn)程的數(shù)量,資源種類數(shù),各種資源可利用的數(shù)量 Available,各進(jìn)程已分配的資源數(shù)量Allocation和各進(jìn)程對各類資源的最大需求Max; (2)輸出顯示當(dāng)前系統(tǒng)的狀態(tài);(3)如果預(yù)分配后,系統(tǒng)處于安全狀態(tài),則修改系統(tǒng)的資源分配情況,并予以顯示;(4)如果預(yù)分配后,系統(tǒng)處于不安全狀態(tài),則提示不能滿足請求,并恢復(fù)預(yù)分配前的數(shù)據(jù)。2、 課題的功能模塊的劃分1. 各功能模塊(1) 字符判斷模塊:由數(shù)字判斷函數(shù)( int shuzi(int sz); )實現(xiàn)。判斷輸入的字符是否為數(shù)字,如果不是則提示出錯并重新輸入,

15、主要處理輸入為非數(shù)字時程序出現(xiàn)運(yùn)行錯誤現(xiàn)象。(2)程序初始化模塊:由初始化函數(shù)(void chushihua(); )實現(xiàn),用于程序開始進(jìn)行初始化輸入數(shù)據(jù):進(jìn)程數(shù)量、資源種類、各種資源可利用數(shù)量Available、各進(jìn)程的各種資源已分配數(shù)量Allocation、各進(jìn)程對各類資源最大需求數(shù)Max等。(3)安全算法模塊:由安全算法函數(shù)(void safe(); )實現(xiàn),用于判斷當(dāng)前狀態(tài)安全性,根據(jù)不同地方的調(diào)用提示不同處理。(4)銀行家算法模塊:由銀行家算法函數(shù)(void bank();)實現(xiàn),進(jìn)行銀行家算法實現(xiàn)的模塊,調(diào)用其他各個模塊進(jìn)行銀行家算法過程。(5)分配模塊:由分配顯示函數(shù)(void

16、showdata(); )實現(xiàn),顯示當(dāng)前資源分配詳細(xì)情況,包括:各種資源的總數(shù)量(all)、系統(tǒng)目前各種資源可用的數(shù)量Available、各進(jìn)程已經(jīng)得到的資源數(shù)量Allocation、各進(jìn)程還需要的資源量Need。2.數(shù)據(jù)結(jié)構(gòu)2.1 全局變量const int x=50,y=100; /定義常量,便于修改int Availablex; /各種資源可利用的數(shù)量int Allocationyy; /各進(jìn)程當(dāng)前已分配的資源數(shù)量int Maxyy; /各進(jìn)程對各類資源的最大需求數(shù)量int Needyy; /需求資源矩陣int Requestx; /申請各類資源的數(shù)量int Workx; /工作向量,表

17、示系統(tǒng)可提供給進(jìn)程運(yùn)行所需各類資源數(shù)量int Finishy; /表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,0為否,1為是int py; /存儲安全序列int i,j; /全局變量,主要用于循環(huán)語句中int n,m; /n為進(jìn)程的數(shù)量,m為資源種類數(shù)int l=0,counter=0;2.2 函數(shù)聲明int shuzi(int sz); /數(shù)字判斷函數(shù)void chushihua(); /系統(tǒng)初始化函數(shù)void safe(); /安全性算法函數(shù)void bank(); /銀行家算法函數(shù)void showdata(); /輸出顯示當(dāng)前資源分配情況2.3 主函數(shù)結(jié)構(gòu) int main() coutend

18、lendl; chushihua(); /初始化函數(shù)調(diào)用 coutendl; showdata(); /輸出初始化后的狀態(tài) safe(); /安全性算法函數(shù)調(diào)用 if (ln) coutn當(dāng)前狀態(tài)不安全,無法申請,程序退出!endl; coutendl; system(pause); return 0; Else int i; l=0; /局部變量 coutn安全的狀態(tài)!endl; cout安全序列為: ; coutendl進(jìn)程(p0); /輸出安全序列 for (i=1; in; i+) cout進(jìn)程(pi); for (i=0; in; i+) Finishi=0; /所有進(jìn)程變?yōu)槲捶峙錉?/p>

19、態(tài) coutendlendl; bank(); /銀行家算法函數(shù)調(diào)用 return 0; / break; 3、 主要功能的實現(xiàn)1.程序流程圖 銀行家算法bank() 初始化Init() 請求資源request i Requesti =needi 錯誤Request itemp; len=strlen(temp); /取字符長度 for(int i=0;ilen;i+) s= *(temp+i); if(s9) cout 輸入的數(shù)字有誤,請重新輸入! nn; cout請重新輸入:; break; while(s9); for(int i=0;ilen;i+) /輸入字符串轉(zhuǎn)化為整形數(shù)字 int

20、 t=1; for(int j=1;jlen-i;j+) t*=10; sz+=(*(temp+i)-48)*t; return sz;3. 程序初始化模塊此模塊在程序開始時輸入相關(guān)數(shù)據(jù):進(jìn)程數(shù)量、資源種類、各種資源可利用數(shù)量Available、各進(jìn)程的各種資源已分配數(shù)量Allocation、各進(jìn)程對各類資源最大需求數(shù)Max等。 void chushihua() /系統(tǒng)初始化函數(shù) cout =歡迎進(jìn)入銀行家算法= endl; cout=endlendl; cout請輸入進(jìn)程的數(shù)量: ; /輸入相關(guān)數(shù)據(jù) n=shuzi(n); cout請輸入資源種類數(shù): ; m=shuzi(m); couten

21、dl請輸入各種資源可利用的數(shù)量( m 種): endl; coutendl; for (j=0; jm; j+) cout 輸入資源 j 可利用的數(shù)量Availablej: ; Availablej=shuzi(Availablej); Workj=Availablej; /初始化Workj coutendl; cout請輸入各進(jìn)程當(dāng)前已分配的資源數(shù)量Allocationnm: endlendl; for (i=0; in; i+) for (j=0; jm; j+) cout 請輸入進(jìn)程 i 當(dāng)前已分配的資源 j 數(shù)量: ; Allocationij=shuzi(Allocationij);

22、 coutendl; Finishi=0;/初始化Finishi coutendl; cout請輸入各進(jìn)程對各類資源的最大需求數(shù)Maxnm: endlendl; for (i=0; in; i+) for (j=0; jm; j+) cout 請輸入進(jìn)程 i 對資源 j=Allocationij) / Needij = Maxij-Allocationij; /計算還需求量 else Needij=0; /判斷是否還需要分配資源 coutendl; cout% 初始化完成! %endl;4. 安全算法模塊 此模塊用于判斷當(dāng)前系統(tǒng)安全性,根據(jù)不同地方的調(diào)用提示不同處理。void safe() l

23、=0; for (i=0; in;)if (Finishi=0) /尋找Finishi=0的進(jìn)程 counter=0; /記數(shù)器 for (j=0; j=Needij); /可用大于等于需求 elsecounter=1; break; if(counter!=1) Workj=Needij /進(jìn)程的每類資源量都符合條件 pl=i; /存儲安全序列 Finishi=1; /標(biāo)志為可分配 for (j=0; jm;j+) Workj=Workj+Allocationij; /釋放資源 l=l+1; /記數(shù),當(dāng)L=N時說明滿足安全序列 i= -1; /從第一個進(jìn)程開始繼續(xù)尋找滿足條件一二的進(jìn)程 i+

24、; /for循環(huán)繼續(xù)尋找 5. 銀行家算法模塊 進(jìn)行銀行家算法實現(xiàn)的模塊,調(diào)用其他各個模塊進(jìn)行銀行家算法過程。void bank() cout% 以下開始為進(jìn)程進(jìn)行資源分配申請 %endlendl;/申請資源 int k=0; /用于輸入進(jìn)程編號 bool r=false; / 初值為假,輸入Y繼續(xù)申請則置為真 do cout請輸入申請資源的進(jìn)程編號(輸入0-n-1之間): ; /輸入請求 k=shuzi(k); coutn-1) coutendl您輸入了錯誤的進(jìn)程號,請重新輸入!endl; /輸入異常處理 coutendl請輸入申請資源的進(jìn)程編號(輸入0-n-1之間): ; k=shuzi(

25、k); coutendl; coutendl請輸入該進(jìn)程申請各類資源的數(shù)量: endl; for (j=0; jm; j+) do cout進(jìn)程 k 申請資源j的數(shù)量:; /循環(huán)判斷申請輸入的情況 Requestj=shuzi(Requestj); coutNeedkj) cout申請大于需要量!endl; /申請大于需求量時出錯 cout您申請資源j的數(shù)量為Requestj,大于進(jìn)程k對該資源需求量Needkj。endl; cout請重新輸入!Availablej)/申請大于可利用量 coutn沒有那么多資源,目前可利用資源j數(shù)量為Availablej,本次申請不成功,進(jìn)程等待!Needkj

26、); /RequestjAvailablej| /改變Avilable、Allocation、Need的值 for (j=0; jm; j+) Availablej = Availablej-Requestj; Allocationkj = Allocationkj+Requestj; Needkj = Needkj-Requestj; Workj = Availablej; /判斷當(dāng)前狀態(tài)的安全性 safe(); /調(diào)用安全性算法函數(shù) if (ln) l=0; coutn當(dāng)前狀態(tài)不安全,不予分配!endl; /恢復(fù)數(shù)據(jù) for (j=0; jm; j+) Availablej = Avail

27、ablej+Requestj; Allocationkj = Allocationkj-Requestj; Needkj = Needkj+Requestj; Workj = Availablej; for (i=0; in; i+) Finishi=0; /進(jìn)程置為未分配狀態(tài) else l=0; coutn申請資源成功!endl; for(j=0;jm;j+) if(Needkj=0); else /有一種資源還沒全部申請到,則該進(jìn)程不可執(zhí)行,不能釋放擁有的資源 l=1; /置l為1,作為判斷標(biāo)志 break; if(l!=1) /進(jìn)程可以執(zhí)行,則釋放該進(jìn)程的所有資源 for (j=0;jm

28、;j+) Availablej=Availablej+Allocationkj; Allocationkj=0; cout該進(jìn)程已得到所有需求資源,執(zhí)行后將釋放其所有擁有資源!endl; l=0; /歸零 coutn安全的狀態(tài)!endl; cout安全序列為: ; coutendl進(jìn)程(p0); /輸出安全序列,考慮顯示格式,先輸出第一個 Finish0=0; for (i=1; in; i+) cout進(jìn)程(pi); Finishi=0; /所有進(jìn)程置為未分配狀態(tài) coutendlendl; showdata(); /顯示當(dāng)前狀態(tài) ppp: /申請大于可利用量, 應(yīng)該阻塞等待,結(jié)束本次資源申

29、請,GOTO 語句跳轉(zhuǎn)至此 coutendl是否繼續(xù)申請資源(y/n) ?; char* b=new char; /輸入y/n,判斷是否繼續(xù)申請 b; coutendl; cout=endlendl; coutendl; if(*b=y|*b=Y) r=true; else r=false; /輸入非 Y 則令 R =false / system(cls); / /在sign() 里調(diào)用 while (r=true);6. 分配模塊此模塊用于顯示當(dāng)前資源分配詳細(xì)情況,包括:各種資源的總數(shù)量(all)、系統(tǒng)目前各種資源可用的數(shù)量Available、各進(jìn)程已經(jīng)得到的資源數(shù)量Allocation、各

30、進(jìn)程還需要的資源量Need。void showdata() /函數(shù)showdata,輸出當(dāng)前資源分配情況 int i,j; /局部變量 int Ally; /各種資源的總數(shù)量 int l2; /局部變量 l cout=endl; coutendl% 系統(tǒng)當(dāng)前狀態(tài)如下:%endl; cout% 各種資源的總數(shù)量(all):endl; for (j=0;jm;j+) cout 資源j: ; Allj=Availablej; /初始化 先賦值加上可利用量 for (i=0;in;i+) Allj+=Allocationij; /再加上每個進(jìn)程已分配量計算J類資源總量 coutAllj ; if (j

31、+1)%5=0 ) coutendl; /每行顯示五個 & j!=0 coutendlendl; cout% 系統(tǒng)目前各種資源可用的數(shù)為(available):endl; for (j=0;jm;j+) cout 資源j: Availablej ; if(j+1)%5=0) coutendl; /每行最多顯示五個 & j!=0 coutendlendl; cout% 各進(jìn)程已經(jīng)得到的資源量(allocation): endl; for(i=0;i=m/5;i+) /設(shè)計每行最多顯示五種資源 for (j=i*5;ji*5+5 & jm;j+)cout 資源j; coutendl; for(l2

32、=0;l2n;l2+) cout進(jìn)程l2:; for (j=i*5;ji*5+5 & jm;j+)coutAllocationl2j ; coutendl; coutendl; cout% 各進(jìn)程還需要的資源量(need):endl; for(i=0;i=m/5;i+) /設(shè)計每行顯示五種資源 for (j=i*5;ji*5+5 & jm;j+)cout 資源j; coutendl; for(l2=0;l2n;l2+) cout進(jìn)程l2:; for (j=i*5;ji*5+5 & jm;j+)coutNeedl2j ; coutendl; coutendl; coutendl; system(

33、pause); / 暫停4、 程序調(diào)試 圖2 各類資源輸入 當(dāng)進(jìn)入銀行家算法界面后,輸入進(jìn)程信息和各類資源,包括:進(jìn)程數(shù)量、資源種類、各種資源可利用數(shù)量Available、各進(jìn)程的各種資源已分配數(shù)量Allocation、各進(jìn)程對各類資源最大需求數(shù)Max。圖3 當(dāng)前資源狀態(tài)及安全序列通過輸入相關(guān)信息后,利用顯示函數(shù)予以顯示出來,并在此時刻利用安全性算法進(jìn)行分析,可知存在一個安全序列進(jìn)程,進(jìn)程,進(jìn)程,進(jìn)程,進(jìn)程,故此時系統(tǒng)是安全的。 圖4 進(jìn)程1申請資源 當(dāng)進(jìn)程1發(fā)出請求向量Request(1,0,2)系統(tǒng)按照銀行家算法進(jìn)行檢查,再利用安全性算法檢查此時系統(tǒng)是否安全。經(jīng)檢查,找到一個安全序列進(jìn)程,

34、進(jìn)程,進(jìn)程,進(jìn)程,進(jìn)程,因此,系統(tǒng)安全,可以將進(jìn)程1所申請資源分配給它。 圖5 進(jìn)程0申請資源當(dāng)進(jìn)程1發(fā)出請求向量Request(1,0,2)系統(tǒng)按照銀行家算法進(jìn)行檢查,再利用安全性算法檢查此時系統(tǒng)是否安全。此時,可利用資源Available(2,1,0)已不能滿足任何進(jìn)程的需要,故若實施分配系統(tǒng)將進(jìn)入不安全狀態(tài),此時系統(tǒng)不分配資源。5、 總結(jié) 通過本次課程設(shè)計,使我基本懂得了操作系統(tǒng)教程的基礎(chǔ)理論知識和設(shè)計方法,同時在課設(shè)時遇到了不少的問題,通過查閱相關(guān)書籍或請教老師同學(xué)獲得了不少的幫助,在此期間也學(xué)到了不少的知識,提升了知識層面的容量,擴(kuò)寬了設(shè)計的道路。 由于在課設(shè)中也遇到了關(guān)于銀行家算法

35、的相關(guān)問題,但也比較輕松的解決了,同時也學(xué)習(xí)到了在實踐時的不同知識,真的讓我獲益良多。課程設(shè)計中需要自我的耐心和解決問題的勇氣,正好讓我體驗了一把,沒有足夠的耐心只會感覺到它的枯燥乏味,而沒有體會到實踐帶來的動手能力的提高,這是在以后工作中不可缺少的能力之一,在此感謝辛勤的老師和幫助過我的同學(xué),希望我們一起提高和進(jìn)步。我們不知道我們接下來的學(xué)期里會有多少課程設(shè)計,但我們已經(jīng)有足夠面對它的勇氣,從中學(xué)會的有關(guān)做事情的一些態(tài)度和方法,將對我們終身受用,以便我們能在社會里創(chuàng)造更好的成就,為社會做出更多的貢獻(xiàn),所以真心的感謝所有老師,是你們讓我有了體驗的機(jī)會,讓我懂得了做事不可能一蹴而就,需要有耐心和

36、毅力,當(dāng)然這也是當(dāng)前社會追求人才所要求的。六、附件#include #include #include #include #include /=定義全局變量=const int x=50,y=100; /定義常量,便于修改int Availablex; /各種資源可利用的數(shù)量int Allocationyy; /各進(jìn)程當(dāng)前已分配的資源數(shù)量int Maxyy; /各進(jìn)程對各類資源的最大需求數(shù)int Needyy; /還需求矩陣int Requestx; /申請各類資源的數(shù)量int Workx; /工作向量,表示系統(tǒng)可提供給進(jìn)程繼續(xù)運(yùn)行所需的各類資源數(shù)量int Finishy; /表示系統(tǒng)是否有足

37、夠的資源分配給進(jìn)程,0為否,非0為是int py; /存儲安全序列int i,j;int n,m; /n為進(jìn)程的數(shù)量,m為資源種類數(shù)int l=0,counter=0;/函數(shù)聲明int shuzi(int sz); /數(shù)字判斷函數(shù) 或者使用 void shuzi(int& sz); 方式void chushihua(); /系統(tǒng)初始化函數(shù)void safe(); /安全性算法函數(shù)void bank(); /銀行家算法函數(shù)void showdata(); /函數(shù)showdata,輸出當(dāng)前資源分配情況/=數(shù)字判斷函數(shù)=int shuzi(int sz) /輸入數(shù)據(jù)并判斷是否為數(shù)字 char *te

38、mp; temp=new char; /臨時指針,存放輸入字符 int len; /存儲取字符的長度 sz=0 ; /清零 char s; / do /輸入賭注,只能輸入數(shù)字 / gets(temp); /getline(cin,temp) cintemp; len=strlen(temp); /取字符長度 for(int i=0;ilen;i+) s= *(temp+i); if(s9) cout 輸入的數(shù)字有誤,請重新輸入! nn; cout請重新輸入:; break; while(s9); for(int i=0;ilen;i+) /輸入字符串轉(zhuǎn)化為整形數(shù)字 int t=1; for(i

39、nt j=1;jlen-i;j+) t*=10; sz+=(*(temp+i)-48)*t; return sz;/=系統(tǒng)初始化函數(shù)=void chushihua() /=系統(tǒng)初始化輸入= cout =歡迎進(jìn)入銀行家算法= endl; cout=endlendl; cout請輸入進(jìn)程的數(shù)量: ;/從此開始輸入有關(guān)數(shù)據(jù) n=shuzi(n); cout請輸入資源種類數(shù): ; m=shuzi(m); coutendl請輸入各種資源可利用的數(shù)量( m 種): endl; coutendl; for (j=0; jm; j+) cout 輸入資源 j 可利用的數(shù)量Availablej: ; Availablej=shuzi(Availablej); Workj=Availablej; /初始化Workj coutendl; cout請輸入各進(jìn)程當(dāng)前已分配的資源數(shù)量Allocationnm: endlendl; for (i=0; in; i+) for (j=0; jm

溫馨提示

  • 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

提交評論