(七)调度算法
进程调度有哪几种方法?优先级调度的机制是什么?
参考:
linux进程(任务)调度算法
进程类型:
- IO消耗型(交互)
- 处理器消耗型(计算)
进程两种不同的优先级:
- nice值,普通进程
- 实时优先级,实时进程
调度器,目的是允许不同类型的进程可以有针对性地选择调度算法。
实时进程比普通进程先得到调度。
一种普通进程的调度策略:
- 完全公平调度(CFS),是一个针对普通进程的调度类,在linux中称为SCHED_NORMAL。CFS完全摒弃时间片而是根据优先级(nice值)分配给进程一个处理器使用比重,允许每个进程运行一段时间、循环轮转、选择运行最少的进程作为下一个运行进程。
当可运行进程数量趋于无限时,它们各自所获得的处理器使用比和时间片都将趋于0,无疑会造成不可接受的进程切换消耗,为此,CFS引入每个进程获得的时间片底线,这个底线称为最小粒度,默认1ms,表示每个进程最少也能获得1ms的运行时间,确保切换消耗被限制在一定范围内。
两种实时调度策略:
2. SCHED_FIFO 实现了一种简单的、先入先出的调度算法。一旦一个SCHED_FIFO级进程处于可执行状态,就会一直执行,直到它受到阻塞或显式释放处理器为止;它不基于时间片,可以一直执行下去。只有更高优先级的SCHED_FIFO或SCHED_RR任务才能抢占。对于相同优先级的SCHED_FIFO会轮流执行,但依然是主动让出处理器。
3. SCHED_RR 是带有时间片的SCHED_FIFO,称为实时轮流调度算法。当SCHED_RR任务耗尽它的时间片时,同一优先级的其他实时进程轮流调度。