当我们编写程序时,我们没有指定进程的性质,例如它是否是实时的、交互式的……我读到 Linux 内核根据进程的性质进行调度。找不到一篇解释 Linux 如何决定的文章。如果有人可以提供一些信息,那就太好了。这个问题仅具有学术兴趣。
我读过我可以使用系统调用sched_setscheduler
来设置调度程序。但是当没有调用时会发生什么?
还有调度程序如何将进程决定为交互式/批处理?
当我们编写程序时,我们没有指定进程的性质,例如它是否是实时的、交互式的……我读到 Linux 内核根据进程的性质进行调度。找不到一篇解释 Linux 如何决定的文章。如果有人可以提供一些信息,那就太好了。这个问题仅具有学术兴趣。
我读过我可以使用系统调用sched_setscheduler
来设置调度程序。但是当没有调用时会发生什么?
还有调度程序如何将进程决定为交互式/批处理?
当不调用 sched_setscheduler 时,则使用默认的调度策略,即 SCHED_OTHER。这意味着调度程序是循环/时间共享的,换句话说:线程以循环方式运行,而时间共享部分意味着如果任务不自愿放弃 cpu,有时会被换出(抢占)为了让其他线程有执行时间。此外,此调度策略没有进程/线程优先级的概念。
好的。从此链接找到答案。
动态优先级奖励和惩罚基于交互启发式。这种启发式方法是通过跟踪任务花费多少时间休眠(可能在 I/O 上阻塞)而不是运行来实现的。I/O 密集型任务在 I/O 上阻塞时往往会休眠很多,而 CPU 密集型任务很少会休眠,因为它们很少在 I/O 上阻塞。很多时候,任务位于中间,并不完全受 CPU 限制或 I/O 限制,因此启发式算法会产生某种规模而不是简单的二进制标签(I/O 限制或 CPU 限制)。