在操作系统中,调度程序在系统调用 api 或硬件中断处理之后调用。
我无法找到并找到如何以及谁调用调度程序???
调度程序被调用:
TIF_NEED_RESCHED
设置了标志,则在最近的可能情况下:
preempt_enable()
cond_resched()
称呼schedule()
调用如果当前线程/进程将要休眠/等待某些事件/资源被释放,调度程序将被调用。
在以工作队列的形式执行下半部分的工作线程的一种情况下,它将在一个while循环中运行并检查工作队列列表是否为空。如果发现为空,它会将自己标记为TASK_INTERRUPTABLE
, 调用schedule()
然后进入睡眠状态。
如果工作队列列表不为空,则工作线程标记自己RUNNING
并执行延迟的下半部分。
因此,通常schedule()
由想要休眠的任务调用,从而将 cpu 移交给其他进程/任务。
我认为,如果采用循环算法来调度某些进程,则正在根据时间片值对某些计时器进行编程,该时间片值将在该时间片使用中断功能结束后调用调度程序。并且抢占当前正在执行的线程保存其上下文并处理就绪队列找出下一个运行的线程从线程堆栈中恢复其上下文并根据新线程的先前抢占值设置PC值现在新线程开始运行。https://en.wikipedia.org/wiki/Programmable_interval_timer