进程调度

来源:互联网 发布:js二维映射 编辑:程序博客网 时间:2024/05/20 05:24
进程分为:I/O消耗型 和 处理器消耗型


分配处理器使用比
Linux CFS(完全公平调度调度算法)调度器并没有直接分配时间片到进程,它是将处理器的使用比分配给进程,nice值作为权重将调整进程所使用的处理器时间比。


调度器类
Linux调度器以模块方式提供(允许不同类型的进程可以有针对性的选择调度算法),这种模块化结构被称为调度器类,每个调度器都有一个优先级,它会按照优先级遍历调度器类,选择具有最高优先级的调度器类中的最高优先级的进程运行。


时间记账:虚拟运行时vruntime:
虽然CFS不再有时间片的概念,但它也必须维护每个进程运行的时间(虚拟运行时vruntime)记账。


进程选择
CFS使用红黑树(自平衡二叉搜索树)来组织可运行进程的队列,CFS调度核心算法:选择具有最小vruntime的任务,即选择红黑树的最左侧叶子节点。


调度器入口
schedule(),会以优先级为序,从高到低,依次检查每一个调度器类,并且以最高优先级的调度器类中,选择最高优先级的进程。


休眠和唤醒
进程把自己标记成休眠状态,从可执行的红黑树中移除,放入等待队列,然后调用schedule()选择和执行一个其他进程。唤醒的过程刚好相反,进程被设置为可执行状态,然后再从等待队列移到可执行红黑树中。


调度策略
实时调度(SCHED_FIFO、SCHED_RR)、非实时调度(SCHED_NORMAL),前者优先级高
原创粉丝点击