返回

Linux 内核之进程调度时机逐个击破

闲谈

Linux 内核中,进程调度的时机主要有以下几种:

  • 进程上下文 :当进程正在运行时,可能会发生中断或系统调用,导致进程被中断或切换到系统调用处理程序中。在这些情况下,内核会将进程的状态保存起来,以便在中断或系统调用处理完成后恢复进程的执行。
  • 中断上下文 :当发生中断时,内核会进入中断上下文。在中断上下文中,内核会处理中断并调用相应的中断处理程序。当中断处理程序执行完成后,内核会恢复到进程上下文,继续执行被中断的进程。
  • 系统调用上下文 :当进程执行系统调用时,内核会进入系统调用上下文。在系统调用上下文中,内核会执行系统调用并返回结果给进程。当系统调用执行完成后,内核会恢复到进程上下文,继续执行进程。
  • 硬中断 :硬中断是由硬件设备触发的中断。硬中断的优先级最高,当发生硬中断时,内核会立即进入中断上下文并处理中断。
  • 软中断 :软中断是由软件触发的中断。软中断的优先级低于硬中断,当发生软中断时,内核不会立即进入中断上下文,而是会等到当前正在执行的硬中断或系统调用处理程序执行完成后才进入中断上下文并处理软中断。
  • 时钟中断 :时钟中断是由时钟硬件触发的中断。时钟中断的优先级较低,当发生时钟中断时,内核会进入中断上下文并更新系统时间,然后继续执行被中断的进程。
  • 任务切换 :当内核需要在多个进程之间切换时,会发生任务切换。任务切换的优先级最低,当发生任务切换时,内核会将当前正在执行的进程的状态保存起来,并恢复另一个进程的状态,以便继续执行该进程。

以上是 Linux 内核中进程调度的主要时机。这些时机对于理解 Linux 内核的调度机制非常重要。

下面,我们再来详细介绍一下这几个进程调度的时机:

进程上下文

进程上下文是进程正在运行时的上下文。在进程上下文中,进程可以访问自己的地址空间和寄存器,并执行自己的指令。当发生中断或系统调用时,进程会被中断或切换到系统调用处理程序中。在这些情况下,内核会将进程的状态保存起来,以便在中断或系统调用处理完成后恢复进程的执行。

中断上下文

中断上下文是内核处理中断时的上下文。在中断上下文中,内核可以访问中断向量表和中断处理程序。当发生中断时,内核会进入中断上下文并调用相应的中断处理程序。当中断处理程序执行完成后,内核会恢复到进程上下文,继续执行被中断的进程。

系统调用上下文

系统调用上下文是内核执行系统调用时的上下文。在系统调用上下文中,内核可以访问系统调用表和系统调用处理程序。当进程执行系统调用时,内核会进入系统调用上下文并执行系统调用。当系统调用执行完成后,内核会恢复到进程上下文,继续执行进程。

硬中断

硬中断是由硬件设备触发的中断。硬中断的优先级最高,当发生硬中断时,内核会立即进入中断上下文并处理中断。硬中断通常是由以下事件触发的:

  • I/O 设备中断
  • 内存错误中断
  • 时钟中断

软中断

软中断是由软件触发的中断。软中断的优先级低于硬中断,当发生软中断时,内核不会立即进入中断上下文,而是会等到当前正在执行的硬中断或系统调用处理程序执行完成后才进入中断上下文并处理软中断。软中断通常是由以下事件触发的:

  • 进程调度
  • 文件系统操作
  • 网络操作

时钟中断

时钟中断是由时钟硬件触发的中断。时钟中断的优先级较低,当发生时钟中断时,内核会进入中断上下文并更新系统时间,然后继续执行被中断的进程。时钟中断通常是由以下事件触发的:

  • 时钟硬件定时器中断
  • 软件定时器中断

任务切换

当内核需要在多个进程之间切换时,会发生任务切换。任务切换的优先级最低,当发生任务切换时,内核会将当前正在执行的进程的状态保存起来,并恢复另一个进程的状态,以便继续执行该进程。任务切换通常是由以下事件触发的:

  • 进程调度
  • 系统调用
  • 中断

希望本文的分析能够帮助您更好地理解 Linux 内核中的进程调度机制。