如何在不中断 windows OS 上的其他程序的情况下让多个程序同时使用寄存器?

How more than a one program uses the registers simultaneously without interrupting other programs on the windows OS?

我一直在想 运行 在 同时 的多个程序如何使用 CPU 寄存器而不会引起程序之间的冲突Windows OS.

Windows OS 是否使用“虚拟寄存器”来避免这种情况(多个程序同时使用相同的寄存器)?

所以如果两个程序使用 eax 寄存器,OS 真的会改变物理 eax 寄存器吗?

或者它使用了一些“虚拟寄存器”,就像我上面提到的那样?

操作系统不使用虚拟寄存器,更改了物理寄存器。

在过去,机器只有一个 CPU 核心,并且在任何时间点实际上只有一个线程 运行 正在运行。每次不同的线程可以启动 运行ning 之前,OS 内核将保存旧线程的状态(寄存器)并恢复新线程的状态,然后才能继续。这称为上下文切换。切换发生在内核模式下,如果它切换到的线程位于不同的进程中,它也必须更改虚拟内存映射。

在具有多核的系统上,多个线程可以同时 运行,并且每个核都有自己的一组寄存器。

MSDN 在 Windows 上给出了 how context switching works 的粗略概述:

The scheduler maintains a queue of executable threads for each priority level. These are known as ready threads. When a processor becomes available, the system performs a context switch. The steps in a context switch are:

  • Save the context of the thread that just finished executing.
  • Place the thread that just finished executing at the end of the queue for its priority.
  • Find the highest priority queue that contains ready threads.
  • Remove the thread at the head of the queue, load its context, and execute it.

...

The most common reasons for a context switch are:

  • The time slice has elapsed.
  • A thread with a higher priority has become ready to run.
  • A running thread needs to wait.

如果你的程序运行正在抢占式多任务处理OS那么你不必考虑上下文切换是如何发生的以及为什么发生,你可以假装你总是在控制寄存器并且您的程序是唯一的程序 运行ning.