死锁相关知识的学习

死锁的概念

一组进程中,每个进程都无限等待被改组进程中另一个进程所占有的资源,因而永远无法得到的资源,这种现象称为进程死锁,这一组进程就称为死锁进程。

如果死锁发生,会浪费大量系统资源,甚至导致系统崩溃。

需要注意:

  • 参与死锁的所有进程都在等待资源
  • 参与死锁的进程是当前系统中所有进程的子集

死锁出现的原因:

1.资源数量有限、锁和信号量错误使用
1.1 资源的使用方式: “申请-分配-使用-释放”模式
  • 可重用资源:可被多个进程多次使用:
    • 可抢占资源和不可抢占资源
    • 例如:处理器、I/O部件、内存、文件、数据库、信号量
  • 可消耗资源:只可使用一次,可创建和销毁的资源
    • 例如:信号、中断、消息
1.2 进程竞争可重用资源

例子1:
这里写图片描述


其中 T:磁盘设备;D: 磁带设备;
进程Q申请到了磁带设备再等待磁盘文件,而P申请到了磁盘文件,等待磁带设备。两个互相等待就出现了死锁现象。
例子2:
这里写图片描述


其中现在系统可分配内存为200KB
如果P1申请到80KB,P2申请到70KB,他们要接着申请剩余需要的资源,都申请不到 ,均要等待,会出现死锁现象。


1.3 进程竞争可消耗资源

这里写图片描述


活锁和饥饿:

// 应用Peterson算法
void process_A
{
    enter_region(&resource_1);   //获取资源的使用权
    enter_region(&resource_2);
    use_both_resource();
    leave_region(&resource_2);
    leave_region(&resource_1);
}

void process_B
{
    enter_region(&resource_2);
    enter_region(&resource_1);
    use_both_resource();
    leave_region(&resource_1);
    leave_region(&resource_2);
}
活锁现象:
  • 先加锁;
  • 再轮询;
  • ——>即无进展也没有阻塞
饥饿:

资源分配策略决定的


产生死锁的四个必要条件:

  • 互斥使用(资源独占):
    一个资源每次只能给一个进程使用

  • 占有且等待(请求和保持,部分分配):
    进程在申请新的资源的同时保持对原有资源的占有

  • 不可抢占(不可剥夺):
    资源的申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者资源释放

  • 循环等待:
    存在一个进程等待队列{P1,P2,P3,…,Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程的等待环路

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值