




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、操作系統(tǒng)課程設(shè)計(jì)報(bào)告操作系統(tǒng)課程設(shè)計(jì)報(bào)告 題目:銀行家算法設(shè)計(jì)與實(shí)現(xiàn)題目:銀行家算法設(shè)計(jì)與實(shí)現(xiàn) 院院 (系):(系): 計(jì)算機(jī)科學(xué)與工程學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院 專(zhuān)專(zhuān) 業(yè):業(yè): 對(duì)日軟件對(duì)日軟件 班班 級(jí):級(jí): 080612 學(xué)學(xué) 生:生: 學(xué)學(xué) 號(hào):號(hào): 080608115 指導(dǎo)教師:指導(dǎo)教師: 2010 年 12 月 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 1 銀行家算法設(shè)計(jì)與實(shí)現(xiàn)銀行家算法設(shè)計(jì)與實(shí)現(xiàn) 摘摘 要要 銀行家算法是一個(gè)用來(lái)預(yù)防系統(tǒng)進(jìn)入死鎖狀態(tài)的算法,用它可以判斷系統(tǒng) 的安全性,如果系統(tǒng)當(dāng)前處于安全狀態(tài),則可以為申請(qǐng)資源的進(jìn)程分配資源, 如果不是安全狀態(tài),則不能為申請(qǐng)資源的進(jìn)程分配資源。 銀行家算
2、法執(zhí)行過(guò)程中,首先判斷申請(qǐng)資源的進(jìn)程所申請(qǐng)的資源數(shù)目是否 合法,若是合法的,則可以為其進(jìn)行試分配,再利用安全性算法求出安全序列, 如果存在安全序列,則說(shuō)明可以給申請(qǐng)資源的進(jìn)程分配資源,分配成功,繼 續(xù)為其它進(jìn)程服務(wù)。如果找不到安全序列,則說(shuō)明為該進(jìn)程分配資源后系統(tǒng)會(huì) 進(jìn)入不安全狀態(tài),所以不能為該進(jìn)程分配資源,使該進(jìn)程進(jìn)入阻塞狀態(tài)。若申 請(qǐng)資源的進(jìn)程申請(qǐng)的資源數(shù)目不合法,則不需要進(jìn)行試分配,直接使其進(jìn)入阻 塞狀態(tài),處理其他申請(qǐng)資源的進(jìn)程。 論文首先對(duì)算法的設(shè)計(jì)從總體上進(jìn)行了分析,然后分析各個(gè)細(xì)節(jié),再對(duì)算 法分模塊設(shè)計(jì),并對(duì)各個(gè)模塊的算法思想通過(guò)流程圖表示,分塊編寫(xiě)代碼,并 進(jìn)行調(diào)試和測(cè)試,最后進(jìn)
3、行組裝測(cè)試及系統(tǒng)測(cè)試,使其成為一個(gè)可以用來(lái)判斷 系統(tǒng)安全狀態(tài)的程序。 關(guān)鍵詞:可用資源關(guān)鍵詞:可用資源 最大需求矩陣最大需求矩陣 分配矩陣分配矩陣 需求矩陣需求矩陣 請(qǐng)求向量請(qǐng)求向量 試分配試分配 安全性算法安全性算法 安全序列安全序列 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 2 目目 錄錄 銀行家算法設(shè)計(jì)與實(shí)現(xiàn).1 摘 要.1 目 錄.2 1 緒論.5 1.1 課題背景.5 1.2 課題意義.5 1.3 運(yùn)行環(huán)境.5 2 需求分析.1 2.1 問(wèn)題描述.1 2.2 基本要求.1 2.3 概要分析.2 3 算法思想.3 3.1 安全性算法的算法思想.3 3.1.1 設(shè)置兩個(gè)向量:.3 3.1.2 安全性檢測(cè).3
4、 3.2 銀行家算法的算法思想.4 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 3 3.2.1 銀行家算法的思路.4 3.2.2 銀行家算法.4 3.2.3 安全性檢查算法.5 4 詳細(xì)設(shè)計(jì).6 4.1 銀行家算法中用到的主要數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì).6 4.2 算法整體設(shè)計(jì)與調(diào)用.6 4.3 模塊設(shè)計(jì)與時(shí)間復(fù)雜度分析.8 4.3.1 int check_distribution(int* p,int k)函數(shù).8 4.3.2 int check_safe()銀行家算法.8 4.3.2 void print()輸出函數(shù).8 4.4 程序流程圖.8 4.5.1 主函數(shù) void main()函數(shù)流程圖.9 4.5.2 判斷試分配
5、函數(shù) int check_distribution(int* p,int k)流程圖.9 4.5.3 銀行家算法 int check_safe()流程圖.10 4.5.4 輸出函數(shù) void print() 流程圖.11 5 程序調(diào)試、分析與修改.12 5.1 分模塊調(diào)試與分析.12 5.1.1 進(jìn)程信息的輸入與輸出調(diào)試.12 5.1.2 進(jìn)程請(qǐng)求資源輸入出錯(cuò)提示信息處理.13 5.1.3 判斷試分配函數(shù) int check_distribution(int* p,int k).13 5.1.4 求安全序列函數(shù) int check_safe().14 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 4 6 結(jié)論.15
6、7 小結(jié).16 參考文獻(xiàn).17 附錄(源代碼).18 緒論 5 1 緒論緒論 1.11.1 課題背景課題背景 在預(yù)防死鎖的各種算法中,總的來(lái)說(shuō),都是施加了較強(qiáng)的限制條件,從而 使實(shí)現(xiàn)簡(jiǎn)單,但卻嚴(yán)重地?fù)p害了系統(tǒng)的性能。在避免死鎖的算法中,施加的條 件較較弱,有可能獲得令人滿(mǎn)意的系統(tǒng)性能。在該方法中把系統(tǒng)的狀態(tài)分為安 全狀態(tài)和不安全狀態(tài),只要能使系統(tǒng)處于安全狀態(tài),便可避免死鎖的發(fā)生。 最具有代表性的避免死鎖的算法是 dijkstra 的銀行家算法。這是因?yàn)樵撍?法能用于銀行系統(tǒng)現(xiàn)金貸款的發(fā)放而得名,在這一次的課程設(shè)計(jì)中就要對(duì)銀行 家算法從分析到實(shí)現(xiàn),整體做一個(gè)詳細(xì)的描述。 1.21.2 課題意義課
7、題意義 (1)從課程設(shè)計(jì)上講,提高自己的分析問(wèn)題,解決問(wèn)題和動(dòng)手能力; (2)從銀行家算法上本身講,通過(guò)算法可以判斷系統(tǒng)的安全性,對(duì)申請(qǐng)資 源的進(jìn)程進(jìn)行限制,從而避免系統(tǒng)進(jìn)入死鎖狀態(tài)。 1.31.3 運(yùn)行環(huán)境運(yùn)行環(huán)境 turboturbo c;c; visualvisual c+c+ 6.06.0 2 需求分析 1 2 需求分析需求分析 2.12.1 問(wèn)題描述問(wèn)題描述 當(dāng)系統(tǒng)在進(jìn)行資源管理時(shí),如果對(duì)進(jìn)城申請(qǐng)的資源分配不當(dāng),可能會(huì)使系 統(tǒng)進(jìn)入死鎖狀態(tài),因而后面到來(lái)的進(jìn)程也無(wú)法順利執(zhí)行。銀行家算法中,要對(duì) 當(dāng)前申請(qǐng)資源的進(jìn)程申請(qǐng)資源的數(shù)目進(jìn)行判斷,如果可以試分配,則試求出一 個(gè)安全序列,如果可以求
8、出,則說(shuō)明給這個(gè)進(jìn)程分配資源后系統(tǒng)不會(huì)進(jìn)入不安 全狀態(tài),將該進(jìn)程申請(qǐng)的資源分配給他,若求不出安全序列,則說(shuō)明將資源分 配給該進(jìn)程后系統(tǒng)會(huì)進(jìn)入不安全狀態(tài),所以就使該進(jìn)程進(jìn)入阻塞狀態(tài),等待以 后可以分配資源時(shí)再執(zhí)行該進(jìn)程,然后系統(tǒng)繼續(xù)服務(wù)其它進(jìn)程。通過(guò)這樣一個(gè) 過(guò)程,可以有效避免系統(tǒng)進(jìn)入死鎖狀態(tài)。 2.22.2 基本要求基本要求 (1)對(duì)各個(gè)進(jìn)程的進(jìn)程名,最大需求資源,已分配資源,系統(tǒng)可用資源等進(jìn) 行有序的輸入。 (2)對(duì)申請(qǐng)資源的進(jìn)程要有合法性判斷(如進(jìn)程名,申請(qǐng)資源數(shù)等) 。 (3)若有進(jìn)程申請(qǐng)資源,首先要對(duì)它申請(qǐng)的資源數(shù)進(jìn)行判斷。 (4)在上面判斷合法的前提下進(jìn)行試分配,利用銀行家算法求出安
9、全序列。 如果可以求出安全序列,則為該進(jìn)程分配資源,否則使它進(jìn)入阻塞狀態(tài)。 2 需求分析 2 2.32.3 概要分析概要分析 在避免死鎖的算法中,允許進(jìn)程動(dòng)態(tài)地申請(qǐng)資源,系統(tǒng)在進(jìn)行資源分配之 前,先計(jì)算資源分配的安全性。若此次分配不會(huì)使系統(tǒng)進(jìn)入不安全狀態(tài),便將 資源分配給該進(jìn)程否則進(jìn)程等待。 所謂安全狀態(tài)是指系統(tǒng)能按某種順序如(稱(chēng) 為安全序列) ,就這樣來(lái)為每個(gè)進(jìn)程分配資源,直至最大 需求。使每個(gè)進(jìn)程都可以順序地執(zhí)行完畢。若系統(tǒng)不存在這樣一個(gè)安全序列, 那么系統(tǒng)此時(shí)會(huì)進(jìn)入不安全狀態(tài)。 雖然并非所有的不安全狀態(tài)都會(huì)產(chǎn)生死鎖狀態(tài),但當(dāng)系統(tǒng)進(jìn)入不安全狀態(tài) 后,便可能進(jìn)而進(jìn)入死鎖狀態(tài);反之,只要系統(tǒng)處
10、于安全狀態(tài),系統(tǒng)便可避免 進(jìn)入死鎖狀態(tài)。因此,避免死鎖的實(shí)質(zhì)在于,如何使系統(tǒng)不進(jìn)入不安全狀態(tài), 銀行家算法就是用來(lái)判斷某種情況會(huì)不會(huì)進(jìn)入不安全狀態(tài)。 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 3 3 算法思想算法思想 3.1 安全性算法的算法思想安全性算法的算法思想 思想:系統(tǒng)在進(jìn)行資源分配之前,應(yīng)先計(jì)算此次資源分配后狀態(tài)的安全性。 若此次分配后的狀態(tài)是安全狀態(tài),則將資源分配給進(jìn)程;否則,令進(jìn)程等待。 3.1.13.1.1 設(shè)置兩個(gè)向量設(shè)置兩個(gè)向量 (1)工作向量workm: 它表示系統(tǒng)可提供給進(jìn)程繼續(xù)運(yùn)行所需的各類(lèi)資源 數(shù)目, work初=available; (2) finishn: 它表示系統(tǒng)是否有足夠的資
11、源分配給進(jìn)程,使之運(yùn)行完 成。 false表示未完成, true表示完成。 3.1.2 安全性檢測(cè)安全性檢測(cè) workavailable finish 根據(jù)根據(jù)need賦賦 值值 尋尋找找進(jìn)進(jìn)程程i, ,滿(mǎn)滿(mǎn)足足 finish i false 且且need i=work 返回安全狀返回安全狀態(tài)態(tài) y work=work+allocation i finish i true 找到找到 所有所有進(jìn)進(jìn)程的程的 finish i true? 沒(méi)找到?jīng)]找到 n 返回不安全狀返回不安全狀態(tài)態(tài) 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 4 3.23.2 銀行家算法的算法思想銀行家算法的算法思想 3.2.13.2.1 銀行家算法
12、的思路銀行家算法的思路 先對(duì)用戶(hù)提出的請(qǐng)求進(jìn)行合法性檢查,即檢查請(qǐng)求的是不大于需要的,是 否不大于可利用的。若請(qǐng)求合法,則進(jìn)行試分配。最后對(duì)試分配后的狀態(tài)調(diào)用 安全性檢查算法進(jìn)行安全性檢查。若安全,則分配,否則,不分配,恢復(fù)原來(lái) 狀態(tài),拒絕申請(qǐng)。 3.2.23.2.2 銀行家算法銀行家算法 進(jìn)程 i 發(fā)出申請(qǐng)資源請(qǐng)求: (1)調(diào)用 check_distribution(int* p,int k)檢查申請(qǐng)量是否不大于需求量再 檢查檢查申請(qǐng)量是否小于系統(tǒng)中的可利用資源數(shù)量:若條件不符重新輸入,不 允許申請(qǐng)大于需求量。 (2)若以上條件都滿(mǎn)足,則系統(tǒng)試探著將資源分配給申請(qǐng)的進(jìn)程,并修改下面 數(shù)據(jù)結(jié)構(gòu)
13、中的數(shù)值: availablei,j= availablei,j- request ij; allocationij= allocationij+ request ij; needij= needij- request ij; (3)進(jìn)行試分配,執(zhí)行安全性檢查,調(diào)用 check_safe()函數(shù)檢查此次資源試分 配后系統(tǒng)是否處于安全狀態(tài)。若安全,才正式將資源分配給進(jìn)程;否則本次試 探分配作廢,恢復(fù)原來(lái)的資源分配狀態(tài),讓該進(jìn)程等待。 (4)用 while 循環(huán)語(yǔ)句實(shí)現(xiàn)輸入字符 y/n 判斷是否繼續(xù)進(jìn)行資源申請(qǐng)。 3.2.33.2.3 安全性檢查算法安全性檢查算法 (1)設(shè)置向量: 工作向量 wo
14、rk,它表示系統(tǒng)可提供給進(jìn)程繼續(xù)運(yùn)行所需的各類(lèi)資源數(shù)目,在執(zhí) 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 5 行安全性算法開(kāi)始時(shí),work= available。 finish,它表示系統(tǒng)是否有足夠的資源分配給每個(gè)進(jìn)程,使之運(yùn)行完成。開(kāi) 始時(shí)先做 finishi=0;當(dāng)有足夠的資源分配給進(jìn)程時(shí),再令 finishi=1。 (2)在進(jìn)程中查找符合以下條件的進(jìn)程: 條件 1:finishi=0; 條件 2:needij=workj 若找到,則執(zhí)行步驟(3)否則,執(zhí)行步驟(4) (3)當(dāng)進(jìn)程獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故 應(yīng)執(zhí)行: workj= workj+ allocationij; fi
15、nishi=1; goto step 2; (4)最后循環(huán)檢查是否所有的 finishi=1 都滿(mǎn)足,如果是,則返回 1 表示系統(tǒng) 處于安全狀態(tài),否則,返回 0 表示系統(tǒng)處于不安全狀態(tài)。 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 6 4 詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì) 4.14.1銀行家算法中用到的主要數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)銀行家算法中用到的主要數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) (1)進(jìn)程名向量 char processneman; /進(jìn)程名 (2)可利用資源向量 int availablem; /資源清單系統(tǒng)中現(xiàn)有各資源 空閑個(gè)數(shù)。 (3)最大需求矩陣 int maxnm; /最大需求矩陣每個(gè)進(jìn)程對(duì)各 資源的最大需求數(shù)分配矩陣 (4)已分配矩陣 int
16、allocationnm;/分配矩陣系統(tǒng)給每個(gè)進(jìn)程 已分配的各類(lèi)資源數(shù) (5)需求矩陣 int neednm; /需求矩陣每個(gè)進(jìn)程還需要每 種資源的個(gè)數(shù)申請(qǐng)各類(lèi)資源數(shù)量 (6)申請(qǐng)向量 int request m /進(jìn)程申請(qǐng)資源的向量 (7)工作向量 int worknm; /初始第一個(gè)向量為 available,隨尋找安全序列時(shí)為其余每個(gè)向量賦值,可 以防止安全序列未找到而丟了初始狀態(tài)的值 (8)安全序列向量 int sequencen=0;/存放安全序列號(hào) (9)標(biāo)志向量 int finishn /求安全序列時(shí)記錄每個(gè)進(jìn)程是否可以 順利執(zhí)行 4.2 算法整體設(shè)計(jì)與調(diào)用算法整體設(shè)計(jì)與調(diào)用 主
17、函數(shù) void main(),首先輸入每個(gè)進(jìn)程信息,然后判斷是否有進(jìn)程申請(qǐng) 資源,若有,則調(diào)用 int check_distribution(int* p,int k)函數(shù)判斷是否可以進(jìn)行試 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 7 分配,如果滿(mǎn)足試分配條件,調(diào)用 int check_safe()函數(shù)求安全序列,如果可以 求出安全序列,則說(shuō)明分配后系統(tǒng)不會(huì)進(jìn)入不安全狀態(tài),正式將資源分配給申 請(qǐng)資源的進(jìn)程,最后用 void print()函數(shù)輸出分配資源后每個(gè)進(jìn)程的信息。如果 求不出安全序列,說(shuō)明分配后系統(tǒng)會(huì)處于不安全狀態(tài),則不能將資源分配給該 進(jìn)程,讓其等待,系統(tǒng)恢復(fù)原始狀態(tài)。如果申請(qǐng)資源的數(shù)量不滿(mǎn)足條件,則
18、讓 該進(jìn)程等待。繼續(xù)判斷其他申請(qǐng)資源的進(jìn)程。 (1)int check_distribution(int* p,int k):這個(gè)函數(shù)用來(lái)判斷是否可以 進(jìn)行試分配,如果函數(shù)結(jié)果返回 1,說(shuō)明可以進(jìn)行試分配,如果行數(shù)返回 0,說(shuō) 明申請(qǐng)資源的進(jìn)程申請(qǐng)的資源數(shù)目不滿(mǎn)足 request =need或 request =available條件,不能為該進(jìn)程進(jìn)行試分配。 (2)int check_safe():這個(gè)函數(shù)用來(lái)求安全序列,首先初始化 work0i= availablei,然后循環(huán)找滿(mǎn)足條件 finishi=0 im; i+)判斷是否滿(mǎn)足約束條件 pi = needki,時(shí)間復(fù)雜 度為 o(m
19、)。 4.3.24.3.2 intint check_safe()check_safe()銀行家算法銀行家算法 (1) 用 for(i=0; im; i+)循環(huán)workki=availablei;/-requesti初始化 work 矩陣 (2) 用 for(m=0; mn; m+)循環(huán)找出滿(mǎn)足(0 = finishi in; i+)/檢查是否所有進(jìn)程都執(zhí)行完了,如果所有進(jìn)程都可執(zhí) 行則 finish 值等于 1。 (4) 由上面執(zhí)行可以得出 int check_safe()函數(shù)時(shí)間復(fù)雜度為 o(n)或 o(m)。 4.3.24.3.2 voidvoid print()print()輸出函數(shù)輸
20、出函數(shù) for(i=0; in; i+)for(j=0; jm; j+)循環(huán)輸出每個(gè)進(jìn)程的每一類(lèi)資源信息, 時(shí)間復(fù)雜度為 o(n)或 o(m)。 4.44.4 程序流程圖程序流程圖 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 9 4.5.14.5.1 主函數(shù)主函數(shù) voidvoid mainmain()函數(shù)流程圖()函數(shù)流程圖 ( 4-4- 1 1) 4-1 4.5.2 判斷試分配函數(shù) int check_distribution(int* p,int k)流程圖(4-2) 4-2 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 10 4.5.3 銀行家算法銀行家算法 int check_safe()流程圖流程圖 (4-3) 4-3 操作系
21、統(tǒng)課程設(shè)計(jì)報(bào)告 11 4.5.4 輸出函數(shù)輸出函數(shù) void print() 流程圖(流程圖(4-4) 4-4 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 12 5 程序調(diào)試、分析與修改程序調(diào)試、分析與修改 5.15.1 分模塊調(diào)試與分析分模塊調(diào)試與分析 函數(shù)的書(shū)寫(xiě)分模塊進(jìn)行,每完成一個(gè)模塊進(jìn)行調(diào)試、測(cè)試直到該函數(shù)運(yùn)行 無(wú)誤。 5.1.1 進(jìn)程信息的輸入與輸出調(diào)試進(jìn)程信息的輸入與輸出調(diào)試 (1) 能正確無(wú)誤的輸入進(jìn)程名向量 processneman,輸入系統(tǒng)現(xiàn)有各類(lèi)資源數(shù)量 availablem向量,輸入每個(gè)進(jìn)程對(duì)各類(lèi)資源的最大需求數(shù) maxnm矩陣,輸 入系統(tǒng)給每個(gè)進(jìn)程已分配的各類(lèi)資源數(shù) allocationnm
22、矩陣。輸出程序過(guò)程如 下: 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 13 (2) 在進(jìn)程信息輸入中沒(méi)有出現(xiàn)多大問(wèn)題,在進(jìn)程信息輸出時(shí),按設(shè)計(jì)要求輸 出的話(huà)應(yīng)該是一個(gè)表格形式,在輸出函數(shù)設(shè)計(jì)最初,由于有些部分分割或空格 沒(méi)有填充好,導(dǎo)致輸出表格比較亂,沒(méi)有達(dá)到設(shè)計(jì)要求,經(jīng)過(guò)修改后輸出形式 才符合了設(shè)計(jì)要求,進(jìn)程信息輸入完成后,初始狀態(tài)各進(jìn)程信息輸出如下: 5.1.25.1.2 進(jìn)程請(qǐng)求資源輸入出錯(cuò)提示信息處理進(jìn)程請(qǐng)求資源輸入出錯(cuò)提示信息處理 (1) 在系統(tǒng)詢(xún)問(wèn)是否有進(jìn)程申請(qǐng)資源時(shí),如果有輸入信息出錯(cuò),系統(tǒng)會(huì)給與出 錯(cuò)提示,如果輸入信息正確則系統(tǒng)將繼續(xù)執(zhí)行下面操作,執(zhí)行如下: 5.1.35.1.3 判斷是否可以試分
23、配函數(shù)判斷是否可以試分配函數(shù) intint check_distribution(int*check_distribution(int* p,intp,int k)k) (1) 在這個(gè)函數(shù)中主要是對(duì)申請(qǐng)資源的進(jìn)程申請(qǐng)的資源數(shù)量是否滿(mǎn)足約束條件 request =need或 request =available,如果不滿(mǎn)足將打出提示信息, 如果滿(mǎn)足,則返回 1 繼續(xù)執(zhí)行下面程序,執(zhí)行結(jié)果如下: 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 14 5.1.45.1.4 求安全序列函數(shù)求安全序列函數(shù) intint check_safe()check_safe() (1) 如果申請(qǐng)資源的進(jìn)程申請(qǐng)的資源數(shù)目滿(mǎn)足試分配條件,則再
24、用這個(gè)函數(shù)來(lái) 求試分配后的安全序列,如果可以求出安全序列,則說(shuō)明這次分配不會(huì)使系統(tǒng) 進(jìn)入不安全狀態(tài),正式將資源分配給該進(jìn)程,修改系統(tǒng)資源信息。如果求不出 安全序列,說(shuō)明這次分配后系統(tǒng)會(huì)進(jìn)入不安全狀態(tài),不能給該進(jìn)程分配資源, 系統(tǒng)恢復(fù)初始狀態(tài),打印出提示信息,執(zhí)行結(jié)果如下: 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 15 6 結(jié)論結(jié)論 銀行家算法是通過(guò)檢查試分配,求安全序列,從而判斷是否可以為申請(qǐng)資源 的進(jìn)程分配資源,從而有效地避免系統(tǒng)進(jìn)入死鎖狀態(tài)。 7 小結(jié) 16 7 小結(jié)小結(jié) 雖然并非所有的不安全狀態(tài)都會(huì)產(chǎn)生死鎖狀態(tài),但系統(tǒng)進(jìn)入不安全狀態(tài)時(shí), 便可能進(jìn)而進(jìn)入死鎖狀態(tài)后,當(dāng)系統(tǒng)在進(jìn)行資源管理時(shí),如果對(duì)進(jìn)城申請(qǐng)的資
25、 源分配不當(dāng),可能會(huì)使系統(tǒng)進(jìn)入死鎖狀態(tài),因而后面到來(lái)的進(jìn)程也無(wú)法順利執(zhí) 行。銀行家算法中,要對(duì)當(dāng)前申請(qǐng)資源的進(jìn)程申請(qǐng)資源的數(shù)目進(jìn)行判斷,如果 可以試分配,則試求出一個(gè)安全序列,如果可以求出,則說(shuō)明給這個(gè)進(jìn)程分配 資源后系統(tǒng)不會(huì)進(jìn)入不安全狀態(tài),將該進(jìn)程申請(qǐng)的資源分配給他,若求不出安 全序列,則說(shuō)明將資源分配給該進(jìn)程后系統(tǒng)會(huì)進(jìn)入不安全狀態(tài),所以就使該進(jìn) 程進(jìn)入阻塞狀態(tài),等待以后可以分配資源時(shí)再執(zhí)行該進(jìn)程,然后系統(tǒng)繼續(xù)服務(wù) 其它進(jìn)程。通過(guò)這樣一個(gè)過(guò)程,可以有效避免系統(tǒng)進(jìn)入死鎖狀態(tài)。反之,只要 系統(tǒng)處于安全狀態(tài),系統(tǒng)便可避免進(jìn)入死鎖狀態(tài)。因此,避免死鎖的實(shí)質(zhì)在于; 如何使系統(tǒng)不進(jìn)入不安全狀態(tài)。 參考文
26、獻(xiàn) 17 參考文獻(xiàn)參考文獻(xiàn) 1 數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)書(shū) 網(wǎng)上資料 2 計(jì)算機(jī)操作系統(tǒng) 湯子瀛 哲鳳屏 湯小丹,西安電子科技大學(xué)出 版社; 3 c 語(yǔ)言程序設(shè)計(jì) 譚浩強(qiáng), 清華大學(xué)出版社; 附錄(源代碼) 18 附錄(源代碼)附錄(源代碼) #include #define n 5 /進(jìn)程個(gè)數(shù) #define m 3 /資源種類(lèi)數(shù) void print(); int check_safe(); int check_distribution(int* p,int k); char processneman; /進(jìn)程名 int requestm; /請(qǐng)求向量 int finishn;/標(biāo)記某一個(gè)進(jìn)程是否
27、可以執(zhí)行 int worknm; /初始為 available,隨尋找安全序列而變化,防 止安全序列未找到而丟了初始狀態(tài)的值 int availablem; /資源清單系統(tǒng)中現(xiàn)有各資源空閑個(gè)數(shù) int work_allocationnm; int maxnm; /最大需求矩陣每個(gè)進(jìn)程對(duì)各類(lèi)資源的最大需求數(shù) int allocationnm;/分配矩陣系統(tǒng)給每個(gè)進(jìn)程已分配的各類(lèi)資源數(shù) int neednm; /需求矩陣每個(gè)進(jìn)程還需要每種資源的個(gè)數(shù) int sequencen=0;/存放安全序列號(hào) void main() int i=0,j=0,k=0;/記錄申請(qǐng)資源的進(jìn)程的序列號(hào) int fla
28、g=0; /標(biāo)記輸入的進(jìn)程名是否存在 int safe=0; /標(biāo)志系統(tǒng)是否出于安全狀態(tài),0 表示不安全,1 表示安全 int distribution=0; /標(biāo)志是否可以進(jìn)行試分配 0 表示可以,1 表示不 可以 char flag1; /標(biāo)記是否有進(jìn)程申請(qǐng)資源 /neednm =maxnm-allocationnm; char name; /要請(qǐng)求資源的進(jìn)程名 printf(銀行家算法n); printf( 請(qǐng)分別初始化各矩陣信息 n); printf(*請(qǐng)輸入各進(jìn)程的進(jìn)程名n); /進(jìn)程名連續(xù)輸入 附錄(源代碼) 19 for(i=0; in; i+) scanf(%c, printf
29、(請(qǐng)輸入現(xiàn)有各資源空閑個(gè)數(shù)n); for(i=0; im; i+) scanf(%d, printf(請(qǐng)分別輸入每個(gè)進(jìn)程對(duì)各類(lèi)資源的最大需求數(shù)n); for(i=0; in; i+) for(j=0; jm; j+) scanf(%d, printf(請(qǐng)分別輸入系統(tǒng)給每個(gè)進(jìn)程已分配的各類(lèi)資源數(shù)n); for(i=0; in; i+) for(j=0; jm; j+) scanf(%d, /printf(請(qǐng)分別輸入每個(gè)進(jìn)程還需要每種資源的個(gè)數(shù)n); for(i=0; in; i+) for(j=0; jm; j+) needij=maxij-allocationij; 附錄(源代碼) 20 pr
30、intf(信息輸入完畢n); for(i=0; in; i+) sequencei=i; print(); safe=check_safe(); /檢查初始狀態(tài)是否安全 if(0 = safe) printf(系統(tǒng)現(xiàn)處于不安狀態(tài),不能為進(jìn)程分配資源,進(jìn)入死鎖狀態(tài)。 。 。n); exit(0); else if(1 = safe) printf(系統(tǒng)處于安全狀態(tài),可以為進(jìn)程分配資源。n); while(1) safe=0; getchar(); printf(是否有進(jìn)程請(qǐng)求系統(tǒng)資源.? (y/n) n); flag1=getchar(); /scanf(%c, if(y = flag1 | y
31、 = flag1) printf(請(qǐng)輸入進(jìn)程名:); getchar(); while(1) 附錄(源代碼) 21 /name=; scanf(%c, for(i=0; in; i+) /檢查進(jìn)程名輸入是否正確 if(name = processnemai ) flag=1; /輸入的進(jìn)程名存在 k=i; break;/找到申請(qǐng)資源的進(jìn)程序列號(hào)跳出 getchar();/將在此之前的一個(gè)回車(chē)接收了,不然會(huì)影響輸入 if( flag != 1 )/進(jìn)程名輸入不合法 printf(你輸入的進(jìn)程不存在,請(qǐng)重新輸入:); continue; else break;/進(jìn)程名輸入合法,則執(zhí)行下面操作 el
32、se if(n = flag1 | n = flag1) printf(進(jìn)程執(zhí)行完畢,退出系統(tǒng)。n); break; else if(n != flag1 continue; 附錄(源代碼) 22 printf(請(qǐng)輸入該進(jìn)程請(qǐng)求各類(lèi)資源的數(shù)量n); for(i=0; im; i+) scanf(%d, distribution=check_distribution(request,k); /檢查是否 可以試分配 if(1 = distribution) /*檢查 safe=check_safe(); /可以試分配,則求安全序列 if(1 = safe) /試分配成功 printf(試分配成功,
33、可以為該進(jìn)程分配資源。n); /distribution /是否給申請(qǐng)資源的進(jìn)程分配資源 for(i=0; im; i+) allocationki=allocationki+requesti; / 為進(jìn)程分配資源后修改該進(jìn)程的有關(guān)資源數(shù) needki=needki-requesti; printf(分配后各資源數(shù)量如下:n); print(); printf(分配成功!n); printf(系統(tǒng)剩余資源數(shù)各為: ); for(i=0; im; i+) printf(%d ,availablei); printf(n); continue; 附錄(源代碼) 23 else /試分配失敗 pri
34、ntf(試分配失敗,有可能進(jìn)入死鎖狀態(tài),請(qǐng)等待。 。 。n); /未求出安全序列 continue; else /試分配失敗 printf(該進(jìn)程申請(qǐng)的資源太多,無(wú)法分配,請(qǐng)等待。 。 。n); continue; void print() int i,j; printf( 資源 work needtallocationtwork+allocationt finishnn); printf( 進(jìn)程名 a b c a b c t a b c t a b cn); printf( n); for(i=0; in; i+) printf( %c ,processnemasequencei); for(j=0; jm; j+) printf(%d ,worksequenceij); printf( ); for(j=0; jm; j+) 附錄(源代碼) 24 printf(%d ,needseque
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 法律行業(yè)合同法與知識(shí)產(chǎn)權(quán)試題集
- 大規(guī)模數(shù)據(jù)分析與應(yīng)用實(shí)戰(zhàn)指南
- 孵化器房屋租賃合同
- 管道襯膠施工方案
- 南通環(huán)保槽鋼施工方案
- 包柱廣告施工方案
- 平面夯實(shí)施工方案
- 帶電開(kāi)挖電纜施工方案
- 旋挖咬合樁施工方案
- 部分區(qū)縣一模數(shù)學(xué)試卷
- 2025年鐵嶺衛(wèi)生職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)新版
- 2025年安徽水利水電職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)參考答案
- 2025年時(shí)政題庫(kù)及答案(100題)
- 2025年鐘山職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)帶答案
- 重慶市南開(kāi)名校2024-2025學(xué)年八年級(jí)下學(xué)期開(kāi)學(xué)考試物理試題(含答案)
- 2025年共青科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)附答案
- 2025年湖南生物機(jī)電職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)1套
- 2025年部編教材對(duì)道德與法治的啟示心得體會(huì)
- 《預(yù)算編制要點(diǎn)講解》課件
- 公司綠色可持續(xù)發(fā)展規(guī)劃報(bào)告
- 盆底康復(fù)治療新進(jìn)展
評(píng)論
0/150
提交評(píng)論