版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 課程設計(論文)任務書</p><p> 一、課程設計(論文)題目 資源管理系統(tǒng)的設計與實現(xiàn) </p><p> 二、課程設計(論文)工作自 年 月 日起至 年 月 日止。</p><p> 三、課程設計(論文) 地點:
2、 </p><p> 四、課程設計(論文)內容要求:</p><p> 1.本課程設計的目的</p><p> (1)本課程設計的目的是綜合應用學生所學知識,通過實驗環(huán)節(jié),加深學生對操作系統(tǒng)基本原理和工作過程的理解,提高學生獨立分析問題、解決問題的能力,增強學生的動手能力。</p><p&
3、gt; ?。?)銀行家算法是避免死鎖的一種重要方法。通過編寫一個模擬動態(tài)資源分配的銀行家算法程序,進一步深入理解死鎖、產生死鎖的必要條件、安全狀態(tài)等重要概念,并掌握避免死鎖的具體實施方法。并且了解銀行家算法的特點,掌握避免死鎖的方法。</p><p> ?。?)為配合《計算機操作系統(tǒng)》課程的教學,通過學習操作系統(tǒng)原理和模擬操作系統(tǒng)的</p><p> 功能實現(xiàn),使學生能更深刻地領會操作系
4、統(tǒng)工作原理和理解操作系統(tǒng)的實現(xiàn)方法,并可</p><p><b> 練習程序設計。 </b></p><p> 2.課程設計的任務及要求</p><p><b> 1)基本要求:</b></p><p> 用VC編程實現(xiàn)一個資源管理系統(tǒng),該系統(tǒng)必須包括資源的添加、刪除和修改等功能,并且允許其
5、它進程來申請這里的資源,任何一個進程來申請資源時,必須先登記該進程對資源的申請要求,然后由系統(tǒng)檢查當前資源的狀況,并用銀行家算法和安全性算法來檢查是否允許分配資源給進程。</p><p> 每個進程申請資源的情況必須進行記錄,并且作為課程設計報告的一部分數(shù)據(jù)。</p><p> 課程設計論文編寫要求</p><p> ?。?)要按照書稿的規(guī)格打印謄寫畢業(yè)論文&l
6、t;/p><p> ?。?)論文包括目錄、緒論、正文、小結、參考文獻、謝辭、附錄等</p><p> (3)課程設計報告裝訂按學校的統(tǒng)一要求完成</p><p> 3)答辯與評分標準: </p><p> ?。?)完成原理分析:20分; </p><p> ?。?)完成設計過程:30分; </p><
7、;p> ?。?)完成調試:30分;</p><p> ?。?)回答問題:20分。</p><p><b> 4)參考文獻:</b></p><p> ?。?)湯子瀛《計算機操作系統(tǒng)》(第三版)西安電子科技大學出版社 2007</p><p> ?。?)張堯學 史美林 《計算機操作系統(tǒng)教程》實驗指導 清華大學出版社
8、 2000</p><p> ?。?)錢哨 李繼哲 李揮劍《 C# WinForm上機實訓指導》 中國水利水電出版社 2010</p><p> 內容 天數(shù) 地點</p><p> 構思及收集資料 1 圖書館</p><p> 程序實現(xiàn)與調試
9、 2 實驗室</p><p> 撰寫論文 2 圖書館、實驗室</p><p> 學生簽名: </p><p> 2012 年 12月 30 日</p><p> 課程設計(論文)評審意見</p><p> ?。?)完成原
10、理分析(20分):優(yōu)(?。⒘迹ā。⒅校ā。⒁话悖ā。?、差(?。?; </p><p> ?。?)設計分析 ?。?0分):優(yōu)(?。?、良(?。?、中(?。?、一般( )、差(?。?</p><p> ?。?)完成調試 ?。?0分):優(yōu)(?。?、良(?。?、中( )、一般(?。?、差(?。?;</p><p> ?。?)回答問題 ?。?0分):優(yōu)(?。?、良(?。⒅校ā。⒁话?/p>
11、(?。?、差(?。?lt;/p><p> ?。?)格式規(guī)范性及考勤是否降等級:是( )、否( )</p><p> 評閱人: 職稱: </p><p> 2012 年 12 月 30 日</p><p><b> 目錄</b></p><p
12、><b> 第一章 引言1</b></p><p> 1.1 資源管理系統(tǒng)的提出1</p><p> 1.2 課程設計的目的和意義2</p><p> 1.3課程設計的任務及要求3</p><p> 第二章 資源管理系統(tǒng)概要設計4</p><p> 2.1 開發(fā)工具與相
13、關技術4</p><p> 2.1.1 面向對象編程語言C#4</p><p> 2.1.2 面向對象編程語言C++5</p><p> 2.2 銀行家算法6</p><p> 2.3銀行家算法流程圖8</p><p> 第三章 基于銀行家算法的資源管理系統(tǒng)詳細設計10</p>&l
14、t;p> 3.1 資源管理系統(tǒng)的設計思路10</p><p> 3.1.1功能描述10</p><p> 3.1.2全局化描述11</p><p> 3.2 n資源n進程編程思路12</p><p> 3.2.1 函數(shù)分析12</p><p> 3.2.2 實例分析14</p
15、><p> 3.3 3資源3進程圖形界面編程思路15</p><p> 3.3.1 函數(shù)分析15</p><p> 3.3.2 實例分析16</p><p> 第四章 資源管理系統(tǒng)的功能分析17</p><p> 4.1資源管理系統(tǒng)的使用流程17</p><p> 4.2
16、 結果分析22</p><p> 第五章 實驗心得體會23</p><p><b> 參考文獻24</b></p><p><b> 附錄24</b></p><p> n進程n資源核心代碼24</p><p> 3資源3進程圖形界面核心代碼26<
17、/p><p><b> 第一章 引言</b></p><p> 1.1 資源管理系統(tǒng)的提出</p><p> 雖然進程在運行過程中,可能發(fā)生死鎖,但死鎖的發(fā)生也必須具備一定的條件,死鎖的發(fā)生必須具備以下四個必要條件。 </p><p> (1)互斥條件:指進程對所分配到的資源進行排它性使用,即在一段時間內某資源只由一
18、個進程占用。</p><p> ?。?)占有且等待:指進程已經(jīng)保持至少一個資源,但又提出了新的資源請求,而該資源已被其它進程占有,此時請求進程阻塞,但又對自己已獲得的其它資源保持不放。 </p><p> ?。?)非剝奪:指進程已獲得的資源,在未使用完之前,不能被其他進程強行剝奪。 </p><p> ?。?)循環(huán)等待:在系統(tǒng)中存在一個由若干進程形成的環(huán)形請求鏈,其
19、中的每一個進程均占有一些資源,同時又申請請求鏈中下一個進程所咱有的資源,如圖1-1.</p><p> 互斥,占有且等待,非剝奪這三個條件是死鎖產生的必要條件,但不是充分條件?;コ鈼l件是臨界資源固有的屬性,保證進程胡此訪問臨界資源是必要的,不能因為互斥會導致死鎖而禁止互斥。循環(huán)等待是前3個條件可能產生的結果,只有存在互斥,占有且等待與非剝奪三個條件時,才可能出現(xiàn)循環(huán)等待。只要系統(tǒng)出現(xiàn)了循環(huán)等待,則一定出現(xiàn)死鎖。
20、</p><p> 圖1-1 進程循環(huán)等待:死鎖</p><p> 銀行家算法是最有代表性的避免死鎖的算法,由于該算法能用于銀行系統(tǒng)現(xiàn)金貸款的發(fā)放而得名。其實現(xiàn)思想是:允許進程動態(tài)地申請資源,系統(tǒng)在每次實施資源分配之前,先計算資源分配的安全性,若此次資源分配安全(即資源分配后,系統(tǒng)能按某種順序來為每個進程分配其所需的資源,直至最大需求,使每個進程都可以順利地完成),便將資源分配給進程,
21、否則不分配資源,讓進程等待。</p><p> 此次課程設計實現(xiàn)了銀行家算法的模擬,即實現(xiàn)資源管理系統(tǒng)。</p><p> 1.2 課程設計的目的和意義 </p><p> 銀行家算法是避免死鎖的一種重要方法。通過編寫一個模擬動態(tài)資源分配的銀行家算法程序,進一步深入理解死鎖、產生死鎖的必要條件、安全狀態(tài)等重要概念,并掌握避免死鎖的具體實施方法。并且了解銀行家算
22、法的特點,掌握避免死鎖的方法。銀行家算法是一種最有代表性的避免死鎖的算法。在避免死鎖方法中允許進程動態(tài)地申請資源,但系統(tǒng)在進行資源分配之前,應先計算此次分配資源的安全性,若分配不會導致系統(tǒng)進入不安全狀態(tài),則分配,否則等待。為實現(xiàn)銀行家算法,系統(tǒng)必須設置若干數(shù)據(jù)結構。所以,通過編寫一個模擬動態(tài)資源分配的銀行家算法程序,進一步深入理解死鎖、產生死鎖的必要條件、安全狀態(tài)等重要概念,并掌握避免死鎖的具體實施方法。</p><
23、p> 操作系統(tǒng)是計算機系統(tǒng)的核心系統(tǒng)軟件,它負責控制和管理整個系統(tǒng)的資源并組織用戶協(xié)調使用這些資源,使計算機高效的工作。《操作系統(tǒng)課程設計》是《操作系統(tǒng)》理論課的必要補充,是復習和檢驗所學課程的重要手段,本課程設計的目的是綜合應用學生所學知識,通過實驗環(huán)節(jié),加深學生對操作系統(tǒng)基本原理和工作過程的理解,提高學生獨立分析問題、解決問題的能力,增強學生的動手能力。</p><p> 1.3課程設計的任務及要求
24、</p><p><b> 1)課程設計任務</b></p><p> 1.分析設計內容,給出解決方案(要說明設計實現(xiàn)的原理,采用的數(shù)據(jù)結構)。</p><p> 2.畫出程序的基本結構框圖和流程圖。</p><p> 3.對程序的每一部分要有詳細的設計分析說明。</p><p> 4.
25、源代碼格式要規(guī)范。</p><p> 5.設計合適的測試用例,對得到的運行結果要有分析。</p><p> 6.設計中遇到的問題,設計的心得體會。</p><p> 7.按期提交完整的程序代碼、可執(zhí)行程序和課程設計報告。</p><p><b> 2)課程設計要求</b></p><p>
26、 用VC編程實現(xiàn)一個資源管理系統(tǒng),該系統(tǒng)必須包括資源的添加、刪除和修改等功能,并且允許其它進程來申請這里的資源,任何一個進程來申請資源時,必須先登記該進程對資源的申請要求,然后由系統(tǒng)檢查當前資源的狀況,并用銀行家算法和安全性算法來檢查是否允許分配資源給進程。</p><p> 每個進程申請資源的情況必須進行記錄,并作為課程設計報告的一部分數(shù)據(jù)。</p><p><b> 3
27、)自主要求設計</b></p><p> ?。?)掌握銀行家算法的概念和工作原理;</p><p> ?。?)熟練掌握C#語言和c++語言的編程原理;</p><p> ?。?)實現(xiàn)基于銀行家算法的字符系統(tǒng)并且調用界面操作;</p><p> ?。?)運行程序,并合理分析實驗結果。</p><p> 資源
28、管理系統(tǒng)概要設計</p><p> 2.1 開發(fā)工具與相關技術</p><p> 銀行家算法是避免死鎖的一種重要方法,在本次課程設計中用C++和C#語言編寫一個資源管理系統(tǒng),并要用銀行家算法和安全性算法檢查是否允許分配資源給進程,避免死鎖。通過課程設計,加深了我對有關資源申請、避免死鎖等概念的了解,并且對銀行家算法和安全性算法有了更深一步的認識,進而提高了我的分析、解決問題的能力。下面
29、就開發(fā)工具介紹。</p><p> 2.1.1 面向對象編程語言C#</p><p> C Sharp(音標 [∫a:p] )(又被簡稱為"C#")是微軟公司在2000年6月發(fā)布的一種新的編程語言,并定于在微軟職業(yè)開發(fā)者論壇(PDC)上登臺亮相。C#是微軟公司研究員Anders Hejlsberg的最新成果。C#看起來與Java有著驚人的相似;它包括了諸如單一繼承、
30、界面、與Java幾乎同樣的語法,和編譯成中間代碼再運行的過程。但是C#與Java有著明顯的不同,它借鑒了Delphi的一個特點,與COM(組件對象模型)是直接集成的,而且它是微軟公司.NET windows網(wǎng)絡框架的主角。概括起來,C#開發(fā)有如下幾點優(yōu)勢。</p><p> ?、?快速應用開發(fā)(RAD)功能</p><p> 支持快速應用開發(fā)(Rapid Application Deve
31、lopment,RAD)可以說是目前開發(fā)語言最為重要的一大功能,這也正是C/C++的致命傷。網(wǎng)絡時代應用系統(tǒng)的開發(fā)必須按照網(wǎng)絡時代的速度來進行。支持快速開發(fā)可以使得開發(fā)人員的開發(fā)效率倍增,從而使得他們可以從繁重的重復性勞動中解放出來。C#的RAD功能之一是垃圾收集機制,它將減輕開發(fā)人員對內存的管理負擔。利用C#的這些功能,可以使開發(fā)者通過較少的代碼來實現(xiàn)更強大的應用程序,并且能夠更好地避免錯誤發(fā)生,從而縮短應用系統(tǒng)的開發(fā)周期。</
32、p><p><b> ② 語言的自由性</b></p><p> 用C#編寫的程序能最大程度地和任何支持.NET的語言互相交換信息。能夠繼承和使用任何語言所編寫的程序可以稱得上是知識的繼承,這樣做的好處是節(jié)省了大量的工作,而不必把COBOL等語言強行改成另一種語言,.NET讓各種語言真正地互相交流了。C#和其他.NET語言有著最好的協(xié)作,這點對開發(fā)人員非常重要。全球從
33、事編寫軟件的人當中,大約有50%以Visual Basic作為基本的編程工具。在跨入.NET編程時代的時候,這些人輕松地使用了VB.NET開發(fā)Web上的應用程序。想想以后你居然可以和你的那些只懂VB的同事真正在一起共同開發(fā).NET的應用程序,這是不是一件讓人輕松和高興的事情呢?</p><p> ③ 強大的Web服務器端組件</p><p> 在C#的Web編程中,最讓人興奮的是Web
34、服務器端的組件,它們不僅包括傳統(tǒng)組件,還包括那些能夠自動連接五花八門服務的可編程組件。你可以用C#編寫自己的服務器端組件。服務器端組件和標準的HTML提供的服務自然是不一樣的,使用它們可以更自由、更容易地進行數(shù)據(jù)綁定。更多服務器組件很快會出現(xiàn),有了這些強大的組件,我們可以設計出功能更加強大的企業(yè)級分布式應用系統(tǒng)。</p><p><b> ?、?支持跨平臺</b></p>&l
35、t;p> 隨著互聯(lián)網(wǎng)應用程序的應用越來越廣泛,人們逐漸意識到由于網(wǎng)絡系統(tǒng)錯綜復雜,使用的硬件設備和軟件系統(tǒng)各不相同,因此開發(fā)人員所設計的應用程序必須具有強大的跨平臺性。C#編寫的應用程序就具有強大的跨平臺性,這種跨平臺性也包括了C#程序的客戶端可以運行在不同類型的客戶端上,比如PDA、手機等非PC裝置中。</p><p><b> ⑤ 與XML的融合</b></p>
36、<p> 由于XML技術真正融入到了.NET和C#之中,C#的編程變成了真正意義上的網(wǎng)絡編程,甚至可以說.NET和C#是專為XML而設計的。使用C#的程序員可以輕松地用C#內含的類來使用XML技術。就這方面而言,C#給程序員提供了更多的自由和更好的性能來使用XML。</p><p><b> ?、?對C++的繼承</b></p><p> C#繼承并保留
37、了C++的強大功能,例如, C#保留了類型安全的檢測和重載功能,C#還提供了一些新功能取代了一些原來的ANSI C預處理程序的功能,提高了語言的類型安全等安全性。</p><p> 2.1.2 面向對象編程語言C++</p><p> C++設計成靜態(tài)類型、和C同樣高效且可移植的多用途程序設計語言。</p><p> C++設計成直接的和廣泛的支持多種程序設計
38、風格(程序化程序設計、資料抽象化、面向對象程序設計、泛型程序設計)。</p><p> C++設計成給程序設計者更多的選擇,即使可能導致程序設計者選擇錯誤,而且盡可能與C兼容,籍此提供一個從C到C++的平滑過渡。</p><p> C++避免平臺限定或沒有普遍用途的特性,而且?guī)в胁皇褂脮眍~外開銷的特性。</p><p> C++設計成無需復雜的程序設計環(huán)境
39、,出于保證語言的簡潔和運行高效等方面的考慮,C++的很多特性都是以庫(如STL)或其他的形式提供的,而沒有直接添加到語言本身里。</p><p><b> 2.2 銀行家算法</b></p><p><b> 銀行家算法的思路</b></p><p> 我們可以把操作系統(tǒng)看作是銀行家,操作系統(tǒng)管理的資源相當于銀行家管
40、理的資金,進程向操作系統(tǒng)請求分配資源相當于用戶向銀行家貸款。 </p><p> 為保證資金的安全,銀行家規(guī)定: </p><p> (1) 當一個顧客對資金的最大需求量不超過銀行家現(xiàn)有的資金時就可接納該顧客; </p><p> (2) 顧客可以分歧貸款,但貸款的總數(shù)不能超過最大需求量; </p><p> (3) 當銀行家現(xiàn)有的資
41、金不能滿足顧客尚需的貸款數(shù)額時,對顧客的貸款可推遲支付,但總能使顧客在有限的時間里得到貸款; </p><p> (4) 當顧客得到所需的全部資金后,一定能在有限的時間里歸還所有的資金. </p><p> 操作系統(tǒng)按照銀行家制定的規(guī)則為進程分配資源,當進程首次申請資源時,要測試該進程對資源的最大需求量,如果系統(tǒng)現(xiàn)存的資源可以滿足它的最大需求量則按當前的申請量分配資源,否則就推遲分配。
42、當進程在執(zhí)行中繼續(xù)申請資源時,先測試該進程已占用的資源數(shù)與本次申請的資源數(shù)之和是否超過了該進程對資源的最大需求量。若超過則拒絕分配資源,若沒有超過則再測試系統(tǒng)現(xiàn)存的資源能否滿足該進程尚需的最大資源量,若能滿足則按當前的申請量分配資源,否則也要推遲分配。</p><p> 先對用戶提出的請求進行合法性檢查,即檢查請求的是不大于需要的,是否不大于可利用的。若請求合法,則進行試分配。最后對試分配后的狀態(tài)調用安全性檢查
43、算法進行安全性檢查。若安全,則分配,否則,不分配,恢復原來狀態(tài),拒絕申請。</p><p> 2.銀行家算法中用到的主要數(shù)據(jù)結構</p><p> 可利用資源向量 int Available[j] j為資源的種類。</p><p> 最大需求矩陣 int Max[i][j] i為進程的數(shù)量。</p><p>
44、 分配矩陣 int Allocation[i][j] </p><p> 需求矩陣 int need[i][j]= Max[i][j]- Allocation[i][j]</p><p> 申請各類資源數(shù)量 int Request i[j] i進程申請j資源的數(shù)量</p><p> 工作向量 int
45、 Work[x] int Finish[y] </p><p> 3.銀行家算法bank()</p><p> 進程i發(fā)出請求申請k個j資源,Request i[j]=k </p><p> (1)檢查申請量是否不大于需求量:Request i[j]<=need[i,j],若條件不符重新輸入,不允許申請大于需求量。</p><p
46、> (2)檢查申請量是否小于系統(tǒng)中的可利用資源數(shù)量:Request i[j]<=available[i,j],若條件不符就申請失敗,阻塞該進程,用goto語句跳轉到重新申請資源。</p><p> (3)若以上兩個條件都滿足,則系統(tǒng)試探著將資源分配給申請的進程,并修改下面數(shù)據(jù)結構中的數(shù)值:</p><p> Available[i,j]= Available[i,j]-
47、Request i[j];</p><p> Allocation[i][j]= Allocation[i][j]+ Request i[j];</p><p> need[i][j]= need[i][j]- Request i[j];</p><p> (4)試分配后,執(zhí)行安全性檢查,調用safe()函數(shù)檢查此次資源分配后系統(tǒng)是否處于安全狀態(tài)。若安全,才正
48、式將資源分配給進程;否則本次試探分配作廢,恢復原來的資源分配狀態(tài),讓該進程等待。</p><p> (5)用do{…}while 循環(huán)語句實現(xiàn)輸入字符y/n判斷是否繼續(xù)進行資源申請。</p><p> 4.安全性檢查算法(safe()函數(shù))</p><p> (1)設置兩個向量:</p><p> 工作向量Work,它表示系統(tǒng)可提供給
49、進程繼續(xù)運行所需的各類資源數(shù)目,在執(zhí)行安全性算法開始時,Work= Available。</p><p> Finish,它表示系統(tǒng)是否有足夠的資源分配給進程,使之運行完成。開始時先做Finish[i]=0;當有足夠的資源分配給進程時,再令Finish[i]=1。</p><p> (2)在進程中查找符合以下條件的進程:</p><p> 條件1:Finish
50、[i]=0;</p><p> 條件2:need[i][j]<=Work[j]</p><p> 若找到,則執(zhí)行步驟(3)否則,執(zhí)行步驟(4)</p><p> (3)當進程獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應執(zhí)行:</p><p> Work[j]= Work[j]+ Allocation[i][j]
51、;</p><p> Finish[i]=1;</p><p> goto step 2;</p><p> 如果所有的Finish[i]=1都滿足,則表示系統(tǒng)處于安全狀態(tài),否則,處于不安全狀態(tài)。</p><p> 2.3銀行家算法流程圖</p><p> 2.3.a 請求資源分配算法圖 </p>
52、<p> 2.3.b 安全性算法圖 </p><p> 第三章 基于銀行家算法的資源管理系統(tǒng)詳細設計</p><p> 3.1 資源管理系統(tǒng)的設計思路</p><p><b> 3.1.1功能描述</b></p><p> n資源n進程doc界面功能</p><p>
53、用VC編程實現(xiàn)一個資源管理系統(tǒng),該系統(tǒng)必須包括資源的添加、刪除和修改等功能,并且允許其它進程來申請這里的資源,任何一個進程來申請資源時,必須先登記該進程對資源的申請要求,然后由系統(tǒng)檢查當前資源的狀況,并用銀行家算法和安全性算法來檢查是否允許分配資源給進程。每個進程申請資源的情況必須進行記錄,并作為課程設計報告的一部分數(shù)據(jù)。</p><p> 該分系統(tǒng)的功能主要包含7個模塊,分別為系統(tǒng)增加資源 ,系統(tǒng)刪除資源,系
54、統(tǒng)修改資源,進程請求分配資源,添加進程,顯示當前進程和資源關系和退出。</p><p> 1)系統(tǒng)增加資源 :當系統(tǒng)有新的資源時,添加資源種類的數(shù)目,然后輸入各種資源的名稱及其相應的數(shù)量;</p><p> 2)系統(tǒng)刪除資源:當系統(tǒng)需要刪除某些不要用的資源時,根據(jù)提示輸入需要刪除的資源名稱;</p><p> 3)系統(tǒng)修改資源:當系統(tǒng)資源的數(shù)目有變化時,可以
55、根據(jù)需要重新設置系統(tǒng)的可用資源;</p><p> 4)進程請求分配資源:當有新的作業(yè)到來或則正在執(zhí)行的進程申請資源時,系統(tǒng)可以根據(jù)系統(tǒng)資源的情況適當?shù)姆峙洌?lt;/p><p> 5)添加進程:當有新的進程到來時,必須按照要求輸入該作業(yè)對系統(tǒng)資源的最打需求量。</p><p> 6)顯示當前進程和資源關系 :用于顯示當前的進程已經(jīng)分配的資源。</p>
56、<p> 7)退出:退出系統(tǒng).</p><p> (2)3資源3進程圖像界面功能</p><p> 用C#編程實現(xiàn)一個資源管理系統(tǒng),介于界面的和諧,采用固定的資源類數(shù)和進程數(shù)量,但是每個進程分配的數(shù)量,以及系統(tǒng)對應類別數(shù)量可以自己設定,任個進程來申請資源時,必須先登記該進程對資源的申請要求,然后由系統(tǒng)檢查當前資源的狀況。</p><p> 該分
57、系統(tǒng)的功能主要包含2個模塊,分別為安全性算法來檢查和請求資源檢查。</p><p> 1)安全性算法來檢查 :對當前的資源分配給出安全序列;</p><p> 2)請求資源檢查:響應某個進程的資源分配請求;</p><p> 3.1.2全局化描述</p><p> (1)doc界面調用圖形界面</p><p>
58、 對于doc界面調用圖形界面只需要使用如下函數(shù)即可:</p><p> void jiemianshiliMenu()</p><p><b> {</b></p><p> system("cls");</p><p> system("F:\\oskeshezhongying\
59、\caozhuoxitong\\caozhuoxitong\\bin\\Debug\\caozhuoxitong.exe");//系統(tǒng)調用exe</p><p> system("cls");</p><p><b> }</b></p><p><b> 界面切換</b></p&
60、gt;<p> 對于界面切換只需要使用如下函數(shù)即可:</p><p> cout<<"\t請選擇:";</p><p> cin>>choice;</p><p> switch(choice)</p><p><b> { </b></p>
61、<p> case '1': threeMenu();break;</p><p> case '2': renyiMenu();break;</p><p> case '3': jiemianshiliMenu();break;</p><p> case '4': jiemi
62、anduoMenu();break;</p><p> case '0': system("cls"); choice=0;break;</p><p> default: cout<<"請正確選擇功能號(0-4)!"<<endl;break;</p><p><b>
63、}</b></p><p> 3.2 n資源n進程編程思路</p><p> 3.2.1 函數(shù)分析</p><p> 在程序中設計五個進程,分別為0, 1, 2, 3, 4。共享三類資源A,B,C。在這個資源管理系統(tǒng)中對進程的所需最大資源(Max)、已分配給當前進程資源(Allocation)和系統(tǒng)可用資源(Available)分別進行
64、了初始化了值。進程可動態(tài)地申請資源和釋放資源,系統(tǒng)按各進程的申請動態(tài)地分配資源。要求程序具有顯示和打印各進程的某一時刻的資源分配表和安全序列,若分配不安全,則釋放分配的資源,防止使系統(tǒng)進入不安全狀態(tài)。顯示和打印各進程依次要求申請的資源號以及為某進程分配資源后的有關資源數(shù)據(jù)。程序還可以實現(xiàn)對系統(tǒng)資源的增加,修改,刪除;</p><p> 在程序設計當中,涉及到8個子函數(shù),分別為showdata() , chang
65、edata (), share() , safe(), chang ereso urces(), addresources (), delresouces(), addprocess();各個函數(shù)的具體功能如下:</p><p> Showdata()函數(shù):此函數(shù)用來顯示目前系統(tǒng)可用資源的數(shù)量Avaiable,和各個進程對系統(tǒng)資源的最大需求量Max,已經(jīng)申請的資源量Allocation及還需要的資源良Ne
66、ed.</p><p> Changedata()函數(shù):此函數(shù)主要是用來改變系統(tǒng)可供資源Available向量和進程的分配向量Allocation及需求向量Need.</p><p> Share()函數(shù):此函數(shù)的功能是用來實現(xiàn)銀行家算法,當某個進程Pi發(fā)出資源請求向量時,首先檢查Request[i]是否小于等于Need[i][j],正確的話再判斷Request[i]是否小于等于Ava
67、ilable[j],否則提示所申請的值大于它所求的資源數(shù)量或則申請的值大于系統(tǒng)可提供資源的數(shù)量.</p><p> Safe()函數(shù):此函數(shù)是用來實現(xiàn)安全性算法,用來對資源的分配進行安全性檢測。首先設置兩個向量:工作向量Work和Finish,Work表示系統(tǒng)可提供給進程繼續(xù)運行所需的各類資源數(shù)目,初始值為Available;Finish表示系統(tǒng)是否有足夠的資源分配給進程,使之運行完成。然后從進程集合中找到一個
68、滿足條件為Finish[i]=false和Need[i][j]<=Work[j]的進程,如找到了,當進程Pi獲得資源后,可順利完成,并釋放出分配給它的資源;如果所有進程的Finish[i]=true,則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài).</p><p> Changeresources()函數(shù):此函數(shù)是用來修改系統(tǒng)可利用資源的數(shù)量,開始輸出目前系統(tǒng)可用資源的數(shù)量,然后要求輸入新的.</
69、p><p> Addresources()函數(shù):此函數(shù)是用來增加系統(tǒng)新資源,按照要求輸入需要添加資源的數(shù)量,然后按照其提示一一輸入資源的名稱和數(shù)量.</p><p> Delresources()函數(shù):此函數(shù)是用來刪除系統(tǒng)某些不需要的資源.</p><p> Addprocess()函數(shù):此函數(shù)是用來添加新的作業(yè),添加時,要求輸入該作業(yè)的最大資源需求良Max.&l
70、t;/p><p> 3.2.a n資源n進程的流程圖</p><p> 3.2.2 實例分析</p><p> n資源n進程安全性算法舉例:</p><p> int safe()//安全性算法</p><p><b> {</b></p><p> int i,
71、k=0,m,apply,Finish[100]={0};</p><p><b> int j;</b></p><p> int flag=0;</p><p> Work[0]=Avaliable[0];</p><p> Work[1]=Avaliable[1];</p><p>
72、 Work[2]=Avaliable[2];</p><p> for(i=0;i<M;i++){ </p><p><b> apply=0;</b></p><p> for(j=0;j<N;j++){</p><p> if (Finish[i]==False&&Need[i][
73、j]<=Work[j]){ </p><p><b> apply++;</b></p><p> if(apply==N){</p><p> for(m=0;m<N;m++)</p><p> Work[m]=Work[m]+Allocation[i][m];//變分配數(shù)</p>
74、<p> Finish[i]=True;</p><p> temp[k]=i;</p><p><b> i=-1; </b></p><p><b> k++;</b></p><p><b> flag++;</b></p><p
75、><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> 3.3 3資源3進程圖形界面編程思路</p><p>
76、 3.3.1 函數(shù)分析</p><p> 在程序中設計五個進程,分別為0, 1, 2。共享三類資源a,b,c。在這個資源管理系統(tǒng)中對進程的所需最大資源(Max)、已分配給當前進程資源(Allocation)和系統(tǒng)可用資源(Available)分別進行了初始化了值。進程可動態(tài)地申請資源和釋放資源,系統(tǒng)按各進程的申請動態(tài)地分配資源。要求程序具有顯示和打印各進程的某一時刻的資源分配表和安全序列,若分配不安全,則釋
77、放分配的資源,防止使系統(tǒng)進入不安全狀態(tài)。顯示和打印分配序列,各進程請求資源是否允許,當前系統(tǒng)資源剩余量。在程序設計當中,涉及到8個子函數(shù),分別為sharefuzhi(), changedata (), share() , safe(), xianshikeyong(), fuzhi(), yuzhishu(), yuzhishu2();各個函數(shù)的具體功能如下:</p><p> sharefuzhi()
78、函數(shù):此函數(shù)用來對進程號p和request[i]進行賦值操作</p><p> Changedata()函數(shù):此函數(shù)主要是用來改變系統(tǒng)可供資源Available向量和進程的分配向量Allocation及需求向量Need.</p><p> Share()函數(shù):此函數(shù)的功能是用來實現(xiàn)銀行家算法,當某個進程Pi發(fā)出資源請求向量時,首先檢查Request[i]是否小于等于Need[i][j]
79、,正確的話再判斷Request[i]是否小于等于Available[j],否則提示所申請的值大于它所求的資源數(shù)量或則申請的值大于系統(tǒng)可提供資源的數(shù)量.</p><p> Safe()函數(shù):此函數(shù)是用來實現(xiàn)安全性算法,用來對資源的分配進行安全性檢測。首先設置兩個向量:工作向量Work和Finish,Work表示系統(tǒng)可提供給進程繼續(xù)運行所需的各類資源數(shù)目,初始值為Available;Finish表示系統(tǒng)是否有足夠的
80、資源分配給進程,使之運行完成。然后從進程集合中找到一個滿足條件為Finish[i]=false和Need[i][j]<=Work[j]的進程,如找到了,當進程Pi獲得資源后,可順利完成,并釋放出分配給它的資源;如果所有進程的Finish[i]=true,則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài).</p><p> xianshikeyong()函數(shù):此函數(shù)是用來顯示系統(tǒng)可利用資源available
81、的數(shù)量,并且顯示到相應的界面.</p><p> fuzhi()函數(shù):此函數(shù)是用來對系統(tǒng)初值available,進程所需要的最大資源量max,進程已經(jīng)分配的資源量allocation,進程還需要的資源量need進行賦值.</p><p> yuzhishu()函數(shù):此函數(shù)是用來對界面資源控件顯示第一類初值.</p><p> yuzhishu2()函數(shù):此函數(shù)
82、是用來對界面資源控件顯示第二類初值.</p><p> 3.3.2 實例分析</p><p> 3資源3進程安全性算法舉例:</p><p> public void share( )</p><p><b> {</b></p><p> int j; int d = 0;</p
83、><p> for (j = 0; j < 3; j++)</p><p><b> {</b></p><p> if (request[j] > need[p, j])</p><p><b> {</b></p><p> MessageBox.Sho
84、w("申請的資源大于它需要的資源,不分配");</p><p><b> d = 1;</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> else</b>&l
85、t;/p><p><b> {</b></p><p> if (request[j] > available[j])</p><p><b> {</b></p><p> MessageBox.Show("申請資源大于系統(tǒng)現(xiàn)在可利用的資源,不分配");</p&
86、gt;<p><b> d=1;</b></p><p><b> break;}}</b></p><p><b> }</b></p><p><b> if(d==0)</b></p><p> //MessageBox.Sh
87、ow("成功分配");</p><p> if (d == 0)</p><p><b> {</b></p><p> MessageBox.Show("數(shù)量上可以分配");</p><p><b> int t;</b></p>&l
88、t;p> for (t = 0; t < 3; t++)</p><p><b> {</b></p><p> available[t] = available[t] - request[t];</p><p><b> }</b></p><p><b> key
89、 = 0;</b></p><p><b> safe();</b></p><p> if (key == 0)</p><p><b> {</b></p><p> for (t = 0; t < 3; t++)</p><p> { ava
90、ilable[t] = available[t] + request[t]; }</p><p> MessageBox.Show("數(shù)量上可以分配,但不安全不分配");</p><p><b> }</b></p><p><b> else</b></p><p>
91、MessageBox.Show("成功分配"); } }</p><p> 第四章 資源管理系統(tǒng)的功能分析</p><p> 4.1資源管理系統(tǒng)的使用流程</p><p> 以下是資源管理系統(tǒng)的登錄之后的操作主界面:</p><p> 4 .1.b 資源管理系統(tǒng)的操作主界面</p><p&g
92、t; 以下是資源管理系統(tǒng)的操作主界面選擇指定3類資源界面算法:</p><p> 4 .1.c 資源管理系統(tǒng)的指定3類資源界面</p><p> 以下是資源管理系統(tǒng)的操作主界面選擇指定3類資源界面算法繼續(xù):</p><p> 4 .1.d 資源管理系統(tǒng)的指定3類資源界面</p><p> 以下是資源管理系統(tǒng)的操作主界面選擇任意
93、資源任意進程界面算法:</p><p> 4 .1.e 資源管理系統(tǒng)的任意資源任意進程界面</p><p> 以下是資源管理系統(tǒng)的操作主界面選擇任意資源任意進程界面算法繼續(xù):</p><p> 4 .1.f 資源管理系統(tǒng)的任意資源任意進程界面</p><p> 以下是資源管理系統(tǒng)的操作主界面選擇任意資源任意進程添加資源界面算法:
94、</p><p> 4 .1.g 資源管理系統(tǒng)的添加資源界面</p><p> 以下是資源管理系統(tǒng)的操作主界面選擇任意資源任意進程修改資源界面算法:</p><p> 4 .1.h 資源管理系統(tǒng)的修改資源界面</p><p> 以下是資源管理系統(tǒng)的操作主界面選擇3資源3進程界面安全算法:</p><p>
95、 4 .1.i 資源管理系統(tǒng)的3資源3進程安全算法界面</p><p> 以下是資源管理系統(tǒng)的操作主界面選擇3資源3進程界面安全算法繼續(xù):</p><p> 改變分配參數(shù),得到不同的分配序列:</p><p> 4 .1.j 資源管理系統(tǒng)的3資源3進程安全算法界面</p><p> 以下是資源管理系統(tǒng)的操作主界面選擇3資源3進程
96、界面分配算法:</p><p><b> 如圖可知:</b></p><p> 當進程0請求a,b,c類資源分別為7,5,4時,資源管理系統(tǒng)的分配算法給出“申請資源大于系統(tǒng)先自愛可利用的資源,不分配”的提示</p><p> 4 .1.k 資源管理系統(tǒng)的3資源3進程分配算法界面</p><p><b>
97、 4.2 結果分析</b></p><p> 根據(jù)以上程序的執(zhí)行情況可知,實現(xiàn)了:用VC編程實現(xiàn)一個資源管理系統(tǒng),該系統(tǒng)必須包括資源的添加、刪除和修改等功能,并且允許其它進程來申請這里的資源,任何一個進程來申請資源時,必須先登記該進程對資源的申請要求,然后由系統(tǒng)檢查當前資源的狀況,并用銀行家算法和安全性算法來檢查是否允許分配資源給進程,達到了預期的目標。</p><p>
98、 第五章 實驗心得體會</p><p> 通過一個星期的課程設計,我受益匪淺。本次課程設計是利用C#和C++編寫的。首先,我復習了之前學的C#圖形界面知識,弄懂了C#編程的方法和規(guī)則。其次,更加全面的了解并掌握銀行家算法的概念和工作原理。本次課程設計實現(xiàn)了資源管理系統(tǒng)。從一點點思想到流程圖再到整個程序的編寫,調試,無一不花費了我許多的精力。看著自己的勞動果實,反倒十分的欣慰,更認識到自己的不足。今后的學習過程中
99、要不斷的積累經(jīng)驗,開闊思維以得到提高。</p><p> 通過學習了解到銀行家算法是一種最有代表性的避免死鎖的算法。在避免死鎖方法中允許進程動態(tài)地申請資源,但系統(tǒng)在進行資源分配之前,應先計算此次分配資源的安全性,若分配不會導致系統(tǒng)進入不安全狀態(tài),則分配,否則等待。為實現(xiàn)銀行家算法,系統(tǒng)必須設置若干數(shù)據(jù)結構。</p><p> 此算法的中心思想是:按該法分配資源時,每次分配后總存在著一個
100、進程,如果讓它單獨運行下去,必然可以獲得它所需要的全部資源,也就是說,它能結束,而它結束后可以歸還這類資源以滿足其他申請者的需要。</p><p> 本次程序就是按照上面的思路展開的,但是因為時間上的倉促,本課程設計的存在著以下不足:一、不能實現(xiàn)并發(fā)操作,即當總資源同時滿足幾個進程所需要的資源數(shù)時,這些進程不能同時進行,只能一一按進程順序執(zhí)行。二、掃描進程順序單一,只能按進程到來的順序(即編號)來掃描,從而產生
101、的安全順序只能是在這個順序的基礎上產生的,而其實安全順序是有多個的。三、有界面的對進程數(shù)和資源數(shù)進行的數(shù)量進行了限制。四、統(tǒng)一性不夠好,運行程序后,界面不夠好,不能在統(tǒng)一界面上實現(xiàn)。</p><p> 在這次的課程設計中我還領悟了一個重大的問題:在開發(fā)一個軟件的過程中,把整個系統(tǒng)的框架準確的描述出來是非常重要的,因為我們后面的編碼式樣在整個系統(tǒng)框架的基礎之上進行的。</p><p>
102、總而言之,課程設計的過程就是一個汲取知識的過程,從中受益匪淺,通過這次課程設計使我懂得了理論與實踐相結合的重要性,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐結合起來,從實踐中得出結論,才能真正的提高。</p><p><b> 參考文獻</b></p><p> [1]湯子瀛《計算機操作系統(tǒng)》(第三版)西安電子科技大學出版社 2007.</p>
103、;<p> [2]張堯學 史美林 《計算機操作系統(tǒng)教程》實驗指導 清華大學出版社 2000.</p><p> [3]錢哨 李繼哲 李揮劍《 C# WinForm上機實訓指導》 中國水利水電出版社 2010.</p><p> [4]嚴蔚敏,吳偉民.數(shù)據(jù)結構. 北京:清華大學出版社,2006.</p><p><b> 附錄<
104、/b></p><p> n進程n資源核心代碼</p><p> int changdata(int i)//進行資源分配</p><p><b> { </b></p><p><b> int j;</b></p><p> for (j=0;j<M
105、;j++) {</p><p> Avaliable[j]=Avaliable[j]-Request[j];</p><p> Allocation[i][j]=Allocation[i][j]+Request[j];</p><p> Need[i][j]=Need[i][j]-Request[j];</p><p><b>
106、; }</b></p><p><b> return 1;</b></p><p><b> }</b></p><p> int safe()//安全性算法</p><p><b> {</b></p><p> int i,
107、k=0,m,apply,Finish[100]={0};</p><p><b> int j;</b></p><p> int flag=0;</p><p> Work[0]=Avaliable[0];</p><p> Work[1]=Avaliable[1];</p><p>
108、 Work[2]=Avaliable[2];</p><p> for(i=0;i<M;i++){ </p><p><b> apply=0;</b></p><p> for(j=0;j<N;j++){</p><p> if (Finish[i]==False&&Need[i][
109、j]<=Work[j]){ </p><p><b> apply++;</b></p><p> if(apply==N){</p><p> for(m=0;m<N;m++)</p><p> Work[m]=Work[m]+Allocation[i][m];//變分配數(shù)</p>
110、<p> Finish[i]=True;</p><p> temp[k]=i;</p><p><b> i=-1; </b></p><p><b> k++;</b></p><p><b> flag++;</b></p><p
111、><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> for(i=0;i<M;i++){</p><p>
112、 if(Finish[i]==False){</p><p> cout<<"系統(tǒng)存在不安全"<<endl;//不成功系統(tǒng)不安全</p><p> return -1;</p><p><b> }</b></p><p><b> }</b>&l
113、t;/p><p> cout<<"系統(tǒng)檢查是安全的!"<<endl;//如果安全,輸出成功</p><p> cout<<"安全分配的序列:";</p><p> for(i=0;i<M;i++){//輸出運行進程數(shù)組</p><p> cout<&l
114、t;"p"<<temp[i];</p><p> if(i<M-1) cout<<"->";</p><p><b> }</b></p><p> cout<<endl;</p><p><b> return 0
115、;</b></p><p><b> }</b></p><p> void share()//利用銀行家算法對申請資源對進行判定</p><p><b> {</b></p><p><b> char ch;</b></p><p&g
116、t; int i=0,j=0;</p><p><b> ch='y';</b></p><p> cout<<"請輸入要求分配的資源進程號(0-"<<M-1<<"):"; </p><p> cin>>i;//輸入須申請的資源號&l
117、t;/p><p> cout<<"請輸入進程 "<<i<<" 申請的資源:"<<endl;</p><p> for(j=0;j<N;j++)</p><p><b> {</b></p><p> cout<<
118、name[j]<<":";</p><p> cin>>Request[j];//輸入需要申請的資源</p><p><b> }</b></p><p> for (j=0;j<N;j++){</p><p> if(Request[j]>Need[i][
119、j])//判斷申請是否大于需求,若大于則出錯</p><p><b> { </b></p><p> cout<<"進程 "<<i<<"申請的資源大于它需要的資源";</p><p> cout<<" 分配不合理,不予分配!"&l
120、t;<endl;</p><p><b> ch='n';</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> else {</b></p>&
121、lt;p> if(Request[j]>Avaliable[j])//判斷申請是否大于當前資源,若大于則</p><p> { //出錯</p><p> cout<<"進程"<<i<<"申請的資源大于系統(tǒng)現(xiàn)在可利用的資源";</p>
122、<p> cout<<" 分配出錯,不予分配!"<<endl;</p><p><b> ch='n';</b></p><p><b> break;</b></p><p><b> }</b></p>&
123、lt;p><b> }</b></p><p><b> }</b></p><p> if(ch=='y') {</p><p> changdata(i);//根據(jù)進程需求量變換資源</p><p> showdata();//根據(jù)進程需求量顯示變換后的資源<
124、;/p><p> safe();//根據(jù)進程需求量進行銀行家算法判斷</p><p><b> }</b></p><p><b> }</b></p><p> 3資源3進程圖形界面核心代碼</p><p> public int changdata(int i)&l
125、t;/p><p><b> {</b></p><p><b> int j;</b></p><p> for (j = 0; j < m; j++)</p><p><b> {</b></p><p> available[j] = a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設計——操作系統(tǒng)課程設計模擬操作系統(tǒng)
- 操作系統(tǒng)課程設計---操作系統(tǒng)之文件管理部分的設計與實現(xiàn)
- 操作系統(tǒng)課程設計--模擬操作系統(tǒng)的實現(xiàn)
- 操作系統(tǒng)課程設計---geekos操作系統(tǒng)的研究與實現(xiàn)
- 操作系統(tǒng)課程設計-- geekos操作系統(tǒng)的研究與實現(xiàn)
- 內存管理(操作系統(tǒng))操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計-- 操作系統(tǒng)
- 操作系統(tǒng)課程設計報告---文件資源管理器
- 操作系統(tǒng)課程設計--臨界區(qū)管理實現(xiàn)
- 操作系統(tǒng)文件系統(tǒng)的設計與實現(xiàn)課程設計
- 操作系統(tǒng)程序設計課程設計報告-操作系統(tǒng)模擬實現(xiàn)
- 操作系統(tǒng)課程設計---文件管理系統(tǒng)設計
- 操作系統(tǒng)課程設計---進程管理系統(tǒng)
- 操作系統(tǒng)課程設計--文件管理系統(tǒng)
- 操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計
評論
0/150
提交評論