我想知道一个 CPU 如何,我假设它有一个 cpu 堆栈和一个注册表集(每个寄存器只有一个实例),运行多个进程并发?
它是否在每次更改当前运行的进程时更改堆栈和寄存器?例如,进程 X 在 EAX
中的值为 0x03
,但进程 Y 在该寄存器中的值为 0x02
。那么当CPU从执行X进程的指令切换到执行Y进程的指令时,CPU如何处理EAX
寄存器值的切换呢? (因为每个进程都使用它期望的 EAX
- 它之前存储在那里的那个)
我找不到关于此的信息,但我会接受链接到具有相关信息的来源的答案。
抱歉,如果问题不清楚,我已尽力澄清,所以请询问是否还有任何不清楚的地方。
注意: 我不是指线程,因为据我所知,它们使用相同的寄存器并且编译器构建正确的代码,以便它们都能很好地协同工作。 (如果我错了请纠正我!)
最佳答案
单处理器中的并发只是中断一个进程一段时间,让另一个进程执行。当然,每个进程都有不同的寄存器,包括指向其当前使用的堆栈位置的一个指针 - 此信息称为上下文。
每当一个进程进入挂起模式时,它的上下文就会保存在内存/堆栈中。然后处理器恢复(或创建)新进程的上下文。当第一个进程要再次执行时,它的上下文被恢复。
此上下文切换由软件(操作系统)或硬件完成。
关于process - 在单个 CPU 上运行多个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23701157/