操作系統(tǒng)實(shí)驗(yàn)報告-利用銀行家算法避免死鎖_第1頁
操作系統(tǒng)實(shí)驗(yàn)報告-利用銀行家算法避免死鎖_第2頁
操作系統(tǒng)實(shí)驗(yàn)報告-利用銀行家算法避免死鎖_第3頁
操作系統(tǒng)實(shí)驗(yàn)報告-利用銀行家算法避免死鎖_第4頁
操作系統(tǒng)實(shí)驗(yàn)報告-利用銀行家算法避免死鎖_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 計算機(jī)操作系統(tǒng)實(shí)驗(yàn)報告題 目 利用銀行家算法避免死鎖一、 實(shí)驗(yàn)?zāi)康模?1、加深了解有關(guān)資源申請、避免死鎖等概念,并體會和了解死鎖和避免死鎖的具體實(shí)施方法。 2、要求編寫和調(diào)試一個系統(tǒng)動態(tài)分配資源的簡單模擬程序,觀察死鎖產(chǎn)生的條件,并采用銀行家算法,有效的防止和避免死鎖的發(fā)生。2、 實(shí)驗(yàn)容:用銀行家算法實(shí)現(xiàn)資源分配: 設(shè)計五個進(jìn)程p0,p1,p2,p3,p4共享三類資源A,B,C的系統(tǒng),例如,A,B,C的資源數(shù)量分別為10,5,7。進(jìn)程可動態(tài)地申請資源和釋放資源,系統(tǒng)按進(jìn)程的申請動態(tài)地分配資源,要求程序具有顯示和打印各進(jìn)程的某一個時刻的資源分配表和安全序列;顯示和打印各進(jìn)程依次要求申請的資源號

2、以及為某進(jìn)程分配資源后的有關(guān)資源數(shù)據(jù)。3、 問題分析與設(shè)計:1、算法思路:先對用戶提出的請求進(jìn)行合法性檢查,即檢查請否大于需要的,是否大于可利用的。若請求合法,則進(jìn)行預(yù)分配,對分配后的狀態(tài)調(diào)用安全性算法進(jìn)行檢查。若安全,則分配;若不安全,則拒絕申請,恢復(fù)到原來的狀態(tài),拒絕申請。2、銀行家算法步驟:(1)如果Requestior =Need,則轉(zhuǎn)向步驟(2);否則,認(rèn)為出錯,因?yàn)樗枰馁Y源數(shù)已超過它所宣布的最大值。 (2)如果Requestor=Available,則轉(zhuǎn)向步驟(3);否則,表示系統(tǒng)無足夠的資源,進(jìn)程必須等待。 (3)系統(tǒng)試探把要求的資源分配給進(jìn)程Pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)

3、值:     Available=Available-Requesti;     Allocation=Allocation+Request; Need=Need-Request; (4)系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀態(tài)。3、安全性算法步驟:(1)設(shè)置兩個向量工作向量Work。它表示系統(tǒng)可提供進(jìn)程繼續(xù)運(yùn)行所需要的各類資源數(shù)目,執(zhí)行安全算法開始時,Work=Allocation;布爾向量Finish。它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成,開始時先做Finishi=false,

4、當(dāng)有足夠資源分配給進(jìn)程時,令Finishi=true。(2)從進(jìn)程集合中找到一個能滿足下述條件的進(jìn)程:Finishi=falseNeed<or=Work 如找到,執(zhí)行步驟(3);否則,執(zhí)行步驟(4)。(3)當(dāng)進(jìn)程P獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行: Work=Work+Allocation; Finishi=true; 轉(zhuǎn)向步驟(2)。(4)如果所有進(jìn)程的Finishi=true,則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài)。4、流程圖:系統(tǒng)主要過程流程圖銀行家算法流程圖安全性算法流程圖5、主要數(shù)據(jù)結(jié)構(gòu) 假設(shè)有M個進(jìn)程N(yùn)類資源,則有如下數(shù)據(jù)結(jié)構(gòu):in

