它们的主要区别就是通过优先级来区分的。所有优先级值在0-99范围内的,都是实时进程,所以这个优先级范围也可以叫做实时进程优先级,而100-139范围内的是非实时进程。在系统中可以使用chrt命令来查看、设置一个进程的实时优先级状态。我们可以先来看一下chrt命令的使用:
[root@zorrozou-pc0 zorro]# chrt
Showor change the real-time scheduling attributes of a process.
Set policy:
chrt [options]<priority><command>[<arg>...]
chrt [options]-p <priority><pid>
Get policy:
chrt [options]-p <pid>
Policy options:
-b,--batch set policy to SCHED_OTHER
-f,--fifo set policy to SCHED_FIFO
-i,--idle set policy to SCHED_IDLE
-o,--other set policy to SCHED_OTHER
-r,--rr set policy to SCHED_RR (default)
Scheduling flag:
-R,--reset-on-fork set SCHED_RESET_ON_FORK for FIFO or RR
Other options:
-a,--all-tasks operate on all the tasks (threads)for a given pid
-m,--max show min and max valid priorities
-p,--pid operate on existing given pid
-v,--verbose display status information
-h,--help display this help andexit
-V,--version output version information andexit
Formore details see chrt(1).
我们先来关注显示出的Policy options部分,会发现系统给个种进程提供了5种调度策略。但是这里并没有说明的是,这五种调度策略是分别给两种进程用的,对于实时进程可以用的调度策略是:SCHED_FIFO、SCHED_RR,而对于非实时进程则是:SCHED_OTHER、SCHED_OTHER、SCHED_IDLE。
系统的整体优先级策略是:如果系统中存在需要执行的实时进程,则优先执行实时进程。直到实时进程退出或者主动让出CPU时,才会调度执行非实时进程。实时进程可以指定的优先级范围为1-99,将一个要执行的程序以实时方式执行的方法为:
[root@zorrozou-pc0 zorro]# chrt 10bash
[root@zorrozou-pc0 zorro]# chrt -p $$
pid 14840's current scheduling policy: SCHED_RR
pid 14840's current scheduling priority:10
可以看到,新打开的bash已经是实时进程,默认调度策略为SCHED_RR,优先级为10。如果想修改调度策略,就加个参数:
[root@zorrozou-pc0 zorro]# chrt -f 10bash
[root@zorrozou-pc0 zorro]# chrt -p $$
pid 14843's current scheduling policy: SCHED_FIFO
pid 14843's current scheduling priority:10