kernel学习之进程调度的目标,nice值,静态优先级和动态优先
nice与 static_prio 之间的关系如下: static_prio= MAX_RT_PRIO + nice + 20 MAX_RT_PRIO值为100 内核定义了两个宏用来完成这一转换:PRIO_TO_NICE()、NICE_TO_PRIO()。 在kernel/sched.c中: /* * Convert user-nice values [ -20 ... 0 ... 19] * to static priority [ MAX_RT_PRIO..MAX_PRIO-1], * and back. */ #defineNICE_TO_PRIO(nice) (MAX_RT_PRIO + (nice)+ 20) #definePRIO_TO_NICE(prio) ((prio) - MAX_RT_PRIO- 20) 2、动态优先级:调度程序通过增加或减少进程静态优先级的值来奖励IO小号型进程或惩罚cpu消耗型进程。调整后的优先级称为动态优先级。在进程描述符中用prio表示,通常所说的优先级指的是动态优先级。在 0~MAX_PRIO-1 之间取值(MAX_PRIO 定义为 140),其中 0~MAX_RT_PRIO-1 (MAX_RT_PRIO 定义为100)属于实时进程范围,MAX_RT_PRIO~MX_PRIO-1属于非实时进程。数值越大,表示进程优先级越小。 普通进程的优先级通过一个关于静态优先级和进程交互性函数关系计算得到。随实际任务的实际运行情况得到。实时优先级和它的实时优先级成线性,不随进程的运行而改变。 3、实时优先级: 实时优先级只对实时进程有意义。在进程描述符rt_priority中。取值0~MAX_RT_PRIO-1。 prio=MAX_RT_PRIO-1 – rt_priority 时间片: 在完全公平调度器CFS融入内核之前,时间片是各种调度器的一个重要的概念。它指定了进程在被抢占之前所能运行的时间。调用器的一个重要目标便是有效的分配时间片,以便提供良好的用户体验。时间片分的过长会导致交互式进程响应不佳。时间片分的过长会导致进程切换带来的消耗。为了解决这个矛盾内核采用了: 1、提高交互进程的优先级,同时分配默认的时间片 2、不需要进程一次性用完时间片,可多次使用。 高的优先级可保证交互进程的频繁调用,长的时间片可保证它们可长时间处于可执行状态 Author:csdn博客 muge0913 (编辑:佛山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |