计算机操作系统学习笔记_进程管理--死锁

进程管理

--死锁

一、死锁的概念

1.死锁的概念

  系统中两个或两个以上的进程无限期地相互等待永远不会发生的条件,系统处于一种停滞状态,这种情况称为死锁。

2.死锁产生的原因

  (1)进程推进顺序不当

  (2)对互斥资源的分配不当[并不是资源不足,但是剩余资源不足是有可能产生死锁的]。

 必须要指出的是,系统资源不足并不是产生死锁的原因,进程资源如果不足则进程就不会被创建,只有在资源部分分配以后,剩余的资源不能满足某些个进程的请求,造成进程集无法推进的现象才是死锁。

3.产生死锁的四个必要条件[必须满足四个条件,才有可能产生死锁]

互斥条件: 任一时刻只允许一个进程使用资源。

非剥夺条件: 进程已经占用的资源,不会被强制剥夺。

占用并请求条件: 进程占有部分资源,申请更多的资源,且不会释放已经占有的资源。

循环等待: 请求资源的进程形成了循环。

二、死锁处理策略

  对死锁的处理,常用的方法有:忽略死锁死锁的检测与恢复死锁的避免死锁的预防

1.死锁忽略

  死锁忽略最典型的算法是鸵鸟算法。

2.死锁检测和恢复

 死锁的检测方法:

  1).资源分配图算法

  2).资源矩阵法

 恢复死锁常用的方法:

方法

功能

资源剥夺法

挂起某些死锁进程,并抢占它的资源。

进程撤销法

通过撤销占有资源多的进程或代价量小的进程,以恢复死锁。

进程回退法

设置还原点,让一个或多个进程回退到足以解除死锁的地步。

重新启动系统

代价最大,一切从头开始。我们要尽量避免采用此方法。

3.死锁避免

 1).安全与不安全状态

   某一时刻,系统能按某种顺序为每个进程分配其所需资源,使每个进程都能顺利地完成,则称此时系统处于安全状态。反之,称之为不安全状态。

 2).银行家算法

   银行家算法问题描述是:一个银行家把他的固定资金借给若干顾客,使这些顾客能满足对资金的要求又能完成其交易,也使银行家可以收回全部的现金。只要不出现一个顾客借走所有资金后还不够、还需要借贷,则银行家的资金应是安全的

 银行家算法示例

4.死锁预防

   所谓死锁预防,就是采用某种策略,限制并发进程对资源的请求,使系统在任何时刻都不满足死锁的四个必要条件。死锁预防主要是针对破坏四个必要条件进行的。

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2014-07-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Ryan Miao

Git 工作流的正确打开方式

前言 一直在使用git做版本控制,也一直工作很顺利,直到和别人发生冲突的时候。这才注意到git 工作流并不是那么简单。比如,之前遇到的清理历史。百度到的资料很...

33760
来自专栏月牙寂

k8s源码分析------kube-apiserver分析(3)

第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

69680
来自专栏腾讯云API

腾讯云 API 最佳实践: 善用幂等性

有些开发者问我云服务器“创建实例”接口有一个参数“ClientToken”不知道有什么作用。本文作一个简单的解答。

4.6K150
来自专栏非著名程序员

Android Studio你不知道的调试技巧

? 写代码不可避免有Bug,通常情况下除了日志最直接的调试手段就是debug;那么你的调试技术停留在哪一阶段呢?仅仅是下个断点单步执行吗?或者你知道 Eval...

322100
来自专栏同步博客

Redis应用----消息传递

  消息传递这一应用广泛存在于各个网站中,这个功能也是一个网站必不可少的。常见的消息传递应用有,新浪微博中的@我呀、给你评论然后的提示呀、赞赞赞提示、私信呀、甚...

18520
来自专栏Golang语言社区

进程、线程、轻量级进程、协程和go中的Goroutine

进程、线程、轻量级进程、协程和go中的Goroutine 进程、线程、轻量级进程、协程和go中的Goroutine 那些事儿电话面试被问到go的协程,曾经的军伟...

46960
来自专栏同步博客

Redis构建分布式锁

  为什么要构建锁呢?因为构建合适的锁可以在高并发下能够保持数据的一致性,即客户端在执行连贯的命令时上锁的数据不会被别的客户端的更改而发生错误。同时还能够保证命...

21020
来自专栏互联网大杂烩

拜占庭容错机制

Client会发送一系列请求给各个replicas节点来执行相应的操作,BFT算法保证所有正常的replicas节点执行相同序列的操作。因为所有的replica...

10220
来自专栏北京马哥教育

Python在自动化运维时经常会用到的方法

本文由马哥教育Python自动化实战班6期学员推荐,转载自互联网,作者为seed,内容略经小编改编和加工,观点跟作者无关,最后感谢作者的辛苦贡献与付出。 随着信...

38080
来自专栏FreeBuf

Flash XSS检测脚本的简单实现

前言 这里主要是讲如何快速扫描到有问题的flash文件,用于批量,有时候很笨的方法也会有奇效,下面记录一下在实现过程中的一些思路和遇到的一些坑。 ? 第三方插件...

31850

扫码关注云+社区

领取腾讯云代金券