【Linux 0.12】内核代码——任务调度

内核代码

sched.c 程序

主要解释调度函数 schedule()

schedule() 负责选择系统中下一个要运行的进程。

  1. 首先对所有的进程进行检测,唤醒任何一个已经得到信号的任务

    具体方法是:针对任务数组中的每个人物,检查其报警定时 alarm,如果 alarm 时间已经过期,则它在信号位图中设置 SIGALARM 信号,然后将 alarm 值清空。如果进程的信号位图中除去被阻塞的信号以外还有其他的信号,并且任务处于可中断睡眠状态(TASK_INTERRUPTIBLE),则任务将被置为就绪状态 (TASK_RUNNING)。

  2. 核心部分:根据进程的时间片和优先调度机制,来选择随后要执行的任务。它将循环检查任务数组中的所有任务,根据每个就绪态任务剩余执行时间 counter,选取该值最大的一个任务,并使用 switch_to() 函数切换到该任务。如果所有的就绪态任务的 counter 都是 0,那么就根据任务的优先级 priority 重置每个任务的 counter,再重新执行循环检查所有任务的执行时间片值。