【发布时间】:2013-12-21 19:17:28
【问题描述】:
这是来自 sched_setscheduler(2) - Linux 手册页:
“根据实时策略之一(SCHED_FIFO、SCHED_RR)调度的进程的 sched_priority 值在 1(低)到 99(高)的范围内。”
“一个 SCHED_FIFO 进程一直运行,直到它被 I/O 请求阻塞、被更高优先级的进程抢占或调用 sched_yield(2)。”
我有以下代码:
struct sched_param sp;
memset( &sp, 0, sizeof(sp) );
sp.sched_priority = 99;
sched_setscheduler( 0, SCHED_FIFO, &sp );
现在进程应该在最高优先级 (99) 下运行 并且永远不应该被抢占。
所以,当它开始运行以下循环时:
while ( 1 ) ;
它应该永远运行,并且不应允许其他进程运行。
尽管如此,当我启动这样一个进程时,我也可以使用其他进程。其他进程的运行速度要慢得多,但它们确实会运行。
我的处理器有 2 个内核,因此我启动了该进程的两个副本。 两个核心的使用率跃升至 97%-100%。两个进程都在运行它们的无限循环。
我仍然可以在 shell 中键入命令并观察它们的输出。我也可以使用 GUI 程序。
既然不应抢占优先级为 99 的 SCHED_FIFO 进程,这怎么可能?
【问题讨论】:
标签: linux scheduling