添加的内容 删除的内容
(修改自此处;原许可:CC BY-SA 3.0[网站升级迁移]) |
(我来啦, replaced: 開 → 开 (2), 學 → 学, 與 → 与, 導 → 导, 雙 → 双 (2), 無 → 无 (3), 協 → 协 (2), 調 → 调, 對 → 对 (6), 發 → 发 (2), 樣 → 样, 詞 → 词, 譯 → 译, 稱 → 称 (2), 為 → 为 (6), 種 → 种, 術 → 术, 複 → 复, 運 → 运 (2), 並 → 并 (2), 爭 → 争, 統 → 统 (8), 過 → 过, 進 → 进, 個 → 个 (7), 兩 → 两 (6), 釋 → 释 (7), 資 → 资 (14), 斷 → 断 (2), 範 → 范, 邊 → 边, 當 → 当 (2), 項 → 项, 業 → 业 (2), 擁 → 拥 (2), 機 → 机 (3), 設 → 设, 計 → 计, 結 → 结 (9), 繼 → 继, 續 → 续 (2), 鎖 → 锁, 環 → 环 (2), 還 → 还 (2), 單 → 单, 讓 → 让 (5), 題 → 题, 問 → 问, 時 → 时 (6), 態 → 态, 顯 → 显, 則 → 则, 禮 → 礼, 執 → 执 (5…) |
||
第1行: | 第1行: | ||
{{NoteTA |
{{NoteTA |
||
|G1 = IT |
|G1 = IT |
||
|1 = zh-hans:循环; zh-hant:循 |
|1 = zh-hans:循环; zh-hant:循环; |
||
}} |
}} |
||
[[File:Process deadlock.svg|缩略图|右|P1、P2 |
[[File:Process deadlock.svg|缩略图|右|P1、P2两个process都需要资源才能继续执行。P1拥有资源R2、还需要額外资源R1才能执行;P2拥有资源R1、还需要額外资源R2才能执行,两边都在互相等待而沒有任何一个可执行。]] |
||
'''死锁'''({{lang-en|deadlock}}),又 |
'''死锁'''({{lang-en|deadlock}}),又译为'''-{zh-cn:死结; zh-tw:死锁;}-''',计算机科学名词。当两个以上的运算单元,双方都在等待对方停止执行,以取得系统资源,但是沒有一方提前退出时,就称为死结<ref name=coulouris>{{cite book|last=Coulouris|first=George|publisher=Pearson|year=2012|title=Distributed Systems Concepts and Design|page=716|isbn=978-0-273-76059-7}}</ref>。在多工[[作业系统]]中,作业系统为了协调不同行程,能否取得系统资源时,为了让系统正常运作,必须要解決这个问题。另一种相似的情況称为“活锁”。 |
||
== 简介 == |
== 简介 == |
||
例如,一个[[进程]] p1占用了显示器,同时又必须使用打印机,而打印机被进程p2占用,p2又必须使用显示器,这样就形成了死锁。 |
例如,一个[[进程]] p1占用了显示器,同时又必须使用打印机,而打印机被进程p2占用,p2又必须使用显示器,这样就形成了死锁。 |
||
因 |
因为p1必须等待p2释出打印机才能够完成工作并释出螢幕,同时p2也必须等待p1释出显示器才能完成工作并释出打印机,形成循环等待的死结。 |
||
== 起因 == |
== 起因 == |
||
第15行: | 第15行: | ||
死锁的四个条件是: |
死锁的四个条件是: |
||
* '''禁止抢占'''(no preemption):系 |
* '''禁止抢占'''(no preemption):系统资源不能被强制从一个进程中退出。 |
||
* '''持有和等待'''(hold and wait):一个进程可以在等待时持有系统资源。 |
* '''持有和等待'''(hold and wait):一个进程可以在等待时持有系统资源。 |
||
* '''互斥'''(mutual exclusion): |
* '''互斥'''(mutual exclusion):资源只能同时分配給一个行程,无法多个行程共用。 |
||
* '''循环等待'''(circular waiting):一系列进程互相持有其他进程所需要的资源。 |
* '''循环等待'''(circular waiting):一系列进程互相持有其他进程所需要的资源。 |
||
死锁只有在四个条件同时满足时 |
死锁只有在四个条件同时满足时发生,预防死锁必须至少破坏其中一项。 |
||
== 預防 == |
== 預防 == |
||
系 |
系统也可以尝试回避死锁。因为在理论上,死锁总是可能产生的,所以操作系统尝试监视所有进程,使其没有死锁。 |
||
== 消除 == |
== 消除 == |
||
第33行: | 第33行: | ||
同样也可以把一个或多个进程回滚到先前的某个状态。如果一个进程被多次回滚,迟迟不能占用必需的系统资源,可能会导致{{tsl|en|Starvation (computer science)|资源匮乏}}。 |
同样也可以把一个或多个进程回滚到先前的某个状态。如果一个进程被多次回滚,迟迟不能占用必需的系统资源,可能会导致{{tsl|en|Starvation (computer science)|资源匮乏}}。 |
||
== 活 |
== 活结 == |
||
'''活 |
'''活结'''({{lang|en|livelock}}),与死结相似,死结是行程都在等待对方先释放资源;活结则是行程彼此释放资源又同时占用对方释放的资源。当此情況持续发生时,儘管资源的狀态不断改变,但每个行程都无法取得所需资源,使得事情沒有任何进展。 |
||
== |
== 范例 == |
||
假 |
假设两人正好面对面碰上对方: |
||
* 死 |
* 死结:两人互不相让,都在等对方先让开。 |
||
* 活 |
* 活结:两人互相礼让,卻恰巧站到同一侧,再次让开,又站到同一侧,同样的情況不断重复下去导致双方都无法通过。 |
||
== 参见 == |
== 参见 == |
||
* [[ |
* [[竞争危害]] |
||
== 参考文献 == |
== 参考文献 == |
||
第48行: | 第48行: | ||
{{并发计算}} |
{{并发计算}} |
||
[[Category:操作系 |
[[Category:操作系统技术]] |
||
[[Category: |
[[Category:协同控制]] |
||
[[Category:程式錯 |
[[Category:程式錯误]] |