一種操作系統的死鎖預防方法
【技術領域】
[0001]本發明公開一種操作系統的死鎖預防方法,屬于系統資源配置領域。
【背景技術】
[0002]在計算機操作系統領域,操作系統的死鎖現象是一個始終沒有被很好的解決的問題。所謂死鎖,是指兩個或兩個以上的進程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去.此時稱系統處于死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。
[0003]為了解決死鎖的問題,人們提出了一系列解決方法,其中應用最廣的是利用銀行家算法進行死鎖的解放。銀行家算法是把操作系統看做是銀行家,操作系統管理的資源相當于銀行家管理的資金,進程向操作系統請求分配資源相當于用戶向銀行家貸款。操作系統按照銀行家制定的規則為進程分配資源,當進程首次申請資源時,要測試該進程對資源的最大需求量,如果系統現存的資源可以滿足它的最大需求量則按當前的申請量分配資源,否則就推遲分配等等。銀行家算法,雖然解決了死鎖的問題,但是對系統性能的消耗非常大,在進行資源分配之前,需要先計算此次分配資源的安全性,若分配不會導致系統進入不安全狀態,則分配,否則等待。為實現銀行家算法,系統必須設置若干數據結構,非常復雜。本發明提供一種操作系統的死鎖預防方法,判斷申請的資源是可搶占資源還是不可搶占資源,如果是可搶占資源,則一定不會引發死鎖,對于不可搶占資源,檢查阻塞隊列是否為空,規定只有當阻塞隊列中已經有進程時才讓其他進程執行在申請資源前先釋放資源的操作,以預防死鎖現象的發生,與現有死鎖預防方法相比,不僅能預防操作系統死鎖產生,對操作系統的運行效率影響小,而且操作簡單。
【發明內容】
[0004]本發明針對現有技術中預防操作系統死鎖時,對系統性能的消耗非常大,系統內部運算較復雜的問題,提供一種操作系統的死鎖預防方法,與現有死鎖預防方法相比,不僅能預防操作系統死鎖產生,對操作系統的運行效率影響小,而且操作簡單。
[0005]本發明提出的具體方案是:
一種操作系統的死鎖預防方法:
系統進程申請資源,判斷申請的資源是否為可搶占資源,若否檢查阻塞隊列是否為空,阻塞隊列為空,則判斷系統剩余資源是否大于申請資源,大于則申請成功,否則該進程進入阻塞隊列為阻塞狀態;阻塞隊列非空,則被阻塞進程釋放占用的不可搶占資源,進程一次性申請在之前釋放的資源與所需的新的資源,申請成功,則得到所需的全部系統資源,否則該進程喚醒阻塞隊列中的第一個進程,該進程進入阻塞隊列為阻塞狀態,等待下次操作。
[0006]進程進入阻塞隊列為阻塞狀態,系統根據進程需要不可搶占資源的多少,排列進程在阻塞隊列中的位置。
[0007]系統進程申請資源,判斷申請的資源是否為可搶占資源,若為可搶占資源,則直接申請,進程運行至結束后喚醒阻塞隊列中的第一個進程。
[0008]本發明的有益之處是:
本發明方法對系統進程申請資源,判斷申請的資源是可搶占資源還是不可搶占資源,如果是可搶占資源,則允許進程直接申請資源,對于不可搶占資源,需要檢查阻塞隊列是否為空,為了不影響系統的運行效率,規定只有當阻塞隊列中已經有進程時才讓其他進程執行在申請資源前先釋放資源的操作,在阻塞隊列無進程的情況下,直接判斷系統剩余資源數是否滿足申請的資源數量;本發明與其他傳統死鎖預防方法相比,不僅能預防操作系統死鎖產生,對操作系統的運行效率影響較小,系統操作簡單。
【附圖說明】
[0009]圖1本發明方法工作流程示意圖。
【具體實施方式】
[0010]一種操作系統的死鎖預防方法:
系統進程申請資源,判斷申請的資源是否為可搶占資源,若否檢查阻塞隊列是否為空,阻塞隊列為空,則判斷系統剩余資源是否大于申請資源,大于則申請成功,否則該進程進入阻塞隊列為阻塞狀態;阻塞隊列非空,則被阻塞進程釋放占用的不可搶占資源,進程一次性申請在之前釋放的資源與所需的新的資源,申請成功,則得到所需的全部系統資源,否則該進程喚醒阻塞隊列中的第一個進程,該進程進入阻塞隊列為阻塞狀態,等待下次操作。
[0011]根據上述方法及
【發明內容】
,結合附圖,具體闡述預防操作系統進程發生死鎖的方法:
對于系統中的每一個進程,執行如下操作:
進程在運行過程中,發現還要申請其他的資源(a),
則進程判斷該資源屬于可搶占資源還是不可搶占資源(b),
如果是可搶占資源,則直接申請(c)。
[0012]如果是不可搶占資源,則檢查當前阻塞隊列是否為空(d),
如果為空,則說明當前系統中沒有被阻塞的進程,
若系統中剩余的資源數大于進程申請的資源數(e),則申請資源成功(f)。
[0013]若系統中剩余的資源數小于進程申請的資源數,則資源申請失敗,該進程進入阻塞狀態(g)。系統根據進程需要不可搶占資源的多少,排列進程在阻塞隊列中的位置;
如果阻塞隊列非空,說明當前系統中存在被阻塞的進程,則進程釋放已經占有的全部不可搶占資源(h),進程一次性申請在之前釋放的資源與所需的新的資源(i),
若資源申請成功,則得到所需的全部系統資源,進程繼續運行(j),資源申請成功的進程運行結束后釋放占有的所有資源并喚醒在阻塞隊列中的第一個進程(m)。
[0014]否則申請資源失敗,此時該進程需要喚醒阻塞隊列中的第一個進程(k),然后系統根據該進程需要不可搶占資源的多少,排列進程在阻塞隊列中的位置,比如該進程占用不可搶占資源較多,將其排列在阻塞隊列的尾部并轉化為阻塞狀態(1)。
[0015]基于上述方法,本發明首先判斷申請的資源是可搶占資源還是不可搶占資源。如果是可搶占資源,則允許進程直接申請資源,對于不可搶占資源,需要檢查阻塞隊列是否為空,為了不影響系統的運行效率,規定只有當阻塞隊列中已經有進程時才讓其他進程執行在申請資源前先釋放資源的操作。在阻塞隊列無進程的情況下,直接判斷系統剩余資源數是否滿足申請的資源數量。不僅能預防操作系統死鎖產生,對操作系統的運行效率影響較小。
【主權項】
1.一種操作系統的死鎖預防方法,其特征是 系統進程申請資源,判斷申請的資源是否為可搶占資源,若否檢查阻塞隊列是否為空,阻塞隊列為空,則判斷系統剩余資源是否大于申請資源,大于則申請成功,否則該進程進入阻塞隊列為阻塞狀態;阻塞隊列非空,則被阻塞進程釋放占用的不可搶占資源,進程一次性申請在之前釋放的資源與所需的新的資源,申請成功,則得到所需的全部系統資源,否則該進程喚醒阻塞隊列中的第一個進程,該進程進入阻塞隊列為阻塞狀態,等待下次操作。2.根據權利要求1所述的一種操作系統的死鎖預防方法,其特征是進程進入阻塞隊列為阻塞狀態,系統根據進程需要不可搶占資源的多少,排列進程在阻塞隊列中的位置。3.根據權利要求1或2所述的一種操作系統的死鎖預防方法,其特征是系統進程申請資源,判斷申請的資源是否為可搶占資源,若為可搶占資源,則直接申請,進程運行至結束后喚醒阻塞隊列中的第一個進程。
【專利摘要】本發明公開一種操作系統的死鎖預防方法,屬于系統資源配置領域;系統進程申請資源,判斷申請的資源是可搶占資源還是不可搶占資源,如果是可搶占資源,則允許進程直接申請資源,對于不可搶占資源,需要檢查阻塞隊列是否為空,為了不影響系統的運行效率,規定只有當阻塞隊列中已經有進程時才讓其他進程執行在申請資源前先釋放資源的操作,在阻塞隊列無進程的情況下,直接判斷系統剩余資源數是否滿足申請的資源數量;本發明與其他傳統死鎖預防方法相比,不僅能預防操作系統死鎖產生,對操作系統的運行效率影響較小,系統操作簡單。
【IPC分類】G06F9/48, G06F9/52
【公開號】CN105335237
【申請號】CN201510758180
【發明人】張旭芳
【申請人】浪潮電子信息產業股份有限公司
【公開日】2016年2月17日
【申請日】2015年11月9日