Linux 进程调度时机

Linux 进程调度并非随时进行,而是在某些特定时机才会触发。具体而言,以下几种情况会导致调度发生:

  • 进程状态转换: 当进程从运行状态转换为其他状态时,例如进程终止、进程睡眠(调用 sleep()exit() 等函数)都会触发调度。
  • 新进程加入: 当一个新的进程被添加到可运行队列时,系统会调用 add_to_runqueue() 函数。此函数会比较新进程与当前进程的时间片计数,如果符合条件,则会设置调度标志,触发调度。
  • 时间片耗尽: 如果当前进程的时间片已经用完,系统会进行调度,选择下一个进程执行。
  • 系统调用返回: 当一个进程从系统调用返回到用户态时,内核会调用 ret_from_sys_call() 函数检查调度标志。如果调度标志被设置,则表明需要进行调度。
  • 中断处理完成: 当内核处理完中断后,进程返回用户态时,也会触发调度。

总而言之,Linux 内核会在进程状态发生变化、新进程加入、时间片耗尽、系统调用返回以及中断处理完成等关键时间点检查是否需要进行调度。

ppt 文件大小:368KB