課程設計報告書
課程名稱:
操作系統原理
題
目:
編程序模擬銀行家算法
系
名:
信息工程系
專業班級:
軟件
姓
名:
學
號:
指導教師:
2013年
X
月
X
日
學院信息工程系
課
程
設
計
任
務
書
課程名稱:
操作系統原理課程設計
指導教師:
班級名稱:
軟件
開課系、教研室:
軟件與信息安全
一、課程設計目的與任務
操作系統課程設計是《操作系統原理》課程的后續實踐課程,旨在通過一周的實踐訓練,加深學生對理論課程中操作系統概念,原理和方法的理解,加強學生綜合運用操作系統原理、Linux系統、C語言程序設計技術進行實際問題處理的能力,進一步提高學生進行分析問題和解決問題的能力,包含系統分析、系統設計、系統實現和系統測試的能力。
學生將在指導老師的指導下,完成從需求分析,系統設計,編碼到測試的全過程。
二、課程設計的內容與基本要求
1、課程設計題目
編程序模擬銀行家算法
2、課程設計內容
本課程設計要求在Linux操作系統,GCC編譯環境下開發。
銀行家算法是避免死鎖的一種重要方法,本實驗要求用用c/c++語言在Linux操作系統環境下編寫和調試一個簡單的銀行家算法程序。加深了解有關資源申請、避免死鎖等概念,并體會和了解死鎖和避免死鎖的具體實施方法。
思想:將一定數量的資金供多個用戶周轉使用,當用戶對資金的最大申請量不超過現存資金時可接納一個新客戶,客戶可以分期借款,但借款總數不能超過最大的申請量。銀行家對客戶的借款可以推遲支付,但是能夠使客戶在有限的時間內得到借款,客戶得到所有的借款后能在有限的時間內歸還。用銀行家算法分配資源時,測試進程對資源的最大需求量,若現存資源能滿足最大需求就滿足當前進程的申請,否則推遲分配,這樣能夠保證至少有一個進程可以得到所需的全部資源而執行到結束,然后歸還資源,若OS能保證所有進程在有限的時間內得到所需資源則稱系統處于安全狀態。
3、設計報告撰寫格式要求:
1設計題目與要求
設計思想
3系統結構
數據結構的說明和模塊的算法流程圖
使用說明書(即用戶手冊):內容包含如何登錄、退出、讀、寫等操作說明
運行結果和結果分析(其中包括實驗的檢查結果、程序的運行情況)
自我評價與總結
附錄:程序清單,注意加注釋(包括關鍵字、方法、變量等),在每個模塊前加注釋;
三、課程設計步驟及時間進度和場地安排
本課程設計將安排在第15周,教育技術中心。具體安排如下:
第一天
下發任務書,學生查閱資料
第二天
系統設計和原型開發
第三,四天
系統功能實現
第五天
系統調試
測試
打包和驗收
四、課程設計考核及評分標準
課程設計考核將綜合考慮學生考勤和參與度,系統設計方案正確性,系統設計和開發效果以及課程設計報告書的質量。具體評分標準如下:
設置六個評分點
(1)設計方案正確,具有可行性、創新性;
25分
(2)系統開發效果較好;
25分
(3)態度認真、刻苦鉆研、遵守紀律;
10分
(4)設計報告規范、課程設計報告質量高、參考文獻充分
20分
(5)課程設計答辯概念清晰,內容正確
10分
(6)課程設計期間的課堂考勤、答疑與統籌考慮。
10分
按上述六項分別記分后求和,總分按五級記分法記載最后成績。
優秀(100~90分),良好(80~89分),中等(70~79分),及格(60~69分),不及格(0~59分)
1.題目要求與實驗目的1.1
實驗目的:
1.1.1進一步理解利用銀行家算法避免死鎖的問題;
1.1.2在了解和掌握銀行家算法。
1.1.3理解和掌握安全序列、安全性算法
1.2
設計題目:
編程序模擬銀行家算法
1.3
要求
:
本實驗要求用用
c/c語言在Linux
操作系統環境下編寫和調試一個簡單的銀行家算法程序。加深了解有關資源申請、避免死鎖等概念,并體會和了解死鎖和避免死鎖的具體實施方法。
1.4
實驗內容
:
1.4.1編寫安全性算法;
1.4.2編寫銀行家算法,并編制銀行家算法通用程序,將調試結果顯示在計算機屏幕上,再檢測和筆算的一致性。
設計思想
將一定數量的資金供多個用戶周轉使用,當用戶對資金的最大申請量不超過現存資金時可接納一個新客戶,客戶可以分期借款,但借款總數不能超過最大的申請量。銀行家對客戶的借款可以推遲支付,但是能夠使客戶在有限的時間內得到借款,客戶得到所有的借款后能在有限的時間內歸還。
用銀行家算法分配資源時,測試進程對資源的最大需求量,若現存資源能滿足最大需求就滿足當前進程的申請,否則推遲分配,這樣能夠保證至少有一個進程可以得到所需的全部資源而執行到結束,然后歸還資源,若OS能保證所有進程在有限的時間內得到所需資源則稱系統處于安全狀態。
3.需求分析
3.1問題描述:利用銀行家算法模擬計算機系統分配資源的過程。
3.2要求:
3.2.11、以課本例題中數據為例,模擬資源分配過程。
3.2.2、系統中資源種類,各類資源數目,進程申請資源數目可任意輸入,模擬資源分配過程。
4.系統結構
初始化函數init()開始
輸入進程的數目m
輸入資源種類n
輸入每個進程最多所需的各種資源數
輸入每個進程分配的資源數
輸入各個資源現有數目
初始化函數init()結束
輸入提示:
輸入有誤重新輸入
圖
5.數據結構的說明和模塊的算法流程圖
5.1
數據結構:
①可利用資源向量
Available
是個含有
m
個元素的數組,其中的每一個元素代表一類可利用的資源數目。如果
AvailablejK,則表示系統中現有
Rj
類資源
K
個。
②最大需求矩陣
Max
這是一個
n×m的矩陣,它定義了系統中
n
個進程中的每一個進程對
m
類資源的最大需求。如果
MaxijK,則表示進程
i
需要
Rj
類資源的最大數目為
K。
③分配矩陣
Allocation
這也是一個
n×m的矩陣,它定義了系統中每一類資源當前已分配給每一進程的資源數。如果
AllocationijK,則表示進程
i
當前已分得
Rj
類資源的數目為
K。
④需求矩陣
Need。
這也是一個
n×m的矩陣,用以表示每一個進程尚需的各類資源數。如果NeedijK,則表示進程
i
還需要
Rj
類資源
K
個,才可以完成其任務。
5.2
程序流程圖:
①、系統主要過程流程
預分配
安全?
實際分配打印輸出
退出系統
Request[i]>Available[i]?
Request[i]>need[i]?
提出申請
打印輸出此時刻資源分配情況
進入系統
輸入:
1.繼續分配
2.退出
進入初始化
②、安全性算法流程圖
調用safty()函數
Work[]=Available[],Finish[]=False
Need[]<=work[]且Finsh[]=Falsse?
Work[]=work[]+Alloccation[],Finish[]=Ture
所有進程的Finsh[]=Ture?
實際分配輸出安全序列并打印出
輸出提示系統不安全
調用結束
用戶手冊
6.1
首先在終端中使用
vi
編輯器建立
c的源文件
6.2
然后使用
gcc
編輯器編譯生成可執行文件
6.3
使用命令./當前名字,來執行
7.運行結果和結果分析
7.1
運行結果:
申請成功如圖
2,申請失敗如圖
3:
圖
申請金額在需求范圍之內同意
圖
申請金額在需求范圍之外拒絕
7.2
結果分析
首先是自己定義
個用戶所需的金額數,銀行可以給用戶貸款的總金額數是100,用戶
Id
號的范圍是在0
到
4,超過
之后的id
請求貸款,會顯示拒絕提示信息,每個客戶的貸款數量必須是在之前定義的范圍之內,如果超出,也會出現錯誤提示,只有在規定的用戶
id
和在客戶所要求金額的范圍之內請求,才會給予貸款,并且輸出安全序列號。
8.自我評價與總結
一周的課程設計結束了。在這一周里,我收獲很多,以前都是在自己的教室由我們自己的老師進行講課,這次學校沒有這樣做,而是請的校外的老師給我們做課程設計,讓我們體會一下真正的公司是怎樣做業務的。在這一周里我做一個模擬銀行家算法。我覺得在著手設計前設計的思路是很重要的。只有思路清晰才能進行下一階段的設計。這樣才能完成整個程序的設計,完成整個文報告的書寫。
課程設計這幾天學到的東西還真不少。以前不清楚的現在都暴露出來了。以前認為學了沒用的東西現在也用到了。這次的課程設計使我進一步了解了調度與死鎖的問題。以及有關資源申請的問題、避免死鎖的具體實施方法。深入了解了銀行家算法的資源申請和資源分配的過程及原則。保證系統處于安全狀態。
經過本周的課程設計,我對操作系統的掌握又進了一步,收獲了很多知識。,終于我了由于對
c
語言不夠熟練,在試驗過程中,進行了反復的修改和調試,解銀行家算法的基本原理,并且在此次的課程設計中我又復習了一下
c
語言,加深了對它的了解,而且在課程設計的過程中我們同樣學會了如何簡單的操作與使用
Linux
操作系統,學習到了許多
Linux
操作系統中常用的一些密令。
這次的設計數據是通過一道實際的題目來體現銀行家算法避免死鎖的問題,先用銀行家算法給其中一個進程分配資源,看它所請求的資源是否大于它的需求量,才和系統所能給的資源相比較.讓進程形成一個安全隊列看系統是否安全.再利用安全性算法檢查此時系統是否安全。
操作系統的基本特征是并發與共享。系統允許多個進程并發執行,并且共享系統的軟、硬件資源。為了最大限度的利用計算機系統的資源,操作系統應采用動態分配的策略,但是這樣就容易因資源不足,分配不當而引起“死鎖”。而我本次課程設計就是得用銀行家算法來避免“死鎖”。銀行家算法就是一個分配資源的過程,使分配的序列不會產生死鎖。此算法的中心思想是:按該法分配資源時,每次分配后總存在著一個進程,如果讓它單獨運行下去,必然可以獲得它所需要的全部資源,也就是說,它能結束,而它結束后可以歸還這類資源以滿足其他申請者的需要。
通過這次實驗,我體會到銀行家算法的重要性,銀行家算法是避免死鎖的主要方法,其思路在很多方面都非常值得我來學習借鑒。
附錄:
主要源程序
參考文獻
[1]
張堯學主編.計算機操作系統教程(第三版).北京:清華大學出版社,2006
[2]
張堯學編.計算機操作系統教程(第三版)習題解答與實驗指導.北京:清華大學出版社,2006
[3]
湯子瀛主編.計算機操作系統(第三版).西安:西安電子科技大學出版社,2001
[4]
張坤等編.操作系統實驗教程.北京:清華大學出版社,2008
[5]
張麗芬等編.操作系統實驗教程.北京:清華大學出版社,2006
[6]
屠祁等編.操作系統基礎(第三版).北京:清華大學出版社,2000
[7]
馮耀霖等編.操作系統.西安:西安電子科技大學出版社,2001
[8]
左萬歷.計算機操作系統教程(第二版).北京:高等教育出版社,2004
[9]譚浩強.《C語言程序設計》.北京:清華大學出版社2003
[8]
龐麗華.《操作系統原理》(第四版).北京.華中科技大學出版社
2002
設計過程中質疑(或答辯)記載:
1.銀行家算法的主要思想是什么?
答:一個進程進入系統時分配資源之前,判斷系統是否是安全的,即看它所請求的資源是否大于它的最大需求量,若正常,則判斷該進程所需剩余剩余量(包括本次申請)是否超出系統所掌握的剩余資源量,若不超出,則分配,否則等待。
2.銀行家算法的主要問題是什么?
答:要求每個進程必須事先知道資源的最大需求量,而且,在系統運行過程中,考查每個進程對各類資源的申請需花費較多的時間。
3.在銀行家算法中各個資源存在什么關系?
答:該進程所需要的資源數NEED[m][n]=MAX[m][n](該進程所需要的最多的資源數)-----ALLOCATION[m][n](該進程所占有的資源數)
指導教師評語:
簽名:
****年**月**日