`
香煎马鲛鱼
  • 浏览: 109586 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

死锁问题入门知识

阅读更多

死锁问题入门知识

今天我们一起来学习死锁,一起沐黎文伟老师的春风(我的操作系统老师叫做黎文伟),呵呵呵。

什么是死锁:

是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。

产生死锁的原因主要是:
因为系统资源不足。
进程运行推进的顺序不合适。
资源分配不当等。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则
就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。

死锁出现的必要条件:

互斥使用(资源独占) 
 一个资源每次只能给一个进程使用 
不可强占(不可剥夺) 
    资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放 
请求和保持(部分分配,占有申请) 
一个进程在申请新的资源的同时保持对原有资源的占有(只有这样才是动态申请,动态分配) 
循环等待 
存在一个进程等待队列 
    {P1 , P2 , … , Pn}, 
    其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路

资源分配图:

资源分配图用来精确描述系统资源分配场景(死锁)

资源分配图标识:

1、节点:进程节点P(每一个进程有一个节点),资源节点R(每一类有一个节点)

2、边:请求边(从进程节点指向资源节点),分配边()

 

画法:

Process



 

 

Resource Type with 4 instances



  

资源分配图的观察:

1、无环无死锁

2、有环可能死锁

a) 所有资源都是单资源实例

b) 多类资源,有一个资源有一个实例,其他资源有多个实例;环所涉及的资源只有一个实例

c) 无环一定无死锁

死锁实例:



  

活锁

如果有太多进程或操作在短时间内大量请求同一资源出现了活锁;

特点:

好像停滞了,但可以解开;

数据库例子:如果食物T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然在等待。然后T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求,……,T2有可能永远等待,这就是活锁的情形

网络的例子:中断活锁;

网卡速率变化导致数据包处理方式的变化

中断->轮询

三种处理死锁的方式:

1、死锁的预防和避免

预防:防止死锁出现;

避免:评估死锁是否会发生进行评估,如果有可能则不执行;

2、死锁的检查和恢复

3、鸵鸟策略:不管它,忽略

鸵鸟策略看似可笑,但是应用还是比较广泛的:

数学家观点(理论型,完美主义者):

希望世界完美无缺

有问题就必须处理,无论任何代价

工程师观点(实践):

能够工作就可以

有问题(死锁):频率、危害、处理代价进行比较

死锁频率<其他故障频率

处理代价>大于处理代价

死锁避免和预防方法:

1、消除互斥——非共享资源必须互斥访问,可共享资源无需互斥访问。

什么是共享?现代操作系统中,几乎所有的资源都是共享的,但这样的共享只是宏观意义上的,微观上,共享分为分时共享CPU、打印机,和同时共享如只读文件

2消除持有并等待——进程请求资源时不持有任何资源

执行前请求所有资源(不一定可行,因为一个进程执行前,不一定知道自己需要多少资源)

在请求资源前先释放所有资源

这个方式的缺点:有可能一个进程申请了资源但很久才用,有可能一个进程需要多个资源,不是所有资源都不是一次性能申请到的;

3、消除非抢占——请求的资源不可得时已持有的资源可被抢占(隐式释放)

这样的方式只能用于一些特殊情况:只能用于状态可以保存和恢复的资源

4、循环等待条件的消除

以上就是今天给大家补的知识~~希望以后继续跟大家共同进步~~~

<!--EndFragment-->
  • 大小: 17.5 KB
  • 大小: 1.3 KB
  • 大小: 581 Bytes
0
0
分享到:
评论

相关推荐

    关于多线程入门的最基础的知识(里面包括例程讲解)

    本资料包是针对多线程入门的学习资源,涵盖了多线程的基础概念、创建与管理以及同步控制等多个方面。 首先,让我们了解什么是多线程。在单线程系统中,程序的执行是顺序的,而多线程则允许在一个进程中同时运行多个...

    Java并发编程从入门到精通(pdf)(附源码)

    本书首先会介绍Java并发编程的基础概念,包括线程的创建与管理、同步机制如synchronized关键字和Lock接口,以及如何避免常见的并发问题,如死锁、活锁和饥饿。这些基础知识是理解并发编程的基石,通过深入浅出的讲解...

    java基础知识详解 Java入门必看 Java面试题集锦

    这份资料集主要涵盖Java基础知识、初学者入门指南以及常见的Java面试题,旨在帮助学习者系统地理解和掌握Java的核心概念。 首先,Java基础知识是理解任何Java程序的基础。这包括: 1. **Java环境搭建**:学习如何...

    JAVA入门实例代码及学习笔记

    理解线程同步和互斥,以及如何处理死锁等问题,是提高程序并发性能的关键。 8. **进阶知识点**:除了基础概念,进阶知识点可能包含反射、IO流、网络编程、设计模式等。反射允许程序在运行时动态访问类的信息,IO流...

    深入浅出Oracle:DBA入门

    本书《深入浅出Oracle:DBA入门、进阶与诊断案例》由盖国强编著,由人民邮电出版社出版,旨在为初学者提供全面的Oracle数据库管理入门知识,并为有一定经验的DBA提供进阶技巧和实际案例分析。 首先,本书开篇可能会...

    Oracle入门与精通

    在精通阶段,你将深入到Oracle的并发控制机制,如多版本并发控制(MVCC)和事务管理,这将有助于理解并发操作中的死锁和锁定问题。性能调优是Oracle学习的重要部分,包括SQL优化、索引策略、表分区、物化视图以及...

    Java并发编程从入门到精通源码.rar

    Java并发编程是Java开发中的重要领域,特别是在大型分布式系统、多线程应用和服务器端程序设计中不可或缺。这个资源包“Java并发编程从入门到...通过实践和调试源码,可以更好地掌握这些知识点,提高解决问题的能力。

    java入门基础课件

    Java是一种广泛使用的面向对象的...总的来说,这个"java入门基础课件"涵盖了Java编程的关键知识点,从基础语法到高级特性,都是学习Java必不可少的内容。通过深入学习和实践,初学者可以逐步成长为熟练的Java开发者。

    Java入门基础.pdf

    * Java程序死锁问题原理及解决方案 * 线程锁技术 * 定时器、互斥、同步通信技术 * 多个线程之间共享数据的方式探討 * 使用JDK5中同步技术的3个面试题 集合框架 * 集合框架基础 * Collection接口 * List接口 * Set...

    《Java 基础入门(传智播客)》_高清中文版pdf 网盘链接

    ### Java基础入门核心知识点概览 #### 1. Java简介与安装 - **Java概述**:介绍Java的历史背景和发展趋势,以及Java的特点,如平台无关性、面向对象特性等。 - **JDK/JRE/JVM的区别**:解释Java Development Kit...

    j2ee非常适合入门

    8. **J2SE学习笔记(7)多线程.DOC**:多线程是并发编程的关键,这部分可能会讲解线程的创建、同步、生命周期管理以及死锁问题。 这些笔记为学习J2EE打下了坚实的基础。一旦掌握了J2SE,就可以进一步学习J2EE的...

    SQLServer 2008编程入门经典(第3版)

    - **事务与锁机制**:介绍事务处理的基础知识,包括ACID属性、隔离级别选择,以及锁的类型和如何避免死锁等问题。 ### 安全性与备份恢复 - **权限管理**:讲解如何设置用户权限,确保数据库的安全访问控制。 - **...

    ORACLE11从入门到精通

    通过深入学习以上知识点,并结合《Oracle 11g从入门到精通》这本书的PDF内容,你可以系统地掌握Oracle 11g数据库的使用和管理,从而在实际工作中游刃有余。在实践中不断巩固理论知识,你将能够成为一个熟练的Oracle...

    zookeeper系列1:入门

    **Zookeeper系列1:入门** Zookeeper是一款分布式协调服务,由Apache基金会开发,广泛应用于分布式系统中的数据共享、配置管理、命名服务、集群同步等场景。它的设计目标是简化分布式环境下的复杂问题,提供高可用...

    详细讲解数据库的基本知识,让你入门,有很多简单的应用实例

    本教程将带你深入了解数据库的基本概念,帮助你轻松入门,并通过一系列简单应用实例让你掌握实际操作。 一、数据库基础 1. 数据库定义:数据库是一个有组织的数据集合,它能提供数据的存储、查询、更新和管理等功能...

    java入门笔记.pdf

    这是Java开发者需要具备的核心知识之一,因为不当的内存管理可能会导致内存泄漏等问题。 整体来看,这份Java入门笔记是一份非常详尽的参考资料,适合初学者和有一定基础的开发者深入学习Java语言及其相关技术。通过...

    Windows应用程序开发入门到精通十四:复杂的问题,一流的解决方案

    在“Windows应用程序开发入门到精通十四:复杂的问题,一流的解决方案”这一主题中,我们主要探讨的是在Windows平台上进行应用程序开发的一些高级技术和策略,用于解决在实际开发过程中可能会遇到的复杂问题。...

    java 新手入门手册

    以下是一些关于"Java新手入门"的关键知识点: 1. **Java环境设置**:在开始编程之前,你需要安装Java Development Kit (JDK)。JDK包含了编译Java源代码所需的Java编译器(javac)和其他工具。安装后,还需要配置...

    SQL SERVER-2008从入门到精通.pdf

    《SQL SERVER 2008从入门到精通》是一本专为初学者和进阶者设计的教程,全面覆盖了SQL Server 2008的各项核心功能和实用技术。SQL Server是微软公司推出的一种关系型数据库管理系统,广泛应用于数据存储、分析和报表...

Global site tag (gtag.js) - Google Analytics