易截截图软件、单文件、免安装、纯绿色、仅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 你是我的希望

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

linux inittab详解

一、什么是init
  init是Linux系统操作中不可缺少的程序之一。 是一个由内核启动的用户级进程。
  内核启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式来启动其他用户级的进程或服务。所以,init始终是第一个进程(其PID始终为1)。
  内核 ......

在Linux下安装和使用MySQL

1、下载MySQL的安装文件
安装MySQL需要下面两个文件:
MySQL-server-4.0.23-0.i386.rpm  
MySQL-client-4.0.23-0.i386.rpm
下载地址为:http://www.mysql.com/downloads/mysql-4.0.html,打开此网页,下拉网页找到“Linux x86 RPM downloads”项,找到
“Server”和“Client programs&rd ......

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 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号