放弃 (3)

放弃 (3)

2024 南京大学《操作系统:设计与实现》
放弃 (3)

反思:状态机模型的隐含假设

状态迁移

  • 选择一个线程,执行一条指令
  • “顺序一致性” (sequential consistency)

单处理器多线程符合这个假设

  • 处理器会保证指令 “看起来” 顺序完成
  • 处理器也是编译器 (oops... 感觉不好的事情要发生了)
    • 预取状态机执行的若干步,然后像编译器一样优化
    • Load(x); Store(y)
    • xyx \ne y → 两条指令执行的先后顺序就无所谓
    • Load cache miss → store 可以直接执行
2024 南京大学《操作系统:设计与实现》
放弃 (3)

放弃全局顺序存在的假设

共享内存推翻了 “统一上帝视角” 的存在性

  • 就像相对论中,时间顺序的相对性
    • AABB 没有因果关系,例子:Load(x) v.s. Store(y)
    • 两个观测者可以分别看到 ABA \to BBAB \to A
    • 观测的相对性使全局世界的行为 “极难理解”

不同处理器可能看到不同的共享内存

  • “一个共享内存” 只是个简化的幻觉
  • Reading: Memory Models by Russ Cox
2024 南京大学《操作系统:设计与实现》
放弃 (3)

你以为的共享内存

模型是这么建的

2024 南京大学《操作系统:设计与实现》
放弃 (3)

实际的共享内存

😱😱😱

2024 南京大学《操作系统:设计与实现》
放弃 (3)

“相对论效应” 带来的后果

int x = 0, y = 0;

void T1() {
  x = 1; int t = y; // Store(x); Load(y)
  __sync_synchronize();
  printf("%d", t);
}

void T2() {
  y = 1; int t = x; // Store(y); Load(x)
  __sync_synchronize();
  printf("%d", t);
}

Model Checker: 01 10 11

  • 实际:00 (????)
2024 南京大学《操作系统:设计与实现》
放弃 (3)

“相对论效应” 带来的后果 (cont'd)

CPU 设计者面临了难题

  • 更强的内存模型 = 更糟糕的性能,但更容易编程
  • x86:市面 “最强” 内存模型 (类比 ARM/RISC-V)

center

因此,在 ARM 上模拟 x86 是个世界性的难题

2024 南京大学《操作系统:设计与实现》