1

当我们编写程序时,我们没有指定进程的性质,例如它是否是实时的、交互式的……我读到 Linux 内核根据进程的性质进行调度。找不到一篇解释 Linux 如何决定的文章。如果有人可以提供一些信息,那就太好了。这个问题仅具有学术兴趣。

我读过我可以使用系统调用sched_setscheduler来设置调度程序。但是当没有调用时会发生什么?

还有调度程序如何将进程决定为交互式/批处理?

4

2 回答 2

3

当不调用 sched_setscheduler 时,则使用默认的调度策略,即 SCHED_OTHER。这意味着调度程序是循环/时间共享的,换句话说:线程以循环方式运行,而时间共享部分意味着如果任务不自愿放弃 cpu,有时会被换出(抢占)为了让其他线程有执行时间。此外,此调度策略没有进程/线程优先级的概念。

http://linux.die.net/man/2/sched_setscheduler

于 2013-08-26T17:51:53.397 回答
0

好的。从此链接找到答案。

动态优先级奖励和惩罚基于交互启发式。这种启发式方法是通过跟踪任务花费多少时间休眠(可能在 I/O 上阻塞)而不是运行来实现的。I/O 密集型任务在 I/O 上阻塞时往往会休眠很多,而 CPU 密集型任务很少会休眠,因为它们很少在 I/O 上阻塞。很多时候,任务位于中间,并不完全受 CPU 限制或 I/O 限制,因此启发式算法会产生某种规模而不是简单的二进制标签(I/O 限制或 CPU 限制)。

于 2013-09-10T02:29:34.443 回答