一、实时调度类源分析
Linux进程分为两大类:实时进程和普通进程。
实时进程与普通进程根本不同之处,如果系统中有一个实时进程且可运行,那么调度器总会选择它。除非另有一个优先级更高的实时进程。
SCHED_FIFO:没有时间片,在被调度器选择之后,可以运行任意长的时间:
SCHED_RR:有时间片,其值在进程运行时会减少。
1、实时调度实体sched_rt_entity数据结构
linux内核源码目录:include/linux/sched.h。
进程选择pick_next_task_rt
实时调度会选择最高优先级的实时进程来运行。
进程删除dequeue_task_rt
从优先级队列中删除实时进程,并更新调度信息,然后把这个进程添加到队尾。
linux内核源码目录:/kernel/sched/rt.c。
二、SMP
多处理器系统的工作方式分为非对称多处理(asym-metrical mulit-processing)和对称多 处理(symmetrical mulit-processing,SMP)两种。在对称多处理器系统中,所有处理器的地位都是相同的,所有的资源,特别是存储器、中断及I/O空间,都具有相同的可访问性,消除结构上的障碍。
多处理器系统上,内核必须考虑几个额外的问题,以确保良好的调度。
CPU负荷必须尽可能公平地在所有的处理器上共享。
进程与系统中某些处理器的亲合性(affinity)必须是可设置的。
内核必须能够将进程从一个CPU迁移到另一个
linux SMP调度就是将进程安排/迁移到合适的CPU中去,保持各CPU负载均衡的过程。
1、CPU域初始化