5、t maxM*N M個進(jìn)程對N類資源的最大需求量int availableN 系統(tǒng)可用資源數(shù)int allocatedM*N M個進(jìn)程已經(jīng)得到N類資源的資源量int needM*N M個進(jìn)程還需要N類資源的資源量int worked 系統(tǒng)提供給進(jìn)程繼續(xù)運(yùn)行所需的各類資源數(shù)目4、 源代碼import java.awt.*;import javax.swing.*;import java.util.*;import java.awt.event.*;import javax.swing.border.*;public class OsBanker extends JFrame / 界面設(shè)計JLab

6、el labelInfo;JLabel labelInfo1;int resourceNum, processNum;int count = 0;utton buttonRequest, buttonSetInit, button, button1, buttonsearch,button2;JTextField tf1, tf2;JTextField textAvailable;JTextField textAllocation;JTextField textNeed;JTextField textProcessName;JTextField textRequest;int availabl

7、e;int max;int need;int allocated;int SafeSequence;int request;boolean Finish;int worked;boolean flag = false;JFrame f1;JFrame f2;JFrame f3;JTextArea jt;void display() Border border = BorderFactory.createLoweredBevelBorder();Border borderTitled = BorderFactory.createTitledBorder(border, "按鈕區(qū)&quo

8、t;);textAvailable = new JTextField5;textAllocation = new JTextField65;textNeed = new JTextField65;textProcessName = new JTextField("");textProcessName.setEnabled(false);textRequest = new JTextField5;tf1 = new JTextField(20);tf2 = new JTextField(20);labelInfo = new JLabel("請先輸入資源個數(shù)和進(jìn)程個

9、數(shù)(16),后單擊確定");JPanel contentPane;contentPane = (JPanel) this.getContentPane();contentPane.setLayout(null);contentPane.setBackground(Color.pink);labelInfo.setBounds(50, 10, 300, 40);labelInfo.setOpaque(true);labelInfo.setForeground(Color.red);labelInfo.setBackground(Color.pink);contentPane.add(l

10、abelInfo, null);JLabel b1 = new JLabel("資源個數(shù):");b1.setForeground(Color.blue);JLabel b2 = new JLabel("進(jìn)程個數(shù):");b2.setForeground(Color.blue);b1.setBounds(50, 80, 80, 30);contentPane.add(b1, null);tf1.setBounds(180, 80, 170, 30);contentPane.add(tf1, null);b2.setBounds(50, 150, 80, 30

11、);contentPane.add(b2, null);tf2.setBounds(180, 150, 170, 30);contentPane.add(tf2, null);button1 = new utton("確定");button = new utton("重置");button1.setBounds(80, 200, 80, 30);contentPane.add(button1, null);button.setBounds(220, 200, 80, 30);contentPane.add(button, null);this.setSi

12、ze(400, 300);this.setResizable(false);this.setTitle("銀行家算法(SXJ)");this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);f1 = new JFrame();labelInfo1 = new JLabel("請先輸入最大需求和分配矩陣,然后單擊初始化");JPanel contentPane1;contentPane1 = (JPanel) f1.

13、getContentPane();contentPane1.setLayout(null);contentPane1.setBackground(Color.pink);labelInfo1.setOpaque(true);labelInfo1.setBounds(75, 10, 400, 40);labelInfo1.setBackground(Color.pink);labelInfo1.setForeground(Color.blue);contentPane1.add(labelInfo1, null);JLabel labelAvailableLabel = new JLabel(&

14、quot;AllResource:");JLabel labelNeedLabel = new JLabel("MaxNeed:");JLabel labelAllocationLabel = new JLabel("allocated:");JLabel labelRequestLabel = new JLabel("request process:");labelNeedLabel.setBounds(75, 90, 100, 20);/ x,y,width,heightcontentPane1.add(labelNee

15、dLabel, null);labelAllocationLabel.setBounds(75, 240, 100, 20);contentPane1.add(labelAllocationLabel, null);labelAvailableLabel.setBounds(75, 70, 100, 20);contentPane1.add(labelAvailableLabel, null);labelRequestLabel.setBounds(75, 400, 100, 20);contentPane1.add(labelRequestLabel, null);JLabel labelP

