如何告知处理核心执行其他操作?

如何告知处理核心执行其他操作?

我对计算机操作系统中的调度/多任务处理有一些疑问。如果细节是特定于平台的,我指的是在 x86 上运行的 Linux。

我理解调度程序是操作系统的一个组件,它将执行线程分配给物理处理核心(假设没有超线程)。我的问题是,调度程序如何告诉核心停止从内存中当前位置执行代码,并从内存中的不同位置开始执行代码?这似乎是调度程序发送到处理核心的某种中断,但据我所知,中断最终会返回到原始执行线程。(因为它们“打断”了对话,而不是改变主题。)

我会阅读 Linux 调度程序代码,但我对 C 的理解并不那么深入。

答案1

定时器中断由操作系统设置,因此执行将返回操作系统。这是我对该过程的理解,可能缺少更详细的信息。

  1. 操作系统将要执行的程序的 CPU 状态信息加载到内存中
  2. 操作系统设置一个中断定时器,说“this interrupt handler在 50uS 内戳一下”(或其他时间片)
  3. 操作系统通过以下方式告诉 CPU“切换”到程序context switch并保存当前 OS 任务的状态
  4. CPU 执行程序
  5. 时间耗尽时触发中断,导致 CPU 将当前程序状态卸载到内存并启动中断处理程序
  6. 中断处理程序本质上设置并执行另一个上下文切换或简单分支(这次不需要任何中断)到操作系统调度程序。
  7. 调度程序寻找下一个准备运行的任务并返回步骤 1。

相关内容