process - 在单个 CPU 上运行多个进程

标签 process operating-system cpu cpu-registers

我想知道一个 CPU 如何我假设它有一个 cpu 堆栈和一个注册表集(每个寄存器只有一个实例)运行多个进程并发?

它是否在每次更改当前运行的进程时更改堆栈和寄存器?例如,进程 X 在 EAX 中的值为 0x03,但进程 Y 在该寄存器中的值为 0x02。那么当CPU从执行X进程的指令切换到执行Y进程的指令时,CPU如何处理EAX寄存器值的切换呢? (因为每个进程都使用它期望的 EAX - 它之前存储在那里的那个)

我找不到关于此的信息,但我会接受链接到具有相关信息的来源的答案。

抱歉,如果问题不清楚,我已尽力澄清,所以请询问是否还有任何不清楚的地方。

注意: 我不是指线程,因为据我所知,它们使用相同的寄存器并且编译器构建正确的代码,以便它们都能很好地协同工作。 (如果我错了请纠正我!)

最佳答案

单处理器中的并发只是中断一个进程一段时间,让另一个进程执行。当然,每个进程都有不同的寄存器,包括指向其当前使用的堆栈位置的一个指针 - 此信息称为上下文

每当一个进程进入挂起模式时,它的上下文就会保存在内存/堆栈中。然后处理器恢复(或创建)新进程的上下文。当第一个进程要再次执行时,它的上下文被恢复。

上下文切换由软件(操作系统)或硬件完成。

关于process - 在单个 CPU 上运行多个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23701157/

相关文章:

java - 读取其他进程的**无缓冲**输出流

c++ - 从十六进制转换为 LPCVOID 切断了地址的一半

java - 可以使用 64 位 java 库执行 32 位导出的 jar 文件吗?

php在后台执行()函数

unix - 如何识别哪个守护进程正在写入文件

python - 获取最新修改的文​​件并作为输入传递给子流程

linux - 如何开始实现线程库?

language-agnostic - 如果 32 位和 64 位 CPU 之间的唯一区别是它们的寄存器大小,那么为什么必须为 64 位平台重写 32 位程序?

linux - 有没有办法在 Linux 系统上禁用 CPU 缓存(L1/L2)?

ios - 随机数生成语法正确,但 CPU 使用率达到 100% 并且其他应该同时发生的事情没有发生