死锁相关知识的学习
2016-05-19 09:40
211 查看
死锁的概念
一组进程中,每个进程都无限等待被改组进程中另一个进程所占有的资源,因而永远无法得到的资源,这种现象称为进程死锁,这一组进程就称为死锁进程。
如果死锁发生,会浪费大量系统资源,甚至导致系统崩溃。
需要注意:
参与死锁的所有进程都在等待资源
参与死锁的进程是当前系统中所有进程的子集
死锁出现的原因:
1.资源数量有限、锁和信号量错误使用
1.1 [b]资源的使用方式: “申请-分配-使用-释放”模式[/b]可重用资源:可被多个进程多次使用:
可抢占资源和不可抢占资源
例如:处理器、I/O部件、内存、文件、数据库、信号量
可消耗资源:只可使用一次,可创建和销毁的资源
例如:信号、中断、消息
1.2 [b]进程竞争可重用资源[/b]
例子1:
其中 T:磁盘设备;D: 磁带设备;
进程Q申请到了磁带设备再等待磁盘文件,而P申请到了磁盘文件,等待磁带设备。两个互相等待就出现了死锁现象。
例子2:
其中现在系统可分配内存为200KB
如果P1申请到80KB,P2申请到70KB,他们要接着申请剩余需要的资源,都申请不到 ,均要等待,会出现死锁现象。
1.3 [b]进程竞争可消耗资源[/b]
活锁和饥饿:
// 应用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占有的资源,形成一个进程的等待环路
相关文章推荐
- 应用领航:盘点那些年我们一起追过的OS
- 无奇不有!盘点各国自己开发的操作系统
- Oracle外键不加索引引起死锁示例
- SQL2005查看死锁存储过程sp_who_lock
- 可自定义oem的萝卜家园 Ghost XP 新春装机版 V200801 下载
- SQL2008中SQL应用之- 死锁(Deadlocking)
- 详解SQL死锁检测的方法
- C#中lock死锁实例教程
- 记一次公司仓库数据库服务器死锁过程及解决办法
- C#实现判断操作系统是否为Win8以上版本
- 利用sys.sysprocesses检查SqlServer的阻塞和死锁
- 深入浅出解析mssql在高频,高并发访问时键查找死锁问题
- js获取本机操作系统类型的两种方法
- Linux操作系统添加新硬盘方法
- 讲解Oracle数据库中结束死锁进程的一般方法
- java如何获取本地操作系统进程列表
- PHP 解决session死锁的方法
- Linux rdesktop操作系统下远程登录Windows XP桌面
- 32位操作系统认出超出4G内存的方法
- Linux rpm tar 操作系统下软件的安装与卸载方法