• <tbody id="wslfv"><pre id="wslfv"></pre></tbody>
    <span id="wslfv"></span>
    <tbody id="wslfv"><pre id="wslfv"></pre></tbody>
    <th id="wslfv"><track id="wslfv"><rt id="wslfv"></rt></track></th>

    <li id="wslfv"><acronym id="wslfv"></acronym></li>
    更多課程 選擇中心

    嵌入式培訓
    達內IT學院

    400-111-8989

    嵌入式系統死鎖和活鎖含義理解

    • 發布:嵌入式培訓
    • 來源:嵌入式問答
    • 時間:2017-09-11 11:32

    和操作系統一樣,封鎖的方法可能引起活鎖和死鎖。

    一、活鎖

    如果事務T1封鎖了數據R,事務T2又請求封鎖R,于是T2等待。T3也請求封鎖R,當T1釋放了R上的封鎖之后系統首先批準了T3的請求,T2仍然等待。然后T4又請求封鎖R,當T3釋放了R上的封鎖之后系統又批準了T4的請求,...,T2有可能永遠等待,這就是活鎖的情形。

    避免活鎖的簡單方法是采用先來先服務的策略。

    二、死鎖

    如果事務T1封鎖了數據R1,T2封鎖了數據R2,然后T1又請求封鎖R2,因T2已封鎖了R2,于是T1等待T2釋放R2上的鎖。接著T2又申請封鎖R1,因T1已封鎖了R1,T2也只能等待T1釋放R1上的鎖。這樣就出現了T1在等待T2,而T2又在等待T1的局面,T1和T2兩個事務永遠不能結束,形成死鎖。

    1.死鎖的預防

    在數據庫中,產生死鎖的原因是兩個或多個事務都已封鎖了一些數據對象,然后又都請求對已為其他事務封鎖的數據對象加鎖,從而出現死等待。防止死鎖的發生其實就是要破壞產生死鎖的條件。預防死鎖通常有兩種方法:

    ①一次封鎖法

    一次封鎖法要求每個事務必須一次將所有要使用的數據全部加鎖,否則就不能繼續執行。

    一次封鎖法雖然可以有效地防止死鎖的發生,但也存在問題,一次就將以后要用到的全部數據加鎖,勢必擴大了封鎖的范圍,從而降低了系統的并發度。

    ②順序封鎖法

    順序封鎖法是預先對數據對象規定一個封鎖順序,所有事務都按這個順序實行封鎖。

    順序封鎖法可以有效地防止死鎖,但也同樣存在問題。事務的封鎖請求可以隨著事務的執行而動態地決定,很難事先確定每一個事務要封鎖哪些對象,因此也就很難按規定的順序去施加封鎖。

    可見,在操作系統中廣為采用的預防死鎖的策略并不很適合數據庫的特點,因此DBMS在解決死鎖的問題上普遍采用的是診斷并解除死鎖的方法。

    2.死鎖的診斷與解除

    ①超時法

    如果一個事務的等待時間超過了規定的時限,就認為發生了死鎖。超時法實現簡單,但其不足也很明顯。一是有可能誤判死鎖,事務因為其他原因使等待時間超過時限,系統會誤認為發生了死鎖。二是時限若設置得太長,死鎖發生后不能及時發現。

    ②等待圖法

    事務等待圖是一個有向圖G=(T,U)。T為結點的集合,每個結點表示正運行的事務;U為邊的集合,每條邊表示事務等待的情況。若T1等待T2,則T1、T2之間劃一條有向邊,從T1指向T2。事務等待圖動態地反映了所有事務的等待情況。并發控制子系統周期性地(比如每隔1分鐘)檢測事務等待圖,如果發現圖中存在回路,則表示系統中出現了死鎖。

    DBMS的并發控制子系統一旦檢測到系統中存在死鎖,就要設法解除。通常采用的方法是選擇一個處理死鎖代價最小的事務,將其撤消,釋放此事務持有的所有的鎖,使其它事務得以繼續運行下去。當然,對撤消的事務所執行的數據修改操作必須加以恢復。

    死鎖:是指兩個或兩個以上的進程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處于死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。由于資源占用是互斥的,當某個進程提出申請資源后,使得有關進程在無外力協助下,永遠分配不到必需的資源而無法繼續運行,這就產生了一種特殊現象:死鎖。”

    雖然進程在運行過程中,可能發生死鎖,但死鎖的發生也必須具備一定的條件,死鎖的發生必須具備以下四個必要條件。

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

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

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

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

    理解了死鎖的原因,尤其是產生死鎖的四個必要條件,就可以最大可能地避免、預防和解除死鎖。所以,在系統設計、進程調度等方面注意如何不讓這四個必要條件成立,如何確定資源的合理分配算法,避免進程永久占據系統資源。此外,也要防止進程在處于等待狀態的情況下占用資源,在系統運行過程中,對進程發出的每一個系統能夠滿足的資源申請進行動態檢查,并根據檢查結果決定是否分配資源,若分配后系統可能發生死鎖,則不予分配,否則予以分配。因此,對資源的分配要給予合理的規劃。

    有序資源分配法

    這種算法資源按某種規則系統中的所有資源統一編號(例如打印機為1、磁帶機為2、磁盤為3、等等),申請時必須以上升的次序。系統要求申請進程:

    1、對它所必須使用的而且屬于同一類的所有資源,必須一次申請完;

    2、在申請不同類資源時,必須按各類設備的編號依次申請。例如:進程PA,使用資源的順序是R1,R2;進程PB,使用資源的順序是R2,R1;若采用動態分配有可能形成環路條件,造成死鎖。

    采用有序資源分配法:R1的編號為1,R2的編號為2;

    PA:申請次序應是:R1,R2

    PB:申請次序應是:R1,R2

    這樣就破壞了環路條件,避免了死鎖的發生

    銀行算法

    避免死鎖算法中最有代表性的算法是DijkstraE.W于1968年提出的銀行家算法:

    該算法需要檢查申請者對資源的最大需求量,如果系統現存的各類資源可以滿足申請者的請求,就滿足申請者的請求。

    這樣申請者就可很快完成其計算,然后釋放它占用的資源,從而保證了系統中的所有進程都能完成,所以可避免死鎖的發生。

    活鎖(英文livelock),指事物1可以使用資源,但它讓其他事物先使用資源;事物2可以使用資源,但它也讓其他事物先使用資源,于是兩者一直謙讓,都無法使用資源。

    所謂饑餓,是指如果事務T1封鎖了數據R,事務T2又請求封鎖R,于是T2等待。T3也請求封鎖R,當T1釋放了R上的封鎖后,系統首先批準了T3的請求,T2仍然等待。然后T4又請求封鎖R,當T3釋放了R上的封鎖之后,系統又批準了T4的請求......T2可能永遠等待,這就是饑餓。

    活鎖有一定幾率解開。而死鎖(deadlock)是無法解開的。

    避免活鎖的簡單方法是采用先來先服務的策略。當多個事務請求封鎖同一數據對象時,封鎖子系統按請求封鎖的先后次序對事務排隊,數據對象上的鎖一旦釋放就批準申請隊列中第一個事務獲得鎖。

    預約申請免費試聽課

    填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

    上一篇:在達內培訓學習嵌入式怎么樣?
    下一篇:嵌入式軟件工程師若干問題詳解

    嵌入式系統如何選擇微控制器?

    當下嵌入式系統的發展趨勢如何?

    什么是嵌入式系統?

    嵌入式操作系統重要的特點是什么?

    • 掃碼領取資料

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    黑龍江省

    吉林省

    河北省

    湖南省

    貴州省

    云南省

    廣西省

    海南省

    欧美一级高清片,一级欧美免费大片视频,欧美三级在线电影免费 百度 好搜 搜狗
    <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>