我想知道如何单个CPU ,我认为它有一个cpu堆栈和一个注册表集(每个寄存器只有一个实例),运行同时进行多个流程?
每次更改堆栈和寄存器时,它是否会更改当前正在运行的进程?例如,进程X在0x03
中的值为EAX
,但进程Y在该寄存器上的值为0x02
。那么当CPU从执行X进程的指令切换到执行Y进程的指令时,CPU如何处理切换EAX
寄存器的值? (因为每个过程都与预期的EAX
一起使用 - 之前存储在那里的那个
我无法找到有关此信息,但我会接受链接到相关信息来源的答案。
很抱歉,如果问题不清楚,我会尽可能地澄清一下,所以请问是否还有不清楚的地方。
注意: 我不是指线程,因为据我所知,我使用相同的寄存器,编译器会构建正确的代码,以便它们能够很好地协同工作。 (如果我错了请纠正我!)
答案 0 :(得分:4)
单个处理器中的并发只会在一段时间内中断进程,并让另一个进程执行。当然,每个进程都有不同的寄存器,包括指向当前使用的堆栈位置 - 这个信息称为 context 。
每当进程进入挂起模式时,其上下文将保存在内存/堆栈中。然后,处理器恢复(或创建)新进程的上下文。当第一个进程再次执行时,其上下文将被恢复。
此上下文切换由软件(操作系统)或硬件完成。
答案 1 :(得分:0)
处理器定义上下文块结构。名称和格式取决于系统。处理器通常只有一条指令来保存当前进程上下文并加载进程上下文。
操作系统维护进程上下文块并指示处理器加载和保存。
进程上下文包含所有通用寄存器,指示标志寄存器和地址空间定义寄存器的值。数据量相当大,因此加载和保存过程上下文往往是一个相对冗长的过程。