16、rocessLabel1 = new JLabel("進(jìn)程1"), new JLabel("進(jìn)程2"),new JLabel("進(jìn)程3"), new JLabel("進(jìn)程4"), new JLabel("進(jìn)程5"),new JLabel("進(jìn)程6") ;JLabel labelProcessLabel2 = new JLabel("進(jìn)程1"), new JLabel("進(jìn)程2"),new JLabel("進(jìn)程3"),

17、 new JLabel("進(jìn)程4"), new JLabel("進(jìn)程5"),new JLabel("進(jìn)程6") ;JPanel pPanel1 = new JPanel(), pPanel2 = new JPanel(), pPanel3 = new JPanel(), pPanel4 = new JPanel();pPanel1.setLayout(null);pPanel2.setLayout(null);/* * pPanel4.setLayout(null); pPanel4.setBounds(440,120,90,270)

18、; * pPanel4.setBorder(borderTitled); */buttonSetInit = new utton("初始化");buttonsearch = new utton("檢測安全性");button2 = new utton("重置");buttonRequest = new utton("請求資源");buttonSetInit.setBounds(420, 140, 100, 30);contentPane1.add(buttonSetInit, null);buttonsearch.

19、setBounds(420, 240, 100, 30);contentPane1.add(buttonsearch, null);button2.setBounds(420, 340, 100, 30);contentPane1.add(button2, null);buttonRequest.setBounds(420, 425, 100, 30);contentPane1.add(buttonRequest, null);for (int pi = 0; pi < 6; pi+) labelProcessLabel1pi.setBounds(0, 0 + pi * 20, 60,

20、20);labelProcessLabel2pi.setBounds(0, 0 + pi * 20, 60, 20);pPanel1.setBounds(75, 120, 60, 120);pPanel2.setBounds(75, 270, 60, 120);for (int pi = 0; pi < 6; pi+) pPanel1.add(labelProcessLabel1pi, null);pPanel2.add(labelProcessLabel2pi, null);contentPane1.add(pPanel1);contentPane1.add(pPanel2);cont

21、entPane1.add(pPanel4);for (int si = 0; si < 5; si+)for (int pi = 0; pi < 6; pi+) textNeedpisi = new JTextField();textNeedpisi.setBounds(150 + si * 50, 120 + pi * 20, 50, 20);textNeedpisi.setEditable(false);textAllocationpisi = new JTextField();textAllocationpisi.setBounds(150 + si * 50, 270 +

22、pi * 20,50, 20);textAllocationpisi.setEditable(false);for (int si = 0; si < 5; si+) textAvailablesi = new JTextField();textAvailablesi.setEditable(false);textAvailablesi.setBounds(150 + si * 50, 70, 50, 20);textRequestsi = new JTextField();textRequestsi.setEditable(false);textRequestsi.setBounds(

23、150 + si * 50, 430, 50, 20);contentPane1.add(textAvailablesi, null);contentPane1.add(textRequestsi, null);for (int pi = 0; pi < 6; pi+)for (int si = 0; si < 5; si+) contentPane1.add(textNeedpisi, null);contentPane1.add(textAllocationpisi, null);textProcessName.setBounds(80, 430, 50, 20);conten

24、tPane1.add(textProcessName, null);f1.setSize(550, 500);f1.setResizable(false);f1.setTitle("銀行家算法(SXJ)");f1.setLocationRelativeTo(null);f1.setDefaultCloseOperation(EXIT_ON_CLOSE);/ f1.setVisible(true);f1.setVisible(false);f2 = new JFrame("安全序列顯示框");jt = new JTextArea(75, 40);jt.se

