一、实时调度类
按照POSIX标准的强制要求,除了“普通”进程之外, Linux还支持两种实时调度类。调度器结构使得实时进程可以平滑地集成到内核中,而无需修改核心调度器,这是调度类带来的好处。
实时进程的特点在于其优先级比普通进程高,对应地,其static_prio值总是比普通进程低。rt_task通过检查其优先级来证实给定进程是否是实时进程,而task_has_rt_policy则检测进程是否关联到实时调度策略。
1、性质
实时进程与普通进程有一个根本的不同之处:如果系统中有一个实时进程且可运行,那么调度器总是会选中它运行,除非有另一个优先级更高的实时进程。
现有的两种实时类,不同之处如下所示。
循环进程( SCHED_RR)有时间片,其值在进程运行时会减少,就像是普通进程。在所有的时间段都到期后,则该值重置为初始值,而进程则置于队列的末尾。这确保了在有几个优先级相同的SCHED_RR进程的情况下,它们总是依次执行。
先进先出进程( SCHED_FIFO)没有时间片,在被调度器选择执行后,可以运行任意长时间。
如果实时进程编写得比