版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、課 程 設(shè) 計(jì) 報(bào) 告課程名稱 操作系統(tǒng) 課題名稱 銀行家算法 專 業(yè) 班 級(jí) 學(xué) 號(hào) 姓 名 指導(dǎo)教師 2013年7 月 5 日湖南工程學(xué)院課 程 設(shè) 計(jì) 任 務(wù) 書課程名稱 操作系統(tǒng) 課 題 銀行家算法 專業(yè)班級(jí) 學(xué)生姓名 學(xué) 號(hào) 指導(dǎo)老師 審 批 任務(wù)書下達(dá)日期 2013 年 6 月 24 日任務(wù)完成日期 2013年 7 月5日一、設(shè)計(jì)內(nèi)容與設(shè)計(jì)要求1設(shè)計(jì)內(nèi)容:課題1:銀行家算法 編制銀行家算法通用程序,并檢測(cè)所給狀態(tài)的系統(tǒng)安全性。假設(shè)有n個(gè)進(jìn)程m類資源,則有如下數(shù)據(jù)結(jié)構(gòu):(1) 可利用資源向量Available。這是一個(gè)含有m個(gè)元素的數(shù)組,其中的每一個(gè)元素代表一類可利用的資源數(shù)目,其初
2、始值是系統(tǒng)中所配置的該類全部可用資源的數(shù)目,其數(shù)值隨該類資源的分配和回收而動(dòng)態(tài)地改變。Availablej=K,則表示系統(tǒng)中現(xiàn)有Rj 類資源K個(gè)。(2) 最大需求矩陣Max。這是一個(gè)n*m的矩陣,它定義了系統(tǒng)中n個(gè)進(jìn)程中的每一個(gè)進(jìn)程對(duì)m類資源的最大需求。如果Maxi,j=K,則表示進(jìn)程i需要Rj類資源的最大數(shù)目為K。(3) 分配矩陣Allocation。這也是一個(gè)n*m的矩陣,它定義了系統(tǒng)中每一類資源當(dāng)前已分配給每一進(jìn)程的資源數(shù)。如果Allocationi,j=K,則表示進(jìn)程i當(dāng)前已分得Rj類資源的數(shù)目為K。(4) 需求矩陣Need。這也是一個(gè)n*m的矩陣,用以表示每一個(gè)進(jìn)程尚需的各類資源數(shù)。
3、如果Needi,j=K,則表示進(jìn)程i還需要Rj類資源K個(gè),方能完成其任務(wù)。上述三個(gè)矩陣存在如下關(guān)系:Needi,j= Maxi,j- Allocationi,j。設(shè)進(jìn)程I提出請(qǐng)求RequestN,則銀行家算法按如下規(guī)則進(jìn)行判斷:(1)如果RequestN<=NEEDI,N,則轉(zhuǎn)(2);否則,出錯(cuò)。 (2)如果RequestN<=AVAILABLE,則轉(zhuǎn)(3);否則,出錯(cuò)。 (3)系統(tǒng)試探分配資源,修改相關(guān)數(shù)據(jù): AVAILABLE=AVAILABLE-REQUEST ALLOCATION=ALLOCATION+REQUEST NEED=NEED-REQUEST (4)系統(tǒng)執(zhí)行安全性
4、檢查,如安全,則分配成立;否則試探險(xiǎn)性分配作廢,系統(tǒng)恢復(fù)原狀,進(jìn)程等待。課題2:模擬操作系統(tǒng)中進(jìn)程調(diào)度過程。要求設(shè)計(jì)一個(gè)程序,該程序可模擬對(duì)10個(gè)以上的進(jìn)程進(jìn)行FCFS、SJF、HRP的方式進(jìn)行調(diào)度。( 1) 設(shè)計(jì)進(jìn)程控制塊PCB,進(jìn)程控制塊至少包括進(jìn)程號(hào)、到達(dá)時(shí)間和要求服務(wù)時(shí)間; (2) 動(dòng)態(tài)或靜態(tài)創(chuàng)建多個(gè)(10)進(jìn)程;(3) 實(shí)現(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) 每一個(gè)進(jìn)程有一個(gè)PCB,PCB的內(nèi)容可以根據(jù)具體情況設(shè)定;(2) 可以由用戶界面設(shè)定互斥資源(包括兩種:輸入設(shè)備和輸出設(shè)備)的數(shù)目;(3)
5、進(jìn)程數(shù)、進(jìn)入內(nèi)存的時(shí)間和要求服務(wù)時(shí)間可以由用戶界面設(shè)定,程序應(yīng)檢查其合理性;(4) 進(jìn)程之間存在一定的同步與互斥關(guān)系,可以通過界面進(jìn)行設(shè)定,其表示方法如下:進(jìn)程的服務(wù)時(shí)間由四段組成:I2C10O5C5(表示進(jìn)程的服務(wù)時(shí)間由2個(gè)時(shí)間片的輸入,10個(gè)時(shí)間片的計(jì)算,5個(gè)時(shí)間片的輸出,5個(gè)時(shí)間片的計(jì)算組成);進(jìn)程間的同步關(guān)系用一個(gè)段表示:W2,表示該進(jìn)程先要等待P2進(jìn)程執(zhí)行結(jié)束后才可以運(yùn)行,因此,進(jìn)程間的同步與互斥關(guān)系、服務(wù)時(shí)間可以統(tǒng)一用五段表示為:I2C10O5C5W2;(5) 可以在運(yùn)行中顯示各進(jìn)程的狀態(tài):就緒、阻塞、執(zhí)行;(6)采用可視化界面,可以在進(jìn)程調(diào)度過程中隨時(shí)暫停調(diào)度,查看當(dāng)前進(jìn)程的狀態(tài)
6、以及相應(yīng)的阻塞隊(duì)列;(7) 具有一定的數(shù)據(jù)容錯(cuò)性;(8) 模擬6個(gè)以上短進(jìn)程優(yōu)先調(diào)度的程序。界面用VC中的MFC框架結(jié)構(gòu)寫。課題4:利用多線程模擬實(shí)現(xiàn)生產(chǎn)者/消費(fèi)者問題。生產(chǎn)者/消費(fèi)者問題是一個(gè)多線程同步問題的經(jīng)典案例。該問題描述了兩個(gè)共享固定大小緩沖區(qū)的線程即所謂的“生產(chǎn)者”和“消費(fèi)者”在實(shí)際運(yùn)行時(shí)會(huì)發(fā)生的問題。生產(chǎn)者的主要作用是生成一定量的數(shù)據(jù)放到緩沖區(qū)中,然后重復(fù)此過程。與此同時(shí),消費(fèi)者也在緩沖區(qū)消耗這些數(shù)據(jù)。該問題的關(guān)鍵就是要保證生產(chǎn)者不會(huì)在緩沖區(qū)滿時(shí)加入數(shù)據(jù),消費(fèi)者也不會(huì)在緩沖區(qū)中空時(shí)消耗數(shù)據(jù)。要解決該問題,就必須讓生產(chǎn)者在緩沖區(qū)滿時(shí)休眠,等到下次消費(fèi)者消耗緩沖區(qū)中的數(shù)據(jù)的時(shí)候,生產(chǎn)
7、者才能被喚醒,開始往緩沖區(qū)添加數(shù)據(jù)。同樣,也可以讓消費(fèi)者在緩沖區(qū)空時(shí)進(jìn)入休眠,等到生產(chǎn)者往緩沖區(qū)添加數(shù)據(jù)之后,再喚醒消費(fèi)者。通常采用進(jìn)程間通信的方法解決該問題,如采用信號(hào)量方法。如果解決方法不夠完善,則容易出現(xiàn)死鎖的情況。出現(xiàn)死鎖時(shí),兩個(gè)線程都會(huì)陷入休眠,等待對(duì)方喚醒自己。課題5:模擬實(shí)現(xiàn)讀者寫者問題讀者寫者問題是一個(gè)經(jīng)典的并發(fā)程序設(shè)計(jì)問題,是經(jīng)常出現(xiàn)的一種同步問題。所謂讀者寫者問題,是指保證一個(gè)writer進(jìn)程必須與其他進(jìn)程互斥地訪問共享對(duì)象的同步問題。讀者寫者問題可以這樣的描述,有一群寫者和一群讀者,寫者在寫同一本書,讀者也在讀這本書,多個(gè)讀者可以同時(shí)讀這本書,但是,只能有一個(gè)寫者在寫書,
8、并且,讀者比寫者優(yōu)先,也就是說,讀者和寫者同時(shí)提出請(qǐng)求時(shí),讀者優(yōu)先。當(dāng)讀者提出請(qǐng)求時(shí)需要有一個(gè)互斥操作,另外,需要有一個(gè)信號(hào)量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中信號(hào)量實(shí)現(xiàn)部分源代碼從LINUX官網(wǎng)/上載LINUX源代碼,將其解壓后,分析其中incl
9、udelinuxsemaphore.h和 kernel/sched/ semaphore.c及相關(guān)源文件,分析LINUX中信號(hào)量的定義及其相應(yīng)操作的實(shí)現(xiàn)。2 選題方案:所選題目根據(jù)學(xué)號(hào)確定,學(xué)號(hào)模7加1,即(學(xué)號(hào)%7+1)。如你的學(xué)號(hào)為9,則所選題目號(hào)為:9%7+1(題目3)。3設(shè)計(jì)要求:3.1 課程設(shè)計(jì)報(bào)告規(guī)范(1)需求分析a.程序的功能。b.輸入輸出的要求。(2)概要設(shè)計(jì)a.程序由哪些模塊組成以及模塊之間的層次結(jié)構(gòu)、各模塊的調(diào)用關(guān)系;每個(gè)模塊的功能。b.課題涉及的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)庫結(jié)構(gòu);即要存儲(chǔ)什么數(shù)據(jù),這些數(shù)據(jù)是什么樣的結(jié)構(gòu),它們之間有什么關(guān)系等。(3)詳細(xì)設(shè)計(jì)a.采用C語言定義相關(guān)的數(shù)據(jù)
10、類型。b 寫出各模塊的類C碼算法。c.畫出各函數(shù)的調(diào)用關(guān)系圖、主要函數(shù)的流程圖。(4)調(diào)試分析以及設(shè)計(jì)體會(huì)a.測(cè)試數(shù)據(jù):準(zhǔn)備典型的測(cè)試數(shù)據(jù)和測(cè)試方案,包括正確的輸入及輸出結(jié)果和含有錯(cuò)誤的輸入及輸出結(jié)果。b.程序調(diào)試中遇到的問題以及解決問題的方法。c.課程設(shè)計(jì)過程經(jīng)驗(yàn)教訓(xùn)、心得體會(huì)。(5)使用說明用戶使用手冊(cè):說明如何使用你編寫的程序,詳細(xì)列出每一步的操作步驟。(6)書寫格式a.設(shè)計(jì)報(bào)告要求用A4紙打印成冊(cè):b.一級(jí)標(biāo)題用3號(hào)黑體,二級(jí)標(biāo)題用四號(hào)宋體加粗,正文用小四號(hào)宋體;行距為22。(7)附錄源程序清單(帶注釋)3.2 考核方式指導(dǎo)老師負(fù)責(zé)驗(yàn)收程序的運(yùn)行結(jié)果,并結(jié)合學(xué)生的工作態(tài)度、實(shí)際動(dòng)手能力
11、、創(chuàng)新精神和設(shè)計(jì)報(bào)告等進(jìn)行綜合考評(píng),并按優(yōu)秀、良好、中等、及格和不及格五個(gè)等級(jí)給出每位同學(xué)的課程設(shè)計(jì)成績。具體考核標(biāo)準(zhǔn)包含以下幾個(gè)部分:(1)平時(shí)出勤 (占10%)(2)系統(tǒng)需求分析、功能設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)及程序總體結(jié)構(gòu)合理與否(占10%)(3)程序能否完整、準(zhǔn)確地運(yùn)行,個(gè)人能否獨(dú)立、熟練地調(diào)試程序(占40%)(4)設(shè)計(jì)報(bào)告(占30%)注意:不得抄襲他人的報(bào)告(或給他人抄襲),一旦發(fā)現(xiàn),成績?yōu)榱惴?。?)獨(dú)立完成情況(占10%)。3.3 課程驗(yàn)收要求(1)運(yùn)行所設(shè)計(jì)的系統(tǒng)。(2)回答有關(guān)問題。(3)提交課程設(shè)計(jì)報(bào)告。(4)提交軟盤(源程序、設(shè)計(jì)報(bào)告文檔)。(5)依內(nèi)容的創(chuàng)新程度,完善程序情況及
12、對(duì)程序講解情況打分。二、 進(jìn)度安排第 19 周:星期一 8:0012:00 上機(jī) 星期二 8:0012:00 上機(jī)星期三 14:3018:30 上機(jī) 一、課題的主要功能1.程序的功能 編寫銀行家算法通用程序,并檢測(cè)所給狀態(tài)的系統(tǒng)安全性,可利用資源向量Available。這是一個(gè)含有N個(gè)元素的數(shù)組,其中的每一個(gè)元素代表一類可利用的資源數(shù),其初始值是系統(tǒng)中所配置的該類全部可用資源的數(shù)目,其數(shù)值隨該類資源的分配和回收而動(dòng)態(tài)地改變。 最大需求矩陣Max這是一個(gè)M*N的矩陣,它定義了系統(tǒng)中M個(gè)進(jìn)程中的每一個(gè)進(jìn)程對(duì)N類資源的最大需求。如果Maxij=K,則表示進(jìn)程i需要Rj類資源的最大數(shù)目為K。 分配矩陣
13、Allocation。這也是一個(gè)n*m的矩陣,它定義了系統(tǒng)中每一類資源 當(dāng)前已分配給沒一進(jìn)程的資源數(shù)。如果Allocationij=K,則表示 進(jìn)程i當(dāng)前已分得Rj類資源的數(shù)目為K。 需求矩陣Need。這也是一個(gè)M*N的矩陣,用以表示每一個(gè)進(jìn)程尚需的各類資源數(shù)。如果Needij= Maxij- Allocationij,則表示i個(gè)進(jìn)程對(duì)j類資源需求量,方能完成其任務(wù)。 設(shè)Requesti 是進(jìn)程Pi的請(qǐng)求向量,如果Requestij=K,表示進(jìn)程Pi需要K個(gè)Rj類型的資源。當(dāng)Pi發(fā)出資源請(qǐng)求后,系統(tǒng)按下述步驟進(jìn)行檢查:如果Requestij<= Needij,便轉(zhuǎn)向步驟2;否則認(rèn)為出錯(cuò),
14、因?yàn)樗枰馁Y源數(shù)已超過它所宣布的最大值,不能進(jìn)行資源分配。2.輸入輸出的要求(1)以鍵盤輸入的方式輸入進(jìn)程的數(shù)量,資源種類數(shù),各種資源可利用的數(shù)量 Available,各進(jìn)程已分配的資源數(shù)量Allocation和各進(jìn)程對(duì)各類資源的最大需求Max; (2)輸出顯示當(dāng)前系統(tǒng)的狀態(tài);(3)如果預(yù)分配后,系統(tǒng)處于安全狀態(tài),則修改系統(tǒng)的資源分配情況,并予以顯示;(4)如果預(yù)分配后,系統(tǒng)處于不安全狀態(tài),則提示不能滿足請(qǐng)求,并恢復(fù)預(yù)分配前的數(shù)據(jù)。2、 課題的功能模塊的劃分1. 各功能模塊(1) 字符判斷模塊:由數(shù)字判斷函數(shù)( int shuzi(int sz); )實(shí)現(xiàn)。判斷輸入的字符是否為數(shù)字,如果不
15、是則提示出錯(cuò)并重新輸入,主要處理輸入為非數(shù)字時(shí)程序出現(xiàn)運(yùn)行錯(cuò)誤現(xiàn)象。(2)程序初始化模塊:由初始化函數(shù)(void chushihua(); )實(shí)現(xiàn),用于程序開始進(jìn)行初始化輸入數(shù)據(jù):進(jìn)程數(shù)量、資源種類、各種資源可利用數(shù)量Available、各進(jìn)程的各種資源已分配數(shù)量Allocation、各進(jìn)程對(duì)各類資源最大需求數(shù)Max等。(3)安全算法模塊:由安全算法函數(shù)(void safe(); )實(shí)現(xiàn),用于判斷當(dāng)前狀態(tài)安全性,根據(jù)不同地方的調(diào)用提示不同處理。(4)銀行家算法模塊:由銀行家算法函數(shù)(void bank();)實(shí)現(xiàn),進(jìn)行銀行家算法實(shí)現(xiàn)的模塊,調(diào)用其他各個(gè)模塊進(jìn)行銀行家算法過程。(5)分配模塊:由
16、分配顯示函數(shù)(void showdata(); )實(shí)現(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)程對(duì)各類資源的最大需求數(shù)量int Needyy; /需求資源矩陣int Requestx; /申請(qǐng)各類資源的數(shù)量int Wo
17、rkx; /工作向量,表示系統(tǒng)可提供給進(jìn)程運(yùn)行所需各類資源數(shù)量int Finishy; /表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,0為否,1為是int py; /存儲(chǔ)安全序列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 ma
18、in() cout<<endl<<endl; chushihua(); /初始化函數(shù)調(diào)用 cout<<endl; showdata(); /輸出初始化后的狀態(tài) safe(); /安全性算法函數(shù)調(diào)用 if (l<n) cout<<"n當(dāng)前狀態(tài)不安全,無法申請(qǐng),程序退出!"<<endl; cout<<endl; system("pause"); return 0; Else int i; l=0; /局部變量 cout<<"n安全的狀態(tài)!"<&
19、lt;endl; cout<<"安全序列為: " cout<<endl<<"進(jìn)程"<<"("<<p0<<")" /輸出安全序列 for (i=1; i<n; i+) cout<<"=>>"<<"進(jìn)程"<<"("<<pi<<")" for (i=0; i<n; i+) Finishi=
20、0; /所有進(jìn)程變?yōu)槲捶峙錉顟B(tài) cout<<endl<<endl; bank(); /銀行家算法函數(shù)調(diào)用 return 0; / break; 3、 主要功能的實(shí)現(xiàn)1.程序流程圖 銀行家算法bank() 初始化Init() 請(qǐng)求資源request i Requesti <=needi 錯(cuò)誤Request i<=available iAvailablei=availablei-requestiAllocationi=allocationi+requestiNeedi=need i-requestiSafe( )輸出提問:同意分配請(qǐng)求是否再次進(jìn)行分配錯(cuò)誤輸出提示
21、:你的請(qǐng)求被拒絕Availablei=availablei-requestiAllocationi=allocationi+requestiNeedi=need i-requesti退出程序銀行家算法bank()結(jié)束falsefalsetruetruefalsefalsetruetruefalse 圖1 程序流程圖2. 字符判斷模塊此模塊判斷輸入的字符是否為數(shù)字,如果不是則提示出錯(cuò)并重新輸入,主要處理輸入為非數(shù)字輸入時(shí),程序出現(xiàn)的錯(cuò)誤現(xiàn)象。int shuzi(int sz) /輸入數(shù)據(jù)并判斷是否為數(shù)字 char *temp; temp=new char; /臨時(shí)指針,存放輸入字符 int le
22、n; /存儲(chǔ)取字符的長度 sz=0 ; /清零 char s; / do /輸入賭注,只能輸入數(shù)字 / gets(temp); /getline(cin,temp) cin>>temp; len=strlen(temp); /取字符長度 for(int i=0;i<len;i+) s= *(temp+i); if(s<'0' | s>'9') cout<<" 輸入的數(shù)字有誤,請(qǐng)重新輸入! nn" cout<<"請(qǐng)重新輸入:" break; while(s<'
23、;0' | s>'9'); for(int i=0;i<len;i+) /輸入字符串轉(zhuǎn)化為整形數(shù)字 int t=1; for(int j=1;j<len-i;j+) t*=10; sz+=(*(temp+i)-48)*t; return sz;3. 程序初始化模塊此模塊在程序開始時(shí)輸入相關(guān)數(shù)據(jù):進(jìn)程數(shù)量、資源種類、各種資源可利用數(shù)量Available、各進(jìn)程的各種資源已分配數(shù)量Allocation、各進(jìn)程對(duì)各類資源最大需求數(shù)Max等。 void chushihua() /系統(tǒng)初始化函數(shù) cout<<" =歡迎進(jìn)入銀行家算法= &q
24、uot;<<endl; cout<<"="<<endl<<endl; cout<<"請(qǐng)輸入進(jìn)程的數(shù)量: " /輸入相關(guān)數(shù)據(jù) n=shuzi(n); cout<<"請(qǐng)輸入資源種類數(shù): " m=shuzi(m); cout<<endl<<"請(qǐng)輸入各種資源可利用的數(shù)量( "<<m<<" 種): "<<endl; cout<<endl; for (j=0; j&
25、lt;m; j+) cout<<" 輸入資源 "<<j<<" 可利用的數(shù)量Available"<<j<<": " Availablej=shuzi(Availablej); Workj=Availablej; /初始化Workj cout<<endl; cout<<"請(qǐng)輸入各進(jìn)程當(dāng)前已分配的資源數(shù)量Allocation"<<n<<""<<m<<": &qu
26、ot;<<endl<<endl; for (i=0; i<n; i+) for (j=0; j<m; j+) cout<<" 請(qǐng)輸入進(jìn)程 "<<i<<" 當(dāng)前已分配的資源 "<<j<<" 數(shù)量: " Allocationij=shuzi(Allocationij); cout<<endl; Finishi=0;/初始化Finishi cout<<endl; cout<<"請(qǐng)輸入各進(jìn)程對(duì)各類資源的
27、最大需求數(shù)Max"<<n<<""<<m<<": "<<endl<<endl; for (i=0; i<n; i+) for (j=0; j<m; j+) cout<<" 請(qǐng)輸入進(jìn)程 "<<i<<" 對(duì)資源 "<<j<<" 的最大需求數(shù): " Maxij=shuzi(Maxij); if(Maxij>=Allocationij) / Nee
28、dij = Maxij-Allocationij; /計(jì)算還需求量 else Needij=0; /判斷是否還需要分配資源 cout<<endl; cout<<"% 初始化完成! %"<<endl;4. 安全算法模塊 此模塊用于判斷當(dāng)前系統(tǒng)安全性,根據(jù)不同地方的調(diào)用提示不同處理。void safe() l=0; for (i=0; i<n;)if (Finishi=0) /尋找Finishi=0的進(jìn)程 counter=0; /記數(shù)器 for (j=0; j<m; j+) if (Workj>=Needij); /可用大于
29、等于需求 elsecounter=1; break; if(counter!=1) Workj>=Needij /進(jìn)程的每類資源量都符合條件 pl=i; /存儲(chǔ)安全序列 Finishi=1; /標(biāo)志為可分配 for (j=0; j<m;j+) Workj=Workj+Allocationij; /釋放資源 l=l+1; /記數(shù),當(dāng)L=N時(shí)說明滿足安全序列 i= -1; /從第一個(gè)進(jìn)程開始繼續(xù)尋找滿足條件一二的進(jìn)程 i+; /for循環(huán)繼續(xù)尋找 5. 銀行家算法模塊 進(jìn)行銀行家算法實(shí)現(xiàn)的模塊,調(diào)用其他各個(gè)模塊進(jìn)行銀行家算法過程。void bank() cout<<&quo
30、t;% 以下開始為進(jìn)程進(jìn)行資源分配申請(qǐng) %"<<endl<<endl;/申請(qǐng)資源 int k=0; /用于輸入進(jìn)程編號(hào) bool r=false; / 初值為假,輸入Y繼續(xù)申請(qǐng)則置為真 do cout<<"請(qǐng)輸入申請(qǐng)資源的進(jìn)程編號(hào)(輸入0-"<<n-1<<"之間): " /輸入請(qǐng)求 k=shuzi(k); cout<<endl; while(k>n-1) cout<<endl<<"您輸入了錯(cuò)誤的進(jìn)程號(hào),請(qǐng)重新輸入!"<
31、<endl; /輸入異常處理 cout<<endl<<"請(qǐng)輸入申請(qǐng)資源的進(jìn)程編號(hào)(輸入0-"<<n-1<<"之間): " k=shuzi(k); cout<<endl; cout<<endl<<"請(qǐng)輸入該進(jìn)程申請(qǐng)各類資源的數(shù)量: "<<endl; for (j=0; j<m; j+) do cout<<"進(jìn)程 "<<k<<" 申請(qǐng)資源"<<j
32、<<"的數(shù)量:" /循環(huán)判斷申請(qǐng)輸入的情況 Requestj=shuzi(Requestj); cout<<endl;if(Requestj>Needkj) cout<<"申請(qǐng)大于需要量!"<<endl; /申請(qǐng)大于需求量時(shí)出錯(cuò) cout<<"您申請(qǐng)資源"<<j<<"的數(shù)量為"<<Requestj<<",大于進(jìn)程"<<k<<"對(duì)該資源需求量"
33、;<<Needkj<<"。"<<endl; cout<<"請(qǐng)重新輸入!"<<endl; else /先判斷是否申請(qǐng)大于需求量,再判斷是否申請(qǐng)大于可利用量 if(Requestj>Availablej)/申請(qǐng)大于可利用量 cout<<"n沒有那么多資源,目前可利用資源"<<j<<"數(shù)量為"<<Availablej<<",本次申請(qǐng)不成功,進(jìn)程等待!"<<endl;
34、 Finishk=0; /該進(jìn)程等待 goto ppp; /goto語句 跳轉(zhuǎn),結(jié)束本次申請(qǐng) while(Requestj>Needkj); /Requestj>Availablej| /改變Avilable、Allocation、Need的值 for (j=0; j<m; j+) Availablej = Availablej-Requestj; Allocationkj = Allocationkj+Requestj; Needkj = Needkj-Requestj; Workj = Availablej; /判斷當(dāng)前狀態(tài)的安全性 safe(); /調(diào)用安全性算法函數(shù)
35、if (l<n) l=0; cout<<"n當(dāng)前狀態(tài)不安全,不予分配!"<<endl; /恢復(fù)數(shù)據(jù) for (j=0; j<m; j+) Availablej = Availablej+Requestj; Allocationkj = Allocationkj-Requestj; Needkj = Needkj+Requestj; Workj = Availablej; for (i=0; i<n; i+) Finishi=0; /進(jìn)程置為未分配狀態(tài) else l=0; cout<<"n申請(qǐng)資源成功!"
36、;<<endl; for(j=0;j<m;j+) if(Needkj=0); else /有一種資源還沒全部申請(qǐng)到,則該進(jìn)程不可執(zhí)行,不能釋放擁有的資源 l=1; /置l為1,作為判斷標(biāo)志 break; if(l!=1) /進(jìn)程可以執(zhí)行,則釋放該進(jìn)程的所有資源 for (j=0;j<m;j+) Availablej=Availablej+Allocationkj; Allocationkj=0; cout<<"該進(jìn)程已得到所有需求資源,執(zhí)行后將釋放其所有擁有資源!"<<endl; l=0; /歸零 cout<<&q
37、uot;n安全的狀態(tài)!"<<endl; cout<<"安全序列為: " cout<<endl<<"進(jìn)程"<<"("<<p0<<")" /輸出安全序列,考慮顯示格式,先輸出第一個(gè) Finish0=0; for (i=1; i<n; i+) cout<<"=>>"<<"進(jìn)程"<<"("<<pi<&
38、lt;")" Finishi=0; /所有進(jìn)程置為未分配狀態(tài) cout<<endl<<endl; showdata(); /顯示當(dāng)前狀態(tài) ppp: /申請(qǐng)大于可利用量, 應(yīng)該阻塞等待,結(jié)束本次資源申請(qǐng),GOTO 語句跳轉(zhuǎn)至此 cout<<endl<<"是否繼續(xù)申請(qǐng)資源(y/n) ?" char* b=new char; /輸入y/n,判斷是否繼續(xù)申請(qǐng) <<endl cin>>b; cout<<endl; cout<<"="<<e
39、ndl<<endl; cout<<endl; 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、各進(jìn)程還需要的資源量Need。void showdata() /函數(shù)showdata,輸出
40、當(dāng)前資源分配情況 int i,j; /局部變量 int Ally; /各種資源的總數(shù)量 int l2; /局部變量 l cout<<"="<<endl; cout<<endl<<"% 系統(tǒng)當(dāng)前狀態(tài)如下:%"<<endl; cout<<"% 各種資源的總數(shù)量(all):"<<endl; for (j=0;j<m;j+) cout<<" 資源"<<j<<": " Allj=A
41、vailablej; /初始化 先賦值加上可利用量 for (i=0;i<n;i+) Allj+=Allocationij; /再加上每個(gè)進(jìn)程已分配量計(jì)算J類資源總量 cout<<Allj<<" " if (j+1)%5=0 ) cout<<endl; /每行顯示五個(gè) && j!=0 cout<<endl<<endl; cout<<"% 系統(tǒng)目前各種資源可用的數(shù)為(available):"<<endl; for (j=0;j<m;j+) cou
42、t<<" 資源"<<j<<": "<<Availablej<<" " if(j+1)%5=0) cout<<endl; /每行最多顯示五個(gè) && j!=0 cout<<endl<<endl; cout<<"% 各進(jìn)程已經(jīng)得到的資源量(allocation): "<<endl; for(i=0;i<=m/5;i+) /設(shè)計(jì)每行最多顯示五種資源 for (j=i*5;j<i
43、*5+5 && j<m;j+)cout<<" 資源"<<j; cout<<endl; for(l2=0;l2<n;l2+) cout<<"進(jìn)程"<<l2<<":" for (j=i*5;j<i*5+5 && j<m;j+)cout<<Allocationl2j<<" " cout<<endl; cout<<endl; cout<<
44、"% 各進(jìn)程還需要的資源量(need):"<<endl; for(i=0;i<=m/5;i+) /設(shè)計(jì)每行顯示五種資源 for (j=i*5;j<i*5+5 && j<m;j+)cout<<" 資源"<<j; cout<<endl; for(l2=0;l2<n;l2+) cout<<"進(jìn)程"<<l2<<":" for (j=i*5;j<i*5+5 && j<m;j+
45、)cout<<Needl2j<<" " cout<<endl; cout<<endl; cout<<endl; system("pause"); / 暫停4、 程序調(diào)試 圖2 各類資源輸入 當(dāng)進(jìn)入銀行家算法界面后,輸入進(jìn)程信息和各類資源,包括:進(jìn)程數(shù)量、資源種類、各種資源可利用數(shù)量Available、各進(jìn)程的各種資源已分配數(shù)量Allocation、各進(jìn)程對(duì)各類資源最大需求數(shù)Max。圖3 當(dāng)前資源狀態(tài)及安全序列通過輸入相關(guān)信息后,利用顯示函數(shù)予以顯示出來,并在此時(shí)刻利用安全性算法進(jìn)行分析,可知存在
46、一個(gè)安全序列進(jìn)程<1>,進(jìn)程<3>,進(jìn)程<0>,進(jìn)程<2>,進(jìn)程<4>,故此時(shí)系統(tǒng)是安全的。 圖4 進(jìn)程1申請(qǐng)資源 當(dāng)進(jìn)程1發(fā)出請(qǐng)求向量Request(1,0,2)系統(tǒng)按照銀行家算法進(jìn)行檢查,再利用安全性算法檢查此時(shí)系統(tǒng)是否安全。經(jīng)檢查,找到一個(gè)安全序列進(jìn)程<1>,進(jìn)程<3>,進(jìn)程<0>,進(jìn)程<2>,進(jìn)程<4>,因此,系統(tǒng)安全,可以將進(jìn)程1所申請(qǐng)資源分配給它。 圖5 進(jìn)程0申請(qǐng)資源當(dāng)進(jìn)程1發(fā)出請(qǐng)求向量Request(1,0,2)系統(tǒng)按照銀行家算法進(jìn)行檢查,再利用安全性算法檢查
47、此時(shí)系統(tǒng)是否安全。此時(shí),可利用資源Available(2,1,0)已不能滿足任何進(jìn)程的需要,故若實(shí)施分配系統(tǒng)將進(jìn)入不安全狀態(tài),此時(shí)系統(tǒng)不分配資源。5、 總結(jié) 通過本次課程設(shè)計(jì),使我基本懂得了操作系統(tǒng)教程的基礎(chǔ)理論知識(shí)和設(shè)計(jì)方法,同時(shí)在課設(shè)時(shí)遇到了不少的問題,通過查閱相關(guān)書籍或請(qǐng)教老師同學(xué)獲得了不少的幫助,在此期間也學(xué)到了不少的知識(shí),提升了知識(shí)層面的容量,擴(kuò)寬了設(shè)計(jì)的道路。 由于在課設(shè)中也遇到了關(guān)于銀行家算法的相關(guān)問題,但也比較輕松的解決了,同時(shí)也學(xué)習(xí)到了在實(shí)踐時(shí)的不同知識(shí),真的讓我獲益良多。課程設(shè)計(jì)中需要自我的耐心和解決問題的勇氣,正好讓我體驗(yàn)了一把,沒有足夠的耐心只會(huì)感覺到它的枯燥乏味,而沒
48、有體會(huì)到實(shí)踐帶來的動(dòng)手能力的提高,這是在以后工作中不可缺少的能力之一,在此感謝辛勤的老師和幫助過我的同學(xué),希望我們一起提高和進(jìn)步。我們不知道我們接下來的學(xué)期里會(huì)有多少課程設(shè)計(jì),但我們已經(jīng)有足夠面對(duì)它的勇氣,從中學(xué)會(huì)的有關(guān)做事情的一些態(tài)度和方法,將對(duì)我們終身受用,以便我們能在社會(huì)里創(chuàng)造更好的成就,為社會(huì)做出更多的貢獻(xiàn),所以真心的感謝所有老師,是你們讓我有了體驗(yàn)的機(jī)會(huì),讓我懂得了做事不可能一蹴而就,需要有耐心和毅力,當(dāng)然這也是當(dāng)前社會(huì)追求人才所要求的。六、附件#include <iostream.h>#include <stdio.h>#include <stdlib
49、.h> #include <conio.h>#include <string.h>/=定義全局變量=const int x=50,y=100; /定義常量,便于修改int Availablex; /各種資源可利用的數(shù)量int Allocationyy; /各進(jìn)程當(dāng)前已分配的資源數(shù)量int Maxyy; /各進(jìn)程對(duì)各類資源的最大需求數(shù)int Needyy; /還需求矩陣int Requestx; /申請(qǐng)各類資源的數(shù)量int Workx; /工作向量,表示系統(tǒng)可提供給進(jìn)程繼續(xù)運(yùn)行所需的各類資源數(shù)量int Finishy; /表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,0為否,
50、非0為是int py; /存儲(chǔ)安全序列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 *temp; temp=n
51、ew char; /臨時(shí)指針,存放輸入字符 int len; /存儲(chǔ)取字符的長度 sz=0 ; /清零 char s; / do /輸入賭注,只能輸入數(shù)字 / gets(temp); /getline(cin,temp) cin>>temp; len=strlen(temp); /取字符長度 for(int i=0;i<len;i+) s= *(temp+i); if(s<'0' | s>'9') cout<<" 輸入的數(shù)字有誤,請(qǐng)重新輸入! nn" cout<<"請(qǐng)重新輸入:&
52、quot; break; while(s<'0' | s>'9'); for(int i=0;i<len;i+) /輸入字符串轉(zhuǎn)化為整形數(shù)字 int t=1; for(int j=1;j<len-i;j+) t*=10; sz+=(*(temp+i)-48)*t; return sz;/=系統(tǒng)初始化函數(shù)=void chushihua() /=系統(tǒng)初始化輸入= cout<<" =歡迎進(jìn)入銀行家算法= "<<endl; cout<<"="<<endl<
53、;<endl; cout<<"請(qǐng)輸入進(jìn)程的數(shù)量: "/從此開始輸入有關(guān)數(shù)據(jù) n=shuzi(n); cout<<"請(qǐng)輸入資源種類數(shù): " m=shuzi(m); cout<<endl<<"請(qǐng)輸入各種資源可利用的數(shù)量( "<<m<<" 種): "<<endl; cout<<endl; for (j=0; j<m; j+) cout<<" 輸入資源 "<<j<&l
54、t;" 可利用的數(shù)量Available"<<j<<": " Availablej=shuzi(Availablej); Workj=Availablej; /初始化Workj cout<<endl; cout<<"請(qǐng)輸入各進(jìn)程當(dāng)前已分配的資源數(shù)量Allocation"<<n<<""<<m<<": "<<endl<<endl; for (i=0; i<n; i+) for
55、(j=0; j<m; j+) cout<<" 請(qǐng)輸入進(jìn)程 "<<i<<" 當(dāng)前已分配的資源 "<<j<<" 數(shù)量: " Allocationij=shuzi(Allocationij); cout<<endl; Finishi=0;/初始化Finishi cout<<endl; cout<<"請(qǐng)輸入各進(jìn)程對(duì)各類資源的最大需求數(shù)Max"<<n<<""<<m<<": "<<endl<<endl; for (i=0; i<n; i+) for (j=0; j<m; j+) cout<<" 請(qǐng)輸入進(jìn)程 "<<i<<" 對(duì)資源 "<<j<&l
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 會(huì)展考試文檔練習(xí)測(cè)試卷
- 小學(xué)二年級(jí)語文《三個(gè)兒子》說課稿
- 地理學(xué)專業(yè)實(shí)習(xí)報(bào)告600字
- 2024年度農(nóng)村集體土地流轉(zhuǎn)合同范本3篇
- 老舊廠區(qū)改造市場需求分析
- 2024年商務(wù)樓宇停車位租賃與管理協(xié)議3篇
- 犀牛建模課程設(shè)計(jì)
- 混凝土結(jié)構(gòu)構(gòu)件課程設(shè)計(jì)
- 瑜伽館課程設(shè)計(jì)包裝
- 幼兒園大班美術(shù)活動(dòng)《小小手》教案
- 廣東省中山市2023-2024學(xué)年高一下學(xué)期期末統(tǒng)考英語試題
- 古典時(shí)期鋼琴演奏傳統(tǒng)智慧樹知到期末考試答案章節(jié)答案2024年星海音樂學(xué)院
- 樂山市市中區(qū)2022-2023學(xué)年七年級(jí)上學(xué)期期末地理試題【帶答案】
- 兩人合伙人合作協(xié)議合同
- 蘇教版一年級(jí)上冊(cè)數(shù)學(xué)期末測(cè)試卷含答案(完整版)
- 2023年廣東省普通高中數(shù)學(xué)學(xué)業(yè)水平合格性考試真題卷含答案
- DZ/T 0462.5-2023 礦產(chǎn)資源“三率”指標(biāo)要求 第5部分:金、銀、鈮、鉭、鋰、鋯、鍶、稀土、鍺(正式版)
- 生殖與衰老課件
- 注塑車間工作總結(jié)
- 2024春期國開電大本科《城市管理學(xué)》在線形考(形考任務(wù)1至4)試題及答案
- 綜合英語智慧樹知到期末考試答案2024年
評(píng)論
0/150
提交評(píng)論