LINUX内核调度分析.pdf
本文对LINUX内核中的调度模块进行了全面的分析,结合实际使用的LINUX系统,通过对调度模块的理论、设计、实现的阐述,能够指导硬件、软件设 计及实现,讓硬件架构更趋合理,不仅有很高的性能,而且能控制功耗,使系统组件及应用软件更加高效地运行,合理地分配和使用CPU资源。
知识点摘要:
1. 调度机制概述:LINUX的调度机制是基于调度实体的,调度实体是由组和进程组成的,调度实体的优先级是调度的基本依据。
2. 调度实体的分类:内核将进程分为两类,一类是实时进程,另一类是非实时进程。实时进程的优先级为[0,99],非实时进程的优先级则为[i00,139]。
3. 调度策略:实时进程可以使用SCHED_FIFO与SCHED_RR两种策略,而非实时进程则使用SCHED_NORMAL和SCHED_BATCH两种策略。
4. 时间片分配:调度的基本单位是时间片,不同优先级分配的时间片长度是有差别的,一般来说,每NICE级之间大约有10%时间间隔变化。
5. 调度执行的时机:进程状态转换时刻、当前进程时机片用完、设备驱动程序中设 置need—resched标识、进程从中断、异常及系统调用等内核态返回用户态。
6. 调度组:调度组是由一个或多个进程组成的,调度组也是调度的基础单元,与进程公平竞争CPU资源,调度组在取得对应份额CPU资源后在组内部进行资源的再分配。
7. 调度类:内核引入了调度类的概念,保证调度算法的改变而内核调度处理流程的稳定,目前,内核有调度类的三个实现:实时任务调度、CFS(完全公平调度) 、IDLE调度。
8. 调度时钟分析:LINUX内核调度是基于调度时钟来触发的,每次调度时钟触发都关系到任务是继续执行还是切换,是调度机制的核心部分。
9. 调度时钟触发:LINUX内核会根据编译时的HZ配置来决定调度时间间隔,一般来说是每1/100s或每1/1000s触发一次Scheduling Tick,让系统调度机制可以计算每个任务执行的时间,并确定是不是要进行任务切换。