易截截图软件、单文件、免安装、纯绿色、仅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编程(三) HCI层编程

1. HCI层协议概述:
HCI提供一套统一的方法来访问Bluetooth底层。如图所示:
从图上可以看出,Host Controller Interface(HCI)  就是用来沟通Host和Module。Host通常就是PC, Module则是以各种物理连接形式(USB,serial,pc-card等)连接到PC上的bluetooth Dongle。
在Host这一端:application,SDP,L2cap等协议 ......

Linux环境下MySQL的安装

1、下载MySQL免安装版/二进制版软件(不用编译)
文件格式:MYSQL-VERSION-OS.tar.gz
 
2、创建MySQL组,建立MySQL用户并加入到mysql组中
(不同版本的Unix中,groupadd和useradd的语法可能会稍有不同。)
#groupadd mysql
#useradd -g mysql mysql
 
3、进入目录/usr/local,解压缩免安装版,并在 ......

Linux 修改IP、DNS和路由配置

在Linux操作系统下修改IP、DNS和路由配置 
  ifconfig eth0 新ip
  然后编辑/etc/sysconfig/network-scripts/ifcfg-eth0,修改ip
  一、修改IP地址
  [aeolus@db1 network-scripts]$ vi ifcfg-eth0
  DEVICE=eth0
  ONBOOT=yes
  BOOTPROTO=static
  IPADDR=219.136.241.211
  NETMASK=255 ......

Linux 中如何查询和卸载已安装的软件

Linux 中如何查询和卸载已安装的软件
  Linux软件的安装和卸载一直是困扰许多新用户的难题。在Windows中,我们可以使用软件自带的安装卸载程序或在控制面板中的“添加/删除程序” 来实现。与其相类似,在Linux下有一个功能强大的软件安装卸载工具,名为RPM。它可以用来建立、安装、查询、更新、卸载软件。该工 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号