【操作系统】——死锁

基础知识

一个进程需要向一个进程传递数据,后面的进程必须等到前面的进程到达才能继续运行,这是进程间的一种次序关系。称为同步

在引入线程的系统中,进程内的多个线程可以并发或并行运行

遇到问题:对资源不加限制地分配可能导致进程之间由于竞争资源而相互等待,以至于程序无法运行,这种局面称为死锁

临界资源(Critical Resource,CR):一次仅允许一个进程使用(必须互斥使用)的资源。如独占型硬件资源,可以由多进程访问的变量、表格、队列、栈、文件等软件资源。
临界段(Critical Section,CS):是指各进程必须互斥执行的那种程序段,该程序段实施对临界资源的操作。

哲学家聚餐问题

消息传递原理

① 共享存储(Shared Memory)方法。要通信的进程之间存在一片可直接访问的共享空间,通过对这片共享空间进行写/读操作实现它们之间的信息交换,如一个进程往这片共享空间写数据,而另一个进程从共享空间读取数据

② 消息传递(Message Passing)方法。消息传递的主要思想是:系统提供发送消息Send()与接收消息Receive()两个原语,进程间通过使用这两个原语进行数据交换

死锁的定义

死锁是指进程处于等待状态且等待的事件永远都不会发生

死锁必须满足4个必要条件:

条件1:互斥。

在出现死锁的系统中,必须存在需要互斥使用的资源。计算机系统中有存储器、CPU、外部设备、共享程序等各种资源。有些资源可以共享使用,有的必须独占使用,即互斥使用。若系统中所有资源均可共享使用,则进程不会处于等待资源的状态,因而不会出现死锁。那么可以肯定,如果系统出现了死锁,则必然存在需要互斥使用的资源。


条件2:占有等待。

在出现死锁的系统中,一定有已分配到了某些资源且在等待另外资源的进程。如果这个条件不满足,则所有等待资源的进程都不会占有任何资源,而资源的拥有者也不会处在等待资源的状态中。因此拥有资源的进程迟早会释放出它们所拥有的资源,从而使等待这些资源的进程结束等待状态。故条件2也是死锁必须满足的条件。


条件3:非剥夺。

在出现死锁的系统中,一定有不可剥夺使用的资源。不可剥夺是指在进程未主动释放资源之前不可夺走其已占资源。若资源都可剥夺,进程就不会进入僵持状态,也就不会出现死锁。


条件4:循环等待。

在出现死锁的系统中,一定存在一个处于等待状态的进程集合,表示为{P0,P1,…,Pn},其中Pi等待的资源被Pi+1占有(i=0,1,…,n-1),Pn等待的资源被P0占有,

循环等待只是死锁的必要条件

设计无死锁的系统通常采用下述两种途径:


① 死锁防止(Deadlock Prevention)

通过在应用编程时或资源分配管理设计时破坏死锁存在的必要条件来防止死锁发生。


② 死锁避免(Deadlock Avoidance)

在进行资源分配管理时,判断如果满足这次分配资源后是否仍存在一条确保系统不会进入死锁状态的路径,如果没有这样的路径,即使现有资源能满足申请,也拒绝分配。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值