易截截图软件、单文件、免安装、纯绿色、仅160KB

转贴:鼠眼看Linux调度器 (2)

转自  http://hi.baidu.com/grantzhou/blog/item/56a91cf3b685cdc90a46e09d.html
四、sched_setscheduler()系统调用。
这个系统调用的调用层次和代码都比nice复杂些,所涉及的也有不少我们这里不感兴趣的东西,因此就不再以展示代码的方法介绍它们了。这里仅在功能层次上,从与nice()对比的角度上对它做一个简要介绍:
1、因为sched_setscheduler()系统调用不仅可以修改当前任务的调度策略和优先级,还可以修改指定任务的这个信息。所以,它的合法性检查更严格些,最重要的是增加了用户身份验证,当然这个检查依旧是在task_struct结构上做的。
2、和nice()一样,sched_setscheduler()也不特别区分进程和线程,将两者作等同处理,该任务也会有重新加入运行队列的行为。
3、sched_setscheduler()只修改动态优先级,对于默认调度策略,它被设置为与静态优先级相等。
五、静态优先级里的猫腻。
说了这么多静态优先级如何如何,它到底是个什么玩意儿?现在就让我们剥掉其上所有可能的"耗子药",弄清楚它到底是怎样影响进程的。"静态优先级",之所以冠之以"静态"前缀,是因为内核自己从不主动修改它,只有通过系统调用才能修改它。那么,它在调度里到底扮演什么角色呢?容俺仔细道来:
1、计算任务时间片。
让代码说话,先看task_timeslice()实现:
/*
* task_timeslice() scales user-nice values [ -20 ... 0 ... 19 ]
* to time slice values: [800ms ... 100ms ... 5ms]
*
* The higher a thread's priority, the bigger timeslices
* it gets during one round of execution. But even the lowest
* priority thread gets MIN_TIMESLICE worth of execution time.
*/
#define SCALE_PRIO(x, prio) \
max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO/2), MIN_TIMESLICE)
static inline unsigned int task_timeslice(task_t *p)
{
if (p->static_prio < NICE_TO_PRIO(0))
return SCALE_PRIO(DEF_TIMESLICE*4, p->static_prio);
else
return SCALE_PRIO(DEF_TIMESLICE, p->static_prio);
}
从名字上也看得出来,这个函数就是用来计算任务时间片的。一般说来,只有在时间片消耗光的时候才重新计算任务的时间片,而这个计算过程只与静态优先级有关。这个函数的逻辑很简单,如果任务p的nice值<0(也就是说静态优先


相关文档:

实战Linux Bluetooth编程 (七) SDP协议

Service Discovery Protocol(SDP)提供一种能力,让应用程序有方法发现哪种服务可用以及这种服务的特性。
服务发现协议(SDP或Bluetooth SDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的含意,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth client发现可用bluetooth server服务和它们的特征的方法。 ......

Linux设备模型之input子系统详解

一:前言
最近在研究android的sensor driver,主要是E-compass,其中用到了Linux input子系统.在网上也看了很多这方面的资料,感觉还是这篇分析的比较细致透彻,因此转载一下以便自己学习,同时和大家分享!
(这篇博客主要是以键盘驱动为例的,不过讲解的是Linux Input Subsystem,可以仔细的研究一下!)
键盘驱动将检 ......

linux 你是我的希望

我是一个平凡的软件工程师
一直希望国产软件能够大放异彩
可正所谓希望越大,失望也越大
越来越感觉到要想把软件做大做强
实在是太难太难了
愚昧如我怎么也看不到光明的大道
可是难就不做了
多少智者,总是看准了一个方向,坚持在一个小的领域做细做专做强.......
linux给了很多人一个希望,开源的世界让很多人如痴 ......

如何学习linux下的c/c++编程

我计划的学习历程:
1. c和c++的基础知识,这个和操作系统无关,在windows上也可以学。c语言语法相对简单一点,c++不需要把所有的知识点都学会,要知道基本的封装,继承,多态之类的,还有STL。更深入的学习应该是在以后的工作中遇到问题了再去查资料。
2. 看书《APUE》,做书上的习题,掌握文件,系统调用,线程、进程、 ......

Linux系统管理与网络管理—前言

前  言
从桌面到服务器,Linux的应用正变得越来越广泛,业界对Linux专业人才的需求量也在急剧增长。高校学生、IT业界人士都希望通过学习Linux知识从而提升自己的竞争力,以获得更高的薪酬。但是目前关于Linux的书籍大部分都只是偏重于桌面应用,或者是只停留在一些表面的简单操作。能由浅入深、全面细致地介绍Linux的 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号