linux 实时线程优先级问题——数值越大优先级越高吗?
2016-05-08 19:39
711 查看
linux 实时线程优先级问题——数值越大优先级越高吗?2012-06-03 15:14:23| 分类:linux内核开发 |字号 订阅 今天查看了linux下的实时线程,FIFO和RR策略的调度,遇到一个问题: priority越大优先级越高呢?还是越小越高呢? 回答这个问题要明白一个问题,首先,linux2.6内核将任务优先级进行了一个划分: 0——99 实时进程 100——139 非实时进程 现在,这个划分是起决定作用的,而且一定是数值越小,优先级越高。 但是,有时候从网上会看到 优先级数值越大,优先级越高?这又是怎么回事?难道有一种说法错了吗? 实际的原因是这样的,对于一个实时进程,他有两个参数来表明优先级——prio 和 rt_priority, prio才是调度所用的最终优先级数值,这个值越小,优先级越高; 而rt_priority 被称作实时进程优先级,他要经过转化——prio=MAX_RT_PRIO - 1- p->rt_priority; MAX_RT_PRIO = 99;这样意味着rt_priority值越大,优先级越高; 而内核提供的修改优先级的函数,是修改rt_priority的值,所以越大,优先级越高。 所以用户在使用实时进程或线程,在修改优先级时,就会有“优先级值越大,优先级越高的说法”,也是对的。 http://bbs.chinaunix.net/thread-1996337-1-1.html 关于进程时间片的计算 进程的时间片time_slice是基于进程静态优先级的。 静态优先级越高(值越小),时间片就越大。 计算时间片是通过函数task_timeslice()(kernel/sched.c)来完成的。 通过优先级来计算时间片的等式为: timeslice=MIN_TIMESLICE+((MAX_TIMESLICE-MIN_TIMESLICE)*(MAX_PRIO-1-(p)->static_prio)/(MAX_USER_PRIO-1)) 这样的话就可以将100~139 的优先级映射到200ms~10ms 的时间片上去,优先级数值越大,则分配的时间片越小。 在Kernel2.6中时间片的计算是分散的,具体的计算既可以用task_timeslice(),也可以用其他方法。 进程创建时,将父进程的时间片分一半给子进程,同时父进程的时间片减半。 进程用完时间片以后,需要重新计算时间片,并将进程插入到相应的运行队列。 进程退出时,根据first_timeslice的值来决定是否将子进程的时间片返还给父进程。 平均等待时间sleep_avg 平均等待时间sleep_avg既决定了进程优先级,又影响了进程交互程度。 进程的平均等待时间(以nanosecond 为单位),在0 到NS_MAX_SLEEP_AVG 之间取值,初值为0。 这个值是动态优先级计算的关键因子,sleep_avg 越大,计算出来的进程优先级也越高(数值越小)。 |
相关文章推荐
- linux下使用wget 命令下载jdk的方法
- Linux追求记(2)
- linux eth0设置
- 开发板Linux系统制作
- linux进程调度之 FIFO 和 RR 调度策略
- Linux设备模型--kobject&kset
- 初识Linux
- Linux应用程序访问字符设备驱动详细过程解析
- 嵌入式开发制作最小的linux文件系统
- 总结下Windows, Linux, Mac系统下的换行符差异
- Wiki小记(一):Centos6下搭建Dokuwiki
- Linux系统编程:基本I/O系统调用
- Linux系统安装DNS域名解析服务
- LINUX下软件包的安装与使用
- 阅读WebKit最近搞的一个存储开销小的、快速自适应的Locking机制
- linux下使用crontab和存储过程定期删除db2的表
- linux-iptables简介
- linux下PS1命令提示符设置
- 2015.12.31 linux caj
- 【Linux学习笔记八】Linux编程-编译(gcc)与调试(gdb)