日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

操作系统知识——互斥和死锁

發(fā)布時間:2023/12/15 windows 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作系统知识——互斥和死锁 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

銀行家算法

銀行家算法是最有代表性的避免死鎖算法,是Dijkstra提出的。這是由于該算法能用于銀行系統(tǒng)現(xiàn)金貸款的發(fā)放而得名。

我們可以把操作系統(tǒng)看作是銀行家,操作系統(tǒng)管理的資源相當(dāng)于銀行家管理的資金,進程向操作系統(tǒng)請求分配資源相當(dāng)于用戶向銀行家貸款。

  • 關(guān)于安全狀態(tài)的概述

    系統(tǒng)處于安全狀態(tài)時,一定不會發(fā)生死鎖;系統(tǒng)處于不安全狀態(tài)時,不一定會發(fā)生死鎖;

    (1)安全狀態(tài)
    如果存在一個由系統(tǒng)中所有進程構(gòu)成的安全序列P1,…,Pn,則系統(tǒng)處于安全狀態(tài)。安全狀態(tài)一定是沒有死鎖發(fā)生。

    (2)不安全狀態(tài)
    不存在一個安全序列。不安全狀態(tài)不一定導(dǎo)致死鎖。

  • 基本思想

    銀行家可以把一定數(shù)量的資金供多個用戶周轉(zhuǎn)使用,為保證資金的安全,銀行家規(guī)定:

    • 當(dāng)一個顧客對資金的最大需求量不超過銀行家現(xiàn)有的資金時就可接納該顧客;
    • 顧客可以分期貸款,但貸款的總數(shù)不能超過最大需求量;
    • 當(dāng)銀行家現(xiàn)有的資金不能滿足顧客尚需的貸款數(shù)額時,對顧客的貸款可推遲支付,但總能使顧客在有限的時間里得到貸款;
    • 當(dāng)顧客得到所需的全部資金后,一定能在有限的時間里歸還所有的資金.

      銀行家算法是通過動態(tài)地檢測系統(tǒng)中資源分配情況和進程對資源的需求情況來決定如何分配資源的,在能確保系統(tǒng)處于安全狀態(tài)時才能把資源分配給申請者,從而避免系統(tǒng)發(fā)生死鎖。

  • 相關(guān)的變量

    • Available(可利用資源總數(shù))某類可利用的資源數(shù)目,其初值是系統(tǒng)中所配置的該類全部可用資源數(shù)目。
    • Max:某個進程對某類資源的最大需求數(shù)
    • Allocation: 某類資源已分配給某進程的資源數(shù)。
    • Need:某個進程還需要的各類資源數(shù)。Need= Max-Allocation
  • 銀行家算法描述

    設(shè)Request i是進程Pi的申請向量,如果Request i[j]=K,則表示進程Pi需要K個Rj類型的資源。當(dāng)Pi發(fā)出資源請求后,系統(tǒng)按下述步驟進行檢查:

    • 如果Request i[j]<=Need[i,j],便轉(zhuǎn)向步驟2);否則認為出錯,因為它所需要的資源數(shù)已經(jīng)超過它所宣布的最大值。

    • 如果Request i[j]<=Available[i,j],便轉(zhuǎn)向步驟3);否則,表示尚無足夠資源,Pi需等待。

    • 系統(tǒng)試探著把資源分配給進程Pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值:

      1
      2
      3
      Available[j]:=Available[j]-Request i[j];
      Allocation[i,j]:=Allocation[i,j]+Request i[j];
      Need[i,j]:=Need[i,j]-Request i[j];

4) 系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后系統(tǒng)是否處于安全狀態(tài)。若安全,才正式將資源分配給進程Pi,以完成本次分配;否則,將本次的試探分配作廢,恢復(fù)原來的資源分配狀態(tài),讓進程Pi等待。

參考:銀行家算法

死鎖的概念

  死鎖是指兩個或兩個以上的進程在執(zhí)行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現(xiàn)象,若無外力作用,它們都將無法推進下去。此時稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。

產(chǎn)生死鎖的必要條件

  • 互斥條件:指進程對所分配到的資源進行排它性使用,即在一段時間內(nèi)某資源只由一個進程占用。如果此時還有其它進程請求資源,則請求者只能等待,直至占有資源的進程用畢釋放。

  • 請求和保持條件:指進程已經(jīng)保持至少一個資源,但又提出了新的資源請求,而該資源已被其它進程占有,此時請求進程阻塞,但又對自己已獲得的其它資源保持不放。

  • 不剝奪條件:指進程已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。

  • 循環(huán)等待條件:指在發(fā)生死鎖時,必然存在一個進程——資源的環(huán)形鏈,即進程集合{P0,P1,P2,···,Pn}中的P0正在等待一個P1占用的資源;P1正在等待P2占用的資源,……,Pn正在等待已被P0占用的資源。

