"读取之前读取的内容"内存排序意味着什么?

时间:2016-09-27 23:25:08

标签: multithreading memory operating-system read-write memory-model

让我们考虑一下这句话(Total Store Ordering):

  

读取在读取之前排序,在写入之前写入,在写入之前读取,而不是在读取之前读取。

我想我几乎得到了基础知识:

  • 每个线程都有自己的程序顺序(代码编写)
  • 通常,CPU可能会重新排序说明,我们必须限制它以排除错误的排序
  • CPU也可能重新排序内存加载和存储,我们也必须限制它们
  • 当前的硬件实现具有"序列化指令"像mfence一样,所有线程都会调用它来解决这两个问题。
  • 硬件通常只允许一个脏缓存,因此它只是刷新缓存:
    • 存储线程刷新脏缓存
    • 加载线程请求和阻塞,直到没有脏缓存
  • 内核开发人员关心CPU访问内存以外的其他设备,但我不知道。

然而,我仍然无法理解"读取之前读取的内容"实际意思。这可能意味着这些架构中存在隐含的障碍和序列化指令,但我无法说明。

1 个答案:

答案 0 :(得分:0)

我很确定我在希腊大学的操作系统课程中听说过,该死的,我用教授的声音读了它。 :)由于没有人回答,我会尝试回答。

想象一下你是操作系统,每个线程/程序都想执行读写操作。现在,由于我们讨论的是多线程,一个线程可能会读取另一个线程编写的内容,比如变量的值。

现在,如果线程1想要读取内存地址x,并且线程2也想执行读取x,那么允许它们读取{{} 1}}以任何顺序。我认为这意味着什么!

希望它能以某种方式帮助,因为我知道它不是最好的答案! :/