您的位置:首页 > 其它

死锁相关知识的学习

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占有的资源,形成一个进程的等待环路
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息