針對死鎖的解決方案

  • 預(yù)防死鎖

    這是一種較簡單和直觀的事先預(yù)防的方法。方法是通過設(shè)置某些限制條件,去破壞產(chǎn)生死鎖的四個必要條件中的一個或者幾個,來預(yù)防發(fā)生死鎖。預(yù)防死鎖是一種較易實現(xiàn)的方法,已被廣泛使用。但是由于所施加的限制條件往往太嚴(yán)格,可能會導(dǎo)致系統(tǒng)資源利用率和系統(tǒng)吞吐量降低。

    預(yù)防死鎖方法(3種):

    • 破壞請求和保持條件,如資源靜態(tài)分配法(也稱為預(yù)分配資源)
    • 破壞不可搶占條件
    • 破壞循環(huán)等待條件
  • 避免死鎖。

    該方法同樣是屬于事先預(yù)防的策略,但它并不須事先采取各種限制措施去破壞產(chǎn)生死鎖的的四個必要條件,而是在資源的動態(tài)分配過程中,用某種方法去防止系統(tǒng)進入不安全狀態(tài),從而避免發(fā)生死鎖。如銀行家算法

  • 檢測死鎖。

    這種方法并不須事先采取任何限制性措施,也不必檢查系統(tǒng)是否已經(jīng)進入不安全區(qū),此方法允許系統(tǒng)在運行過程中發(fā)生死鎖。但可通過系統(tǒng)所設(shè)置的檢測機構(gòu),及時地檢測出死鎖的發(fā)生,并精確地確定與死鎖有關(guān)的進程和資源,然后采取適當(dāng)措施,從系統(tǒng)中將已發(fā)生的死鎖清除掉。如資源分配圖簡化法。

  • 解除死鎖

    這是與檢測死鎖相配套的一種措施。當(dāng)檢測到系統(tǒng)中已發(fā)生死鎖時,須將進程從死鎖狀態(tài)中解脫出來。常用的實施方法是撤銷或掛起一些進程,以便回收一些資源,再將這些資源分配給已處于阻塞狀態(tài)的進程,使之轉(zhuǎn)為就緒狀態(tài),以繼續(xù)運行。死鎖的檢測和解除措施,有可能使系統(tǒng)獲得較好的資源利用率和吞吐量,但在實現(xiàn)上難度也最大。

    死鎖的解除方法(2種):

    • 搶占資源,如剝奪資源法
    • 終止(或撤銷)進程。
  • 具體方案:

  • 搶占式資源分配策略 :要使不可搶占其它進程占有的資源不成立,可以約定如下:如果一個進程已經(jīng)占有了某些資源又要申請新資源,而新資源不能滿足必須等待時,系統(tǒng)可以搶奪該進程已有的資源。 它只適合于主存和處理器。
  • 釋放已占資源策略——這種分配策略是僅當(dāng)進程沒有占有資源時才允許它去申請資源。如果進程已占用了某些資源而又要再申請資源,則它應(yīng)先歸還所占的資源后再申請新資源。
  • 按序分配資源——要使循環(huán)等待條件不成立可采用按序分配的資源分配策略。具體做法是把系統(tǒng)中所有資源排序,對每個資源確定一個編號,規(guī)定任何一個進程申請兩個以上的資源時,總是先申請編號最小的資源,再申請編號大的資源。
  • 關(guān)于
  • 鏈接:https://www.nowcoder.com/questionTerminal/b8ade2458fe94e59827f8adbf58efe2c
    來源:??途W(wǎng)

    系統(tǒng)中的資源

    • 一類是可剝奪資源,即CPU 和 內(nèi)存 ,是指某進程在獲得這類資源后,該資源可以再被其他進程或系統(tǒng)剝奪。例如,優(yōu)先權(quán)高的進程可以剝奪優(yōu)先權(quán)低的進程的 處理機 。
    • 另一類資源是不可剝奪資源,如 磁帶機 、打印機等,當(dāng)系統(tǒng)把這類資源分配給某進程后,再不能強行收回,只能在進程用完后自行釋放。

    鏈接:https://www.nowcoder.com/questionTerminal/d7375249214648c6b3b12ce8184efea2
    來源:牛客網(wǎng)

    互斥

    各進程采取互斥的方式,實現(xiàn)共享的資源稱作臨界資源。

    信號量機制的引入解決了進程同步的描述問題,但信號量的大量同步操作分散在各個進程中不便于管理,還有可能導(dǎo)致系統(tǒng)死鎖。如:生產(chǎn)者消費者問題中將P、V顛倒可能死鎖。
    為此Dijkstra于1971年提出:把所有進程對某一種臨界資源的同步操作都集中起來,構(gòu)成一個所謂的秘書進程。凡要訪問該臨界資源的進程,都需先報告秘書,由秘書來實現(xiàn)諸進程對同一臨界資源的互斥使用。

    鏈接:https://www.nowcoder.com/questionTerminal/401d52fe872a4473857f8b795ccc6783
    來源:牛客網(wǎng)

    總結(jié)

    以上是生活随笔為你收集整理的操作系统知识——互斥和死锁的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。