9

我正在研究Silberschatz、Galvin 和 Gagne的操作系统概念中的操作系统。

在第 229 页,这本书对Petersons 解决方案进行了说明:

由于现代计算机体系结构执行基本机器语言指令(例如加载和存储)的方式,不能保证 Peterson 的解决方案在此类体系结构上正确工作。

我在Wikipedia上查找了这个,发现这似乎是最接近解释的:

大多数现代 CPU 重新排序内存访问以提高执行效率。这样的处理器总是提供一些方法来强制在内存访问流中进行排序,通常是通过内存屏障指令。在重新排序内存访问的处理器上实施 Peterson 和相关算法通常需要使用此类操作才能正确工作,以防止顺序操作以不正确的顺序发生。请注意,即使在不重新排序指令的处理器上也可能发生内存访问的重新排序

我无法理解这意味着什么,或者这甚至是答案。

那么,为什么彼得森的解决方案不能保证适用于现代架构?

4

1 回答 1

5

在具有一个 CPU 的系统上,Peterson 的算法可以保证工作,因为程序自身的行为是按程序顺序观察的。

在具有多个 CPU 的系统上,该算法可能无法工作,因为在一个 CPU 上发生的事件的程序顺序在另一个 CPU 上可能会有不同的感知。

这可能会导致提前进入临界区(当它仍在被另一个线程使用时)和提前退出临界区(当共享资源的工作尚未完成时)。

因此,需要确保 CPU 内部发生的事件顺序与外部相同。内存屏障可以确保这种序列化。

于 2013-03-28T07:04:44.787 回答