在现代操作系统中发生死锁时?

时间:2017-09-27 17:59:55

标签: operating-system deadlock

我知道死锁在过去是一个热门的研究课题。但是,即使我研究了很多现代操作系统,我现在也看不到任何关于死锁的重大问题。我知道一些(大多数)资源可以通过操作系统本身严格管理死锁,并且似乎它可以防止死锁,我真的没有看到任何与死锁相关的情况。我知道有很多关于资源处理的功能与具有不同设计原则的流行系统中的其他功能不同,但它们都可以保持系统无死锁。

2 个答案:

答案 0 :(得分:0)

尝试在程序中使用两个互斥锁,并在第一个线程中按顺序关闭:mutex1,sleep(500ms),mutex2,在第二个线程中:mutex2,sleep(1000ms),mutex1。

在系统中。在Windows(包括8.1)中,如果您的应用程序使用SendMessage并广播HWND_BROADCAST - 如果一个应用程序挂起,您的应用程序也将处于挂起状态。此外,在DDE通信的部分情况下(包括部分程序的ShellExecute),如果一个应用程序没有响应,您的应用程序可能处于挂起状态。

但你可以使用SendMessageTimeout ......

如果要同步进程或线程,则始终可以进行死锁。进程和线程的同步是一个必须拥有的"应用要素。

AND ... SYSTEM-WIDE死锁(Windows): 在此操作之前保存所有文档。

Create HWND h1 with parent=0 or parent=GetDesktopWindow and styles 0x96cf0000
Create HWND h2 with parent=h1 and styles 0x96cf0000
Create HWND h3 with parent=h2 and styles 0x56cf0000 (here must be a child window).
Use ::SetParent(h1, h3);

然后单击这些窗口中的任何一个。

系统将以循环(三角形)顺序尝试重新排序窗口。应用程序挂起但如果任何其他应用程序将尝试使用SetWindowPos,则应用程序将从此函数更新返回。任务管理器不会提供帮助,Alt + Ctrl + Del也会停止工作。 100%的CPU使用率...只有硬重置才能帮到你。

有可能阻止它,但必须尽快检测到这种情况。

答案 1 :(得分:0)

操作系统死锁仍然存在。当系统具有有限的竞争资源时,它仍然无法回收死锁。

在linux中,查看内核停顿,这些都发生在I / O未及时释放时。内核停顿在vmware和客户操作系统之间特别有趣。

对于外部煽动者,当系统和网络出现问题时会发生死锁。

新版本的死锁在成熟内核时经常发生,而不是每个用户,而是整个社区。

是否有蓝屏或即时重启?其中一些是由资源损失引起的。

内核相当成熟,并且擅长回收资源,但并不完美。

大多数现代资源处理程序现在倾向于作为服务呈现,而不是可锁定对象。操作系统内的大多数资源共享依赖于单独的通道,从而减轻了大部分重叠。对队列和切换的依赖程度更高,而不是共享缓冲区上的直接锁定争用。这些是操作系统部件和部件趋势的一般性,这些趋势有助于减少死锁的机会,但是没有办法保证减少死锁系统。