织梦CMS - 轻松建站从此开始!

罗索

Linux系统中的进程调度

jackyhwei 发布于 2011-05-31 09:31 点击:次 
Linux执行进程调度时,首先查找就绪队列中的所有进程,从中选出优先级最高且在内存的一个进程。如果队列中有实时进程,那么实时进程将优先运行。如果最需要运行的进程不是当前进程,那么当前进程就被挂起,并且保存它的现场,然后为选中的进程恢复运行现场。
TAG:

进程调度机制主要涉及到调度方式、调度策略和调度时机。

1 调度方式

Linux内核的调度方式基本上采用“抢占式优先级”方式,即当进程在用户模式下运行时,不管是否自愿,在一定条件(如时间片用完或等待I/O)下,核心就可以暂时剥夺其运行而调度其他进程进入运行。但是,一旦进程切换到内核模式下运行,就不受以上限制而一直运行下去,直至又回到用户模式之前才会发生进程调度。

Linux系统中进程分为实时进程和非实时进程,它们的优先级由不同方式确定:实时进程的优先级采用静态优先级,即由用户预先指定,以后不会改变;非实时进程的优先级采用动态优先级,它由调度程序计算出来。实时进程的静态优先级通常比非实时进程的动态优先级要高。

2 调度策略

Linux系统提供了三种进程调度策略:SCHED_FIFO、SCHED_RR以及SCHED_OTHER。

SCHED_FIFO适合于实时进程,它们对时间性要求比较强,而每次运行所需要的时间比较短。一旦这种进程被调度开始运行后,就要一直运行直到自愿让出CPU或者被优先权更高的进程抢占其执行权为止,没有时间片概念。

SCHED_RR对应“时间片轮转法”,适合于每次运行需要较长时间的实时进程。

SCHED_OTHER适合于交互式的分时进程。这类非实时进程的优先权取决于两个因素:进程剩余时间配额进程的优先数nice(优先数越小,其优先级越高)。nice的取值范围是19~-20。

对于实时进程,其优先权的值(1000+设定的正值)至少是1000实时进程的优先权高于其他类型进程的优先权,另外,时间配额以及nice值与实时进程的优先权无关。如果系统中有实时进程处于就绪状态,则非实时进程就不能被调度运行,直至所有实时进程都完成了,非实时进程才有机会占用CPU。

后台命令(在命令行最后有&符号)对应后台进程(又称后台作业)。后台进程的优先级低于任何交互(前台)进程的优先级。所以,只有当系统中当前不存在可运行的交互进程时,才调度后台进程运行。后台进程往往按批处理方式调度运行。

3 调度时机

核心进行进程调度的时机有以下5种情况:

(1)当前进程调用sleep()或者pause(),使自己进入睡眠状态,主动让出一段时间CPU的使用权。

(2)进程终止,永久地放弃对CPU的使用。

(3)在时钟中断处理程序执行过程中,发现当前进程连续运行的时间过长。

(4)当唤醒一个睡眠进程时,发现被唤醒的进程比当前进程更有资格运行。

(5)一个进程通过执行系统调用来改变调度策略或者降低自身的优先权,从而引起立即调度。

调度算法

Linux执行进程调度时,首先查找就绪队列中的所有进程,从中选出优先级最高且在内存的一个进程。如果队列中有实时进程,那么实时进程将优先运行。如果最需要运行的进程不是当前进程,那么当前进程就被挂起,并且保存它的现场,然后为选中的进程恢复运行现场。

(studyarea)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201105/14495.html]
本文出处:百度博客 作者:studyarea
顶一下
(0)
0%
踩一下
(2)
100%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容