您的位置:首页 > 数据库

读书笔记-现代操作系统-6死锁-6.7其他问题

2016-07-13 15:52 337 查看

6.7 其他问题

6.7.1 两阶段加锁

数据库中常用的,两阶段加锁:

进程试图对所有所需的记录进行加锁,一次锁一个记录。如果第一阶段加锁成功,就开始第二阶段,完成更新过后然后释放锁。如果第一阶段加锁失败,那么该进程释放它所有加锁的记录,然后重新开始第一阶段。

这种方法类似于提取或者至少是未释放一些不可逆操作之前请求所有资源。

6.7.2 通信死锁

两个或者两个以上进程利用发送信息来通信时,当进程a向进程b发送请求信息,然后阻塞直至b回复,假设请求信息丢失,而a将阻塞以等待回复,而b会阻塞等待一个向其发送命令的请求,因此发生死锁。

每个进程因为等待另外一个进程引发的事件而产生阻塞,这就是一种死锁。这样的死锁就是通信死锁。

通常来说中断通信死锁的方式是超时。

6.7.3 活锁

轮询(忙等待)可用于进入临界区或存取资源。这样也会导致类似死锁的情况,虽然两个进程都没有阻塞或休眠,这样的情况呗称为活锁(livelock)。

在一些系统中限制了最大进程数,如果有活锁会导致占用一些进程进入活锁无法被有效利用。

通常当进程表满了之后再过一段时间尝试fork。

6.7.4 饥饿

在动态运行的系统中,任何时刻都可能请求资源。这时候需要一些决策系统来判断分给那个进程资源。如果决策系统设计的问题导致一些进程时钟无法得到自己的资源会导致饥饿(starvation)现象。

通常饥饿可以通过先到先服务来解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息