Platform: msm8x60
Kernel: 2.6
介绍
多任务操作系统都可以让程序的并发执行,这种功能通过进程调度来实现。Linux提供了抢占式的多任务模式,由调度程序决定什么时候可以被抢占。
策略
进程分I/O消耗和处理器消耗型两种。I/O消耗型如键盘活动,处理器消耗型如视频解码。调度策略采用复杂的算法来决定哪个进程投入运行。一般都倾向于I/O消耗型进程。
优先级有两种:
1. nice值。范围-20到 +19,默认为0, 值越大优先级越低,它也用来决定时间片的长短。
2. 实时优先级。可配置,默认范围从0到99。任何实时进程优先级都高于普通进程。
再来说下时间片,它表明的是一个进程在被抢占前所能运行的时间。进程并不是一次用完它的时间片。没有时间片的进程不会再投入运行,等其他所有进程全部耗尽时间片后,再重新分配。
Linux是可抢占式的。当一个进程进入TASK_RUNNING时,内核先判断其优先级是否高于其他进程,如果是,调用程序被唤醒,抢占当前进程。当进程时间片变为0时,也会被抢占。
调度算法
Linux2.6以O(1)调度为核心算法,调度的时间是恒定的,保证了对各个进程之间的公平性。
最基本数据结构为运行队列。每个处理器一个,每个可投入运行的进程属于一个运行队列。通过cpu_rq()、this_rq()、task_rq()等宏来获取可执行队列,对多个运行队列操作时为避免死锁可通过double_rq_lock()、double_rq_unlock()来自动完成防死锁操作。
每个运行队列有两个优先级数组,过期和活跃数组。结构如下:</