【问题标题】:Running multiple processes on a single CPU在单个 CPU 上运行多个进程
【发布时间】:2014-07-05 06:05:09
【问题描述】:

我想知道单个 CPU 怎么能我认为它有一个 cpu 堆栈和一个注册表集(每个寄存器只有一个实例)运行多个进程同时进行?

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

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

对不起,如果问题不清楚,我试图尽可能地澄清它,所以如果还有什么不清楚的地方,请询问。

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

【问题讨论】:

  • 线程实际上与进程非常相似,只是它们共享地址空间和文件描述符等操作系统资源。
  • @Mephy 谢谢,这正是我一直在寻找的解释!您可能想写一个答案,以便我接受。

标签: process operating-system cpu cpu-registers


【解决方案1】:

单个处理器中的并发只是中断一个进程一段时间,然后让另一个进程执行。当然,每个进程都有不同的寄存器,包括一个指向它当前使用的堆栈位置的寄存器——这个信息被称为context

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

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

【讨论】:

    【解决方案2】:

    处理器定义上下文块结构。名称和格式取决于系统。处理器通常只有一条指令来保存当前进程上下文并加载进程上下文。

    操作系统维护进程上下文块并指示处理器加载和保存。

    进程上下文包含所有通用寄存器、指示标志寄存器和地址空间定义寄存器的值。数据量比较大,所以加载和保存进程上下文往往是一个相对冗长的过程。

    【讨论】:

      猜你喜欢
      • 2016-10-11
      • 2021-04-18
      • 1970-01-01
      • 2013-06-28
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多