25、tBackground(Color.pink);jt.setForeground(Color.blue);JScrollPane scrollPane = new JScrollPane(jt); / 加滾動條scrollPane.setBorder(BorderFactory.createLoweredBevelBorder();/ 邊界(f2.getContentPane().add(scrollPane);f2.setSize(450, 400);f2.setResizable(false);f2.setDefaultCloseOperation(EXIT_ON_CLOSE);f2.se

26、tVisible(false);buttonSetInit.setEnabled(false);buttonRequest.setEnabled(false);buttonsearch.setEnabled(false);button1.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) / labelInfo.setText("請先初始化allocated和Maxneed,后單擊初始化按鈕");f1.setVisible(true);buttonSetInit.

27、setEnabled(true);resourceNum = Integer.parseInt(tf1.getText();processNum = Integer.parseInt(tf2.getText();for (int i = 0; i < processNum; i+) for (int j = 0; j < resourceNum; j+) textNeedij.setEditable(true);textAllocationij.setEditable(true);textAvailablej.setEditable(true););buttonSetInit.ad

28、dActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Init();buttonsearch.setEnabled(true););buttonsearch.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) count = 0;SafeSequence = new intprocessNum;worked = new intresourceNum;Finish = new bo

29、oleanprocessNum;copyVector(worked, available);Safety(0);jt.append("安全序列數(shù)量:" + count);if (flag) labelInfo1.setText("當(dāng)前系統(tǒng)狀態(tài):安全");f2.setVisible(true);buttonRequest.setEnabled(true);textProcessName.setEnabled(true);for (int i = 0; i < resourceNum; i+) textRequesti.setEditable(true

30、); else labelInfo1.setText("當(dāng)前系統(tǒng)狀態(tài):不安全");buttonSetInit.setEnabled(false););buttonRequest.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) count = 0;for (int i = 0; i < processNum; i+) Finishi = false;jt.setText("");flag = false;RequestResource(

31、););button2.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) /* * tf1.setText(""); tf2.setText(""); */f2.setVisible(false);jt.setText("");for (int i = 0; i < processNum; i+) for (int j = 0; j < resourceNum; j+) textNeedij.setText(&

32、quot;");textAllocationij.setText("");textAvailablej.setText("");textRequestj.setText("");/ textNeedij.setEditable(false);/ textAllocationij.setEditable(false);/ textAvailablej.setEditable(false);textRequestj.setEditable(false);textProcessName.setText("");

33、Finishi = false;flag = false;buttonsearch.setEnabled(false);/ labelInfo.setText("請先輸入資源個數(shù)和進(jìn)程個數(shù),后單擊確定"););button.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) tf1.setText("");tf2.setText("");f2.setVisible(false);jt.setText(""

34、);flag = false;);void copyVector(int v1, int v2) for (int i = 0; i < v1.length; i+)v1i = v2i;void Add(int v1, int v2) for (int i = 0; i < v1.length; i+)v1i += v2i;void Sub(int v1, int v2) for (int i = 0; i < v1.length; i+)v1i -= v2i;boolean Smaller(int v1, int v2) boolean value = true;for (

35、int i = 0; i < v1.length; i+)if (v1i > v2i) value = false;break;return value;public static void main(String args) OsBanker ob = new OsBanker();ob.display();/ System.out.println(" "+count);void Init() / 初始化操作矩陣available = new intresourceNum;for (int i = 0; i < resourceNum; i+) avai

36、lablei = Integer.parseInt(textAvailablei.getText();max = new intprocessNumresourceNum;allocated = new intprocessNumresourceNum;need = new intprocessNumresourceNum;for (int i = 0; i < processNum; i+) for (int j = 0; j < resourceNum; j+) maxij = Integer.parseInt(textNeedij.getText();allocatedij

37、= Integer.parseInt(textAllocationij.getText();for (int i = 0; i < resourceNum; i+)for (int j = 0; j < processNum; j+)needji = maxji - allocatedji;for (int i = 0; i < resourceNum; i+)for (int j = 0; j < processNum; j+) availablei -= allocatedji;if (availablei < 0) labelInfo.setText(&qu

38、ot;您輸入的數(shù)據(jù)有誤,請重新輸入");void Safety(int n) / 查找所有安全序列if (n = processNum) count+;for (int i = 0; i < processNum; i+) jt.append("進(jìn)程" + (SafeSequencei + 1) + " ");jt.append("n");flag = true;return;for (int i = 0; i < processNum; i+) if (Finishi = false) boolean OK = true;for (int j = 0; j < resourceNum; j+) if (needij >

溫馨提示

  • 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

提交評論