memory-management - 多处理器中存储缓冲区的顺序一致性?

标签 memory-management architecture multiprocessing buffer

  1. 具有写缓冲区的多处理器如何保持顺序一致性? 据我所知,在单处理器中,如果缓冲区是 FIFO 并且对主内存上待写入的元素的读取由缓冲区提供,则它可以保持一致性。 但它在国 session 员中如何运作呢?我认为如果一个处理器将一个存储放入他的缓冲区中,另一个处理器将无法读取它,并且我认为这会破坏顺序一致性。

  2. 它如何在每个线程都有写入缓冲区的多线程环境中工作?还破坏了顺序一致性?

最佳答案

您提到: http://www.cs.umd.edu/class/fall2001/cmsc411/proj01/cache/cache9.jpg

通常,CPU 只能看到随机访问;内存总线是顺序访问的这一事实对 CPU 本身是隐藏的,因此从 CPU 的角度来看,这里不涉及 FIFO。

在 SMP 现代机器中,有所谓的窥探控制单元,可以监视内存传输并在必要时使 RAM 的缓存副本无效。因此有专用的硬件来确保数据同步。这并不意味着它是真正同步的——总是有不止一种方法来获取无效数据(例如,在另一个 CPU 核心更改它之前已经将内存值加载到寄存器中),但这就是您所得到的在。

此外,多线程基本上是一个软件概念。因此,如果您需要同步软件 FIFO,则需要使用适当的锁定机制。

关于memory-management - 多处理器中存储缓冲区的顺序一致性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30909371/

相关文章:

c++ - 如果类有析构函数,堆数组会分配 4 个额外字节

c++ - 有人可以解释为什么 int 会根据系统架构呈现不同的大小吗?

Python 多处理——共享 id 的单独进程中的全局变量?

C - 多个子级 - 信号相互覆盖

Python进程没有加入

c++ - 从二叉树中删除一个二叉树节点

c++ - 内存溢出? std::badalloc

java - 如果我们将 SessionScoped bean 注入(inject)到 Stateless bean 中,如果没有 HTTP session 会发生什么?

oracle - Oracle数据库的开发架构

javascript - 将变量从对象内部传递到 setTimeout