我正在学习操作系统。我有个疑问。例如,如果某组进程(组 1)的调度策略为 ,SCHED_RR
而另一组进程(组 2)的调度策略为SCHED_FIFO
。
现在,当内核必须从这两组中选择某个进程时,Linux 使用哪种调度策略?
是否有可能改变该政策?如果是的话该怎么做?
答案1
man sched
从概念上讲,调度程序为每个可能的 sched_priority 值维护一个可运行线程列表。为了确定接下来运行哪个线程,调度程序会查找具有最高静态优先级的非空列表,并选择位于该列表头部的线程。
线程的调度策略决定它将被插入到具有相同静态优先级的线程列表中的何处以及它将如何在此列表中移动。
尽管还有一项实时策略,但其优先级并不(根本?)重要
为了实现线程被纳入 SCHED_DEADLINE 策略时所做的保证,SCHED_DEADLINE 线程是系统中最高优先级(用户可控制)的线程;如果任何 SCHED_DEADLINE 线程可运行,它将抢占根据其他策略之一调度的任何线程。