linux进程调度原理
Linux 进程调度原理 Linux 进程调度是指操作系统在多个可运行状态的进程中选择一个最值得运行的进程投入运行的过程。在这个过程中, Linux 使用了四个重要的参数来选择进程,即 policy、priority、counter 和 rt_priority。 Policy 是进程的调度策略,用来区分实时进程和普通进程。实时进程优先于普通进程运行。在每个进程的 task_struct 结构中,policy 是一个非常重要的参数,因为它决定了进程的调度策略。 Priority 是进程的静态优先级,它决定了进程的 counter 的初始值。Priority 的值是一个数字,范围在 0 到 70 之间。这意味着,Priority 越高,进程的优先级越高。 Counter 是进程剩余的时间片,它的值是根据 Priority 决定的。Counter 的值会不断减少,当 Counter 的值减少到 0 时,进程就会失去对 CPU 的控制权。 Rt_priority 是实时进程特有的参数,它用于实时进程间的选择。Rt_priority 的值是一个数字,它决定了实时进程的优先级。 Linux 使用函数 goodness() 来衡量一个处于可运行状态的进程值得运行的程度。该函数综合了 policy、priority、counter 和 rt_priority 等参数,给每个处于可运行状态的进程赋予一个权值 (weight),调度程序以这个权值作为选择进程的唯一依据。 在 Linux 中,有两种类型的进程,即实时进程和普通进程。实时进程优先于普通进程运行,而普通进程则采用动态优先调度策略。普通进程的优先级是根据其 counter 的值来决定的,当某个普通进程的时间片用完以后,它的优先级将被重新赋值,以便让其他进程获得运行的机会。 在 Linux 中,进程的时间片是指多少个时钟滴答。一个时钟滴答的定义不同于其他操作系统,Linux 中的一个时钟滴答为 10ms。进程的时间片就是指多少个时钟滴答,例如,如果 priority 为 20,则分配给该进程的时间片就为 20 个时钟滴答,也就是 200ms。 Linux 中某个进程的调度策略、优先级等可以作为参数由用户自己决定,具有相当的灵活性。内核创建新进程时分配给进程的时间片缺省为 200ms,用户可以通过系统调用改变它。 对于实时进程,Linux 采用了两种调度策略,即 FIFO(先来先服务调度)和 RR(时间片轮转调度)。实时进程的 counter 只是用来表示该进程的剩余时间片,并不作为衡量它是否值得运行的标准。