您的位置:首页 > 运维架构 > Linux

linux 内核研究--1--进程调度

2012-03-28 17:04 176 查看
linux 内核研究--1--进程调度

内容组织:

一段牢骚+学习内容

1,一段牢骚

我是“半路出家”的。在大学过了两年的“必修课选逃,选修课必逃”的快乐时光后开始考虑未来。

本来打算大学毕业后读研来着,当时幸运,正好赶上金融危机,在把量子物理看了两遍后,感觉没戏

,于是就着急将来靠什么安身立命,思索再三,感觉网络工程师这个职业前途无量,于是在大三的暑

假来临前,在当当上买了本网络工程的书(第一次网购),以高考的状态看完后,又感觉没意思,后

来感觉平面设计前途无量,于是搜寻大量这方面的资料,还没来得及瞄一眼,就在一次学校举办的演

讲会上被专家定义为低端职业。走投无路时,有一个培训机构到我们学校笔试招人。于是就从图书馆

借了一本谭浩强的书,研习一晚,考了48分,义无反顾的加入了嵌入式的大军。。。

欲知后事如何,且听下回分解。说正事。。。



2,进程调度

2.1 概念

进程,程序,线程,调度。几乎所有介绍linux kernel的书上都有说明,并且说的很详细,生怕咱弄

混了。

2.2 进程调度

首先有几件事先说明一下:

1>进程调度程序独立于所有进程之外

2>2.4 和2.6内核的调度程序相差比较大,2.6进行了重写

3>在linux世界里,可以把进程和线程搞混,没有人会笑话你(本来他们就没多大差别)。

4>每个进程都有自己的第二代***(task struct),和***号码(PID)。

5>强调一下是第二代***,上面有芯片,它里面有内核管理这个进程的所有信息(32位机,1.7K左

右,)。

6>强调一下***号,不是无限大,默认32768,一般桌面系统够用了,但是对于大型server就可能不

够用,可以通过/proc/sys/kernel/pid_max修改

7>所有进程的***以一个双向链表联系在一起,current全局变量只是当前active的进程。

8>进程的***和上面芯片里的内容较多,它在<linux/sched.h>里面呆着呢,有兴趣可以自己探望

一下,先不说。

然后说一下调度算法:

调度准备:

0>每个CPU有一个执行队列

1>把把执行队列分为两类,可运行的和不可运行的,分别组成两个简单链表。

2>把可运行的再分成两个数组,活跃组和过时组。

3>两个数组又按优先级分成优先级个组,组每个元素包含这个优先级的可运行进程链表

4>每个数组元素主要包括一个160位的bitmap,当进程进入运行时,将与自己优先级对应的bit置位。

开始调度:

1>通过位图第一位,找到最高优先级的可运行进程

2>执行这个进程。

没了,当然没有这么简单,还有很多内容需要考虑。

next:

1,考虑重新计算时间片和动态修改进程优先级

2,考虑I/O消耗型进程和CPU消耗型进程

3,考虑多CPU情况下的负载平衡

说明:本人菜鸟,内容有错误之处,纯属无心,敬请指出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: