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