linux死锁的例子,操作系统教程—Linux实例分析 孟庆昌 第8章 死锁new.ppt
操作系統教程—Linux實例分析 孟慶昌 第8章 死鎖new.ppt
第8章 死鎖 8.1 概述 8.2 產生死鎖的條件 8.3 死鎖的預防 8.4 死鎖的避免 8.5 死鎖的檢測與恢復 8.6 處理死鎖的綜合方式 習題 8.1 概 述 8.1.1 死鎖的概念 死鎖 Deadlock 是若干進程因系統資源有限且操作不當而造成的帶有全局危害性的現象。 我們考慮下面這個例子: 設系統中只有一臺打印機和一臺讀卡機, 它們被進程A和進程B共用。這兩臺物理設備的特性決定了對它們的使用方式必須是順序的, 即一個進程用完了, 另一個進程才能用。 進程A和B各自對資源的申請使用情況如下: A:申請讀卡機 B:申請打印機 申請打印機 申請讀卡機 使用讀卡機 使用打印機 使用打印機 使用讀卡機 釋放讀卡機 釋放打印機 釋放打印機 釋放讀卡機 由于進程并行工作, 就可能出現這樣的執行序列: A: 申請讀卡機 B: 申請打印機 A: 申請打印機 B: 申請讀卡機 所謂死鎖就是指在一個進程集合中的每個進程, 都在等待僅由該集合中的另一進程才能引發的事件, 而無限期地僵持下去的局面。 8.1.2 資源概念 當若干進程取得對設備、 文件等資源的獨占性訪問權時, 就可能出現死鎖。 資源可以是硬件設備(如打印機、 磁帶驅動器、 掃描儀等), 也可以是一組信息(如數據庫中一個加鎖的記錄、 一個信號量、 系統表格中的一個表項等)。 1. 進程對資源的操作 系統中包括有限的資源, 要分給大量的計算進程。 資源可分為若干類型, 每類都有若干個實體。 CPU周期、 內存空間、 文件和I/O設備 如打印機、 磁帶驅動器、 讀卡機等 都是資源類型的例子。 一個進程在使用資源之前要申請資源, 在用完之后必須釋放該資源。 在通常的操作方式下, 進程只能按下述序列使用資源: 1) 申請 如果所申請的資源因被其他進程占用而不能立即得到, 那么申請資源的進程必須等待, 直至其他進程釋放資源為止。 2) 使用 進程對該資源進行操作 如在行式打印機上打印結果 。 3 釋放 進程釋放它以前申請并分配到的資源。 2. 可剝奪資源與不可剝奪資源 系統中一般都有多種資源。 按照占用方式來分, 可以分為兩類: 可剝奪資源與不可剝奪資源。 可剝奪資源是另外進程可以從擁有它的進程那里把它剝奪過去為己所用, 并且不會產生任何不良影響。 在2.4.7節的同步計數例子中, 如果將供者和用者代碼中的前兩個P操作的位置顛倒, 成為: 供者 用者: L1:P mutex L2:P mutex P empty P full 8.1.3 進程推進順序與死鎖 圖8-1示出了進程推進順序對引發死鎖的影響。 設有兩個進程A和B, 競爭兩個資源R和S, 這兩個資源都是不可剝奪資源, 因此必須在一段時間內獨占使用。 進程A和B的一般形式是: 進程A 進程B 申請R 申請S 申請S 申請R 釋放R 釋放S 釋放S 釋放R 圖8-1中, X軸和Y軸分別表示進程A和B的執行過程, 從原點出發的不同的折線分別表示兩個進程以不同速度推進時所合成的路徑。 在單CPU系統中, 任何時候只能有一個進程處于執行狀態。 路徑中的水平線段表示進程A在執行, 進程B等待; 而垂直線段表示進程B在執行, 進程A等待。 (1) 進程B獲得資源S, 然后又獲得R, 后來釋放S和R。 當進程A恢復執行時, 它能夠獲得這兩個資源。 A和B都可進行下去。 (2) 進程B獲得資源S, 然后又獲得R; 接著進程A執行, 因未申請到資源R而阻塞, B釋放S和R。 當A恢復執行時, 能夠獲得這兩個資源。 (3) 進程B獲得資源S, 而進程A申請到R。 此時, 死鎖不可避免, 因為B向下執行會阻塞在R上, 而A會阻塞在S上。 (4) 進程A獲得資源R, 接著進程B獲得資源S。 此時, 死鎖不可避免。 因為向下執行, B將在R上阻塞, A將在S上阻塞。 (5) 進程A獲得資源R, 接著獲得S。 進程B執行, 由于未申請到S而阻塞。 之后, A釋放資源R和S, 當B恢復執行時, 它能獲得這兩個資源。 (6) 進程A獲得資源R和S, 然后釋放R和S。 當進程B恢復執行時, 它能獲得這兩個資源。 可見, 是否產生死鎖既取決于動態執行過程, 也取決于應用程序的設計。 例如, 若進程A不必同時申請兩個資源, 代碼改為: 進程A 申請R 釋放R 申請S 釋放S 8.2 產生死鎖的條件 8.2.1 產生死鎖的必要條件 1. 互斥條件 即某個資源在一段時間內只能由一個進程占有, 而不能同時被兩個或兩個以上的進程占有。 這種獨占資源如平板式繪圖儀、 CD-ROM驅動器、 打印機等等, 必須在占有該資源的進程主動釋放它之后, 其他進程才能占有該資源, 這是
總結
以上是生活随笔為你收集整理的linux死锁的例子,操作系统教程—Linux实例分析 孟庆昌 第8章 死锁new.ppt的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java like a_如何在Java中
- 下一篇: linux unzip命令不存在_15个