进程分为:I/O消耗型 和 处理器消耗型
分配 处理器使用比:
Linux CFS(完全公平调度调度算法)调度器并没有直接分配时间片到进程,它是将处理器的使用比分配给进程,nice值作为权重将调整进程所使用的处理器时间比。
调度器类:
Linux调度器以模块方式提供(允许不同类型的进程可以有针对性的选择调度算法),这种模块化结构被称为调度器类,每个调度器都有一个优先级,它会按照优先级遍历调度器类,选择具有最高优先级的调度器类中的最高优先级的进程运行。
时间记账:虚拟运行时vruntime:
虽然CFS不再有时间片的概念,但它也必须维护每个进程运行的时间(虚拟运行时vruntime)记账。
进程选择:
CFS使用红黑树(自平衡二叉搜索树)来组织可运行进程的队列,CFS调度核心算法:选择具有最小vruntime的任务,即选择红黑树的最左侧叶子节点。
调度器入口:
schedule(),会以优先级为序,从高到低,依次检查每一个调度器类,并且以最高优先级的调度器类中,选择最高优先级的进程。
休眠和唤醒:
进程把自己标记成休眠状态,从可执行的红黑树中移除,放入等待队列,然后调用schedule()选择和执行一个其他进程。唤醒的过程刚好相反,进程被设置为可执行状态,然后再从等待队列移到可执行红黑树中。
调度策略:
实时调度(SCHED_FIFO、SCHED_RR)、非实时调度(SCHED_NORMAL),前者优先级高
分配 处理器使用比:
Linux CFS(完全公平调度调度算法)调度器并没有直接分配时间片到进程,它是将处理器的使用比分配给进程,nice值作为权重将调整进程所使用的处理器时间比。
调度器类:
Linux调度器以模块方式提供(允许不同类型的进程可以有针对性的选择调度算法),这种模块化结构被称为调度器类,每个调度器都有一个优先级,它会按照优先级遍历调度器类,选择具有最高优先级的调度器类中的最高优先级的进程运行。
时间记账:虚拟运行时vruntime:
虽然CFS不再有时间片的概念,但它也必须维护每个进程运行的时间(虚拟运行时vruntime)记账。
进程选择:
CFS使用红黑树(自平衡二叉搜索树)来组织可运行进程的队列,CFS调度核心算法:选择具有最小vruntime的任务,即选择红黑树的最左侧叶子节点。
调度器入口:
schedule(),会以优先级为序,从高到低,依次检查每一个调度器类,并且以最高优先级的调度器类中,选择最高优先级的进程。
休眠和唤醒:
进程把自己标记成休眠状态,从可执行的红黑树中移除,放入等待队列,然后调用schedule()选择和执行一个其他进程。唤醒的过程刚好相反,进程被设置为可执行状态,然后再从等待队列移到可执行红黑树中。
调度策略:
实时调度(SCHED_FIFO、SCHED_RR)、非实时调度(SCHED_NORMAL),前者优先级高