Operating system 威尔·彼得森';s的解决方案在现代CPU体系结构上是否正常工作?

Operating system 威尔·彼得森';s的解决方案在现代CPU体系结构上是否正常工作?,operating-system,critical-section,Operating System,Critical Section,我正在学习Silberschatz、Galvin和Gagne的操作系统 在第229页,该书阐述了以下内容: 因为现代计算机体系结构执行基本机器的方式 语言指令,如加载和存储,没有任何保证 Peterson的解决方案将在这样的体系结构上正常工作 我查了一下,发现这似乎是最接近的解释: 大多数现代CPU重新排序内存访问以提高执行效率。这样的处理器总是提供某种方式来强制在内存访问流中排序,通常是通过内存屏障指令。在对内存访问进行重新排序的处理器上实现Peterson算法和相关算法通常需要使用这些操作才

我正在学习Silberschatz、Galvin和Gagne的操作系统

在第229页,该书阐述了以下内容:

因为现代计算机体系结构执行基本机器的方式 语言指令,如加载和存储,没有任何保证 Peterson的解决方案将在这样的体系结构上正常工作

我查了一下,发现这似乎是最接近的解释:

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

我很难理解这意味着什么,或者这是否是答案


那么,为什么彼得森的解决方案不能保证在现代体系结构上工作呢?

在一个只有一个CPU的系统上,彼得森的算法可以保证工作,因为程序本身的行为是按程序顺序观察的

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

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


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

彼得森的解决方案是什么?这是解决什么问题的办法?我不确定你的问题是否属于StackOverflow,它似乎与源代码无关。@BasileStarynkevitch链接到维基百科页面。关于操作系统的概念有很多问题。此外,软件算法问题是根据的主题。我对该问题的理解与过早释放锁的任何其他时间相同:第二个进程将被授予访问权限,但第一个进程可能仍有数据要写入(或读取)。这可能会导致第二个进程使用过时的数据。@大多数情况下,进程在完成其关键部分的执行之前不会释放锁,在这种情况下,它必须执行的任何数据操作都会完成。你指的是什么陈旧数据?@AshRj:从实现的角度考虑锁——“释放”锁是通过内存写入完成的。如果我写入数据,然后“释放”锁,但它被重新排序为相反的顺序,那么在写入数据之前,我的锁将被释放。这使另一个进程有机会开始自己的内存访问。什么样的重新排序会导致它无法工作?@sudeepdino008内存读/写重新排序w.r.t.其他内存读/写。如果系统中有两个或多个CPU,并且内存读/写的重新排序不受限制(例如内存屏障/围栏),则依赖顺序的某些算法将中断。彼得森的算法将崩溃。