如何在不中断 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.
我一直在想 运行 在 同时 的多个程序如何使用 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.