ps 命令的 PRI 值和 task_struct 的 prio 值的关系是咋样( 二 )
■网友
泻药,答不上来我是渣
■网友
需要首先简单理解schedule priority的含义。
一个linux task的scheduling policy可以分为两种: realtime time和non-realtime, realtime任务的调度优先级永远高于所有的非realtime任务,也就是说,非实时任务只有在没有任何实时任务运行时才可能被运行。
实时任务调度策略可以分为round-robin和fifo, 而非实时任务就是conventional任务,也叫timeshare任务。 平时说的CFQ之类的调度策略都是对非实时任务的, 实时任务策略就是按照优先级:一个任务只有在没有更高优先级的其他任务运行时才可能被调度到,Roundrobin和FIFO是说相同优先级的任务如何调度。
然后在说task_struct。
task_struct的prio成员取值范围是0~139,值越小,优先级越高,也就是prio为0的task具有最高优先级(idle task)。
prio 为0~99的任务为实时任务,100~139则为非实时任务。 非实时任务的默认值应该是120, 而一个非实时任务的nice值(实时任务没有nice一说),就是其prio的取值同120的差(+19~-20),所以差值为负则其被调度的可能性更高.
然后说用户态程序看到的进程优先级。
ps命令看到的优先级的来源应该是proc文件系统,也就是你看到的task_prio函数返回的值,对应的范围是-100到39.
【ps 命令的 PRI 值和 task_struct 的 prio 值的关系是咋样】 显示为80,实际应该是20,原因在于ps在显示时做了转换,以对应UNIX标准的priority值.// legal as UNIX "PRI"// "intpri" and "opri" (was 39..79, now -40..99)static int pr_opri(char *restrict const outbuf, const proc_t *restrict const pp){ /* 39..79 */ return snprintf(outbuf, COLWID, "%ld", 60 + pp-\u0026gt;priority);}
推荐阅读
- 开发/维护 一个类似qq会员或者Amazon Prime会员的会员系统有哪些难点和挑战
- strawberryperl,执行print命令时,显示“无法初始化设备PRN\"是咋回事呢
- 两辆丰田车同时被遥控钥匙命令锁住车门,结果两辆车都没能锁住,这是啥原因
- 看完c++ primer plus 还有必要再买本c++ primer看吗?
- 为啥C语言没有直接支持二进制数
- 用java开发app后台用啥框架
- 自学C,有如《C Primer Plus》第六版一类较经典的书推荐吗
- 从一个含有 n 个元素的集合中同时找出最大值和最小值,最少需要比较几次?
- 哪个版本的 Windows 7 能够安装 E-Prime
- 以太网中vlan priority优先级是怎样在广域网传输中继承的