操作系统学习笔记---死锁

前面几篇文章已经讲解了关于进程与线程的知识,本节带来操作系统中的死锁。

正文

资源

一个进程在使用资源之前要申请资源,在用完之后必须释放资源。进程是按照它完成任务所需资源情况来申请资源的。显然,进程申请资源数量,不能超过系统中可用资源的总量。

可抢占资源

可抢占资源是另外进程可以从拥有它的进程那里把它抢占过去为己所用,并且不会产生任何不良影响。

不可抢占资源

不可抢占资源是不能从当前占有它的进程那里强行占有的资源,必须由拥有者自动释放,否则会引起相关计算的失效。死锁与不可抢占资源有关

死锁

所谓死锁,是指在一个进程集合中的每个进程都在等待仅由该集合中的另一个进程才能引发的事件而无限期地僵持下去的局面。计算机产生死锁的根本原因就是资源有限且操作不当。

死锁的条件

  • 互斥条件:独占资源在一段时间内只能由一个进程占有,不能同时被两个及以上的进程占有。
  • 占有且等待条件:进程至少已经占有一个资源,但又申请新的资源。由于该资源已被别的进程占有,此时该进程阻塞。
  • 不可抢占条件:一个进程所占有的资源在用完之前,其他进程不能强行夺走该资源,只能由该进程用完之后主动释放。
  • 循环等待条件:存在一个进程等待序列{p1,p2,...pn},其中,p1等待p2所占有的某个资源,p2等待p3所占有的某个资源,···,而pn等待p1所占用的某个资源,从而形成一个进程循环等待环

资源分配图

可以使用有向图的形式更精准地描述死锁,该图称为系统资源分配图。该图由结对组成:G=(V,E)。式子中,V是顶点的集合,E是边的集合。顶点集合可分为两部分:P={p1,p2,···,pn},它由系统中所有活动进程组成;R{r1,r2,···,rn},它由系统中全部资源类型组成。从进程pi到资源rj的一条又向边记作pi-->rj,表示进程pi申请一个单位的rj资源,但当前pi在等待该资源。从资源rj指向进程pi的有向记作rj-->pi,表示有一个单位的rj资源已分配给进程pi。有向边pi-->rj称为申请边,有向边rj-->pi称为赋给边。在资源分配图中,通常用圆圈表示每个进程,用方框表示每种资源类型。由于不同的资源类型可以有多个,所以用方框中的远点表示各个单位资源。应该注意,申请边要指向表示资源的方框,赋给边必须起于方框中的一个圆点。

环路与死锁

  • 如果每类资源的实体都只有一个,那么图中出现环路就说明死锁了。
  • 如果每类资源的实体不仅仅只有一个,那么资源分配图中出现环路并不代表一定出现死锁,在这种情况下,资源分配如中出现环路是死锁存在的必要条件,但不是充分条件。

处理死锁的方法

  • 利用某些协议预防或避免死锁,保证系统不会进入死锁状态
  • 允许系统进入死锁状态,然后设法发现并解除它
  • 完全忽略这个问题,好像系统中从来也不会出现死锁

死锁的预防

  • 破坏互斥条件:一般来说,用否定互斥条件的办法是不能预防死锁的,因为某些资源固有的属性就是独占的
  • 破坏占有且等待条件:为使系统从来不会出现“占有且等待”条件,需要保证一个进程无论什么时候都可申请它没有占有的任何其他资源。一种办法是“预分配资源策略”,即在一个进程开始执行之前就申请并分到所需的全部资源,从而它在执行过程中就不再需要申请另外的资源。还有一种办法“空手申请资源策略”,即每个进程仅在它不占有资源时才可以申请资源。
  • 破坏非抢占条件:隐式抢占方法:如果一个进程占有某些资源,他还要申请被别的进程占有的资源,该进程就一定处于等待状态。这时,该进程当前所占有的全部资源可被抢占。另一种方法:抢占等待者的资源,若一个进程申请某些资源,首先应检查它们是否可供使用,如果可用,就分配给该进程;如果它们不可用,就要查看:它们是否已经分配给另外某个正等待附加资源的进程。如果是这样的话,就把所需资源从等待进程那儿抢占过来,分配申请它们的进程。
  • 破坏循环等待条件:所有进程对资源的申请严格按照序号递增的次序进行(给资源设置编号)
时间: 2024-10-10 12:30:52

操作系统学习笔记---死锁的相关文章

Linux 操作系统学习笔记

一,unix 1.unix 特点 伸缩性强,开放性好, 2.基本原则 所有对象,硬件都是文件 配置数据以文本形式保存 短小的单目的程序构成 多个程序合作完成复杂任务 3.gnu 基本原则是共享,建立自由开放的unix系统 1984年 richard stallman 发起 基本体系是micro kernel 4.gpl Copyleft 原作者所有权 5.linux起源 Linustorvalds, 自由的类unix操作系统, 遵循gnu和gpl 6.linux 可以实现unix功能 遵循开源许

计算机操作系统学习笔记_1_操作系统概述

操作系统概述 一.操作系统的概念.特征.功能和提供的服务 1.操作系统的概念     操作系统是计算机系统中最重要.最基本的系统软件,操作系统位于硬件和用户程序之间.    对于用户来讲:它能向用户提供使用计算机的接口;    从资源管理角度来看:它能管理计算机软硬件资源,提高其利用率;    再者,利用虚拟机技术(如WMWare,VirtualBox,Java虚拟机等),扩展了计算机的功能和使用范围.     因此,操作系统的定义为:操作系统是控制和管理计算机软.硬件资源,以尽可能合理.高效的

RTX51 Tiny实时操作系统学习笔记—初识RTX51 Tiny

 一,RTX51 Tiny简单介绍 RTX51 Tiny是一种实时操作系统(RTOS),能够用它来建立多个任务(函数)同一时候运行的应用(从宏观上看是同一时候运行的,但从微观上看,还是独立运行的).嵌入式应用系统常常有这样的需求.RTOS能够提供调度.维护.同步等功能. 实时操作系统能灵活的调度系统资源,像CPU和存储器,而且提供任务间的通信.RTX51 Tiny是一个功能强大的RTOS,且易于使用,它用于8051系列的微控制器.该RTOS最多支持16个任务,基于RTX51 Tiny构建的应用程

计算机操作系统学习笔记_2_进程管理 --进程与线程(上)

h3.western { font-family: "Liberation Sans",sans-serif; }h3.cjk { font-family: "微软雅黑"; }h3.ctl { font-family: "AR PL UMing CN"; }h2.western { font-family: "Liberation Sans",sans-serif; font-size: 16pt; }h2.cjk { fon

计算机操作系统学习笔记_4_进程管理 --处理机调度

h3.western { font-family: "Liberation Sans",sans-serif; }h3.cjk { font-family: "微软雅黑"; }h3.ctl { font-family: "AR PL UMing CN"; }h1 { margin-bottom: 0.21cm; }h1.western { font-family: "Liberation Sans",sans-serif; f

操作系统学习笔记----进程/线程模型----Coursera课程笔记

操作系统学习笔记----进程/线程模型----Coursera课程笔记 进程/线程模型 0. 概述 0.1 进程模型 多道程序设计 进程的概念.进程控制块 进程状态及转换.进程队列 进程控制----进程创建.撤销.阻塞.唤醒.... 0.2 线程模型 为什么引入线程 线程的组成 线程机制的实现 用户级线程.核心级线程.混合方式 1. 进程的基本概念 1.1 多道程序设计 允许多个程序同时进入内存运行,目的是为了提高CPU系统效率 1.2 并发环境与并发程序 并发环境: 一段时间间隔内,单处理器上

ucos实时操作系统学习笔记——操作系统在STM32的移植

使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只有几千行代码的操作系统,也没所有的代码都看,只是看了其中部分内容.自己还自不量力的尝试着去写过简单的操作系统,最后写着写着就被带到了ucos的设计思路上了,后来干脆就“copy”代码了,虽说对操作系统内核的理解有很大的帮助,但是很是惭愧啊,智力不够,对操作系统内核的设计者更加仰慕,O(∩_∩)O哈哈

ucos实时操作系统学习笔记——任务间通信(消息)

ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了queue机制还要用mbox呢,只要设置queue的msg只有一个不就行了?其实很简单,就是为了节约资源,因为使用queue的话需要专门描述queue的机构体os_q,同时需要分配一段内存用来存放msg,而如果直接使用mbox机制的话,就好多了,节约..... 首先从mbox的创建开始,mbox创建的函

操作系统学习笔记——线程

这篇博客是本人操作系统课的学习笔记,因为是"双语授课",所以有些中英夹杂. 本篇文章禁止转载 版权声明:本文为博主原创文章,未经博主允许不得转载.