多处理器架构中堆栈指针和程序状态字是如何维护的?

Jey*_*ram 1 operating-system processor computer-architecture cpu-registers multiprocessing

在多处理器架构中,寄存器是如何组织的?

例如,在 4 核处理器中,一次至少可以运行 4 个进程。
堆栈指针、程序状态寄存器和程序计数器是如何组织的?

其他通用寄存器呢?

我的猜测是,每个内核都有一组单独的寄存器。

Bre*_*dan 5

想象一下 4 台完全独立的计算机,每台计算机都有一个单核 CPU。四核计算机就是这样;除了:

  • 所有 CPU 共享相同的物理地址空间(并且都可以使用相同的 RAM、PCI 设备等)
  • 可以设计中断/IRQ 控制器,以便操作系统可以告诉它哪些 CPU/s 应该被 IRQ 中断
  • CPU 通常能够相互发送信号(例如“处理器间中断”)
  • 一些 CPU 可能会共享一些缓存
  • 一些 CPU 可能共享一些控制寄存器(例如用于电源管理、缓存配置等)
  • 对于现代 CPU,某些 CPU 可能共享部分或全部执行单元(SMT、超线程等)
  • 对于现代系统(其中内存控制器内置在物理芯片中),一些 CPU 可能共享相同的内存控制器

其中大部分对大多数软件来说都是“不可见的”。除非您正在编写控制电源管理的操作系统的一部分,否则您无需关心电源管理是否在 CPU 之间共享;除非您正在编写操作系统/内核的低级 IRQ 处理,否则您无需关心 IRQ 如何到达设备驱动程序等。

这同样适用于实际存在的 CPU 数量。操作系统/内核通常确保应用程序只需要关心更高级别的抽象(例如“线程”)。这种更高级别的抽象如何工作取决于操作系统 - 通常(对于大多数操作系统)操作系统 / 内核试图通过在它们之间“足够快地”(如果只有 4 个 CPU)切换来提供所有线程同时运行的错觉实际上最多有 4 个线程同时运行),但它通常比这复杂得多(涉及线程优先级、抢占规则等)并且(即使它相对罕见)它可能非常不同(例如,对于某些系统,出于容错/冗余目的,同一线程可能会同时在多个 CPU 上运行;对于某些系统,可能只有一个函数及其数据队列,其中多个函数同时运行;等等)。

  • 4个程序计数器、4组通用寄存器、4个堆栈等 (2认同)