操作系统调度策略

操作系统调度是为了再有限的资源下,通过对多个程序执行过程的国立,尽可能满足系统和应用的 指标,如等待响应时间,完成时间,系统得资源利用率、吞吐量、功耗等。

设计一个令用户满意的调度器绝非易事,主要有以下挑战:

  • 调度指标多样性。不同场景下的调度指标的选取有所不同,用户在切换应用场景时,新旧场景的调度指标不一定适用。
  • 调度可参考的信息有限。调度器没有“上帝视角”,且应用场景可能动态变换,调度器只能通过有限的信息做出调度决策。
  • 任务间的复杂交互。同一程序的任务间可能会有相互关联的逻辑,需要相互依赖,调度器不能够独立地调度这些任务。
  • 许多地方存在权衡。调度器的设计实现与系统的设计实现一样,存在多种权衡。

单核调度策略

1.经典调度

1)先到先得(FIFO)

特点:简单直观,但在长短任务混合的场景下对短任务不友好,对I/O密集型任务不友好

2)最短任务优先(SJF)

在调度时会选择运行时间最短的任务执行

特点:必须与之任务的运行时间,严重依赖于任务到达时间点

3)最短完成时间任务优先(STCF)

抢占式版本的SJF,在任务到达系统时回进行调度,有可能会终端当前正在执行的任务,转而执行其他任务,即抢占式调度

特点:长任务饥饿,STCF策略倾向于完成时间较短的任务,长任务可能会无法占用CPU资源,一直处于饥饿状态。

4)时间片轮转(RR)

为了定时相应用户,需要为任务设置时间片,限定任务每次执行的时间,当前任务执行完时间片后,就切换到运行队列中的下一个任务。

特点:RR策略的关键点在于时间片的大小,在任务运行时间相似的场景下平均周转时间高。

2.优先级调度

1)多级队列(MLQ)

每个人物会被分配预先设置好的优先级,每个优先级对应一个队列,任务会被存储在对应的优先级队列中。

特点:MLQ策略是一个静态优先级调度策略,但会出现低优先级任务饥饿的问题。

2)多级反馈队列(MLFQ)

在多级队列的基础上增加了动态设置任务优先级的策略。

MLFQ维护多个优先级队列,任务根据优先级存于不同队列中,高优先级任务先于低优先级任务执行,处于相同优先级的任务则采用RR策略执行。MLFQ策略会先对任务的运行时间进行评估,预计运行时间较短的任务会放入优先级较高的队列中。

特点:低优先级的任务采用更长的时间片,定时地将所有任务的优先级提升至最高。

3.公平共享调度

这类调度会量化任务对系统资源的占有比例,实现对资源的公平调度。

1)彩票调度

根据每个任务所占有的份额成比例地分配CPU时间,在每次调度时,会根据随机数确定任务是否被调度。任务所占的份额越大,随机数就越有可能落在它的份额之内,即越有可能会被调度。

随机数带来的问题:彩票调度通过使用随机的方式实现一个简单而又近似公平共享的调度器,但是,随机数会导致某一任务占有CPU时间的比例,需要在该任务经历多次调度后,才能趋近于该任务的份额在所有任务总份额中的比例。

基于彩票的优化方法:

  • 彩票转让
  • 彩票货币

       通过添加一层彩票货币的抽象,让任务组更加灵活地修改自己持有的份额,避免影响从属于它们的任务。

  • 彩票通胀

       给任务一定自由度,允许任务根据当前对CPU资源的需求决定自己的份额。

2)步幅调度

步幅调度通过设置虚拟时间的方式,让任务在每次调度时增加一定的虚拟时间,即步幅。经历虚拟时间相同的任务,它们使用的CPU时间之比就是步幅的倒数之比。即任务的份额之比对应于任务的步幅的倒数之比。

4.实时调度

实时操作系统是指需要实时处理任务请求的操作系统。

分类:

1)根据任务超过截止时间所造成的后果分类:

  • 硬实时任务

   该类任务必须在截止时间之前完成,否则系统无法承担任务处理超过截止时间的后果

  • 软实时任务

该类任务允许偶尔超过截止时间完成,其后果可以接受的。

2)根据被触发的时间分类:

  • 周期任务

指到达系统时间遵循一定周期的任务

  • 偶发任务

指不会周期性地到达系统的任务,且还要满足连续两个相同偶发任务到达系统的时间间隔有最小值,即系统不会在同一时刻处理两个相同的偶发任务。

  • 非周期任务

指到达系统时间随机的任务。相比于偶发任务,非周期任务没有了相同任务间最小时间间隔的限制。

1)速率调度(RM)

是一个用于调度周期任务的静态优先级实时调度策略。

该调度策略需要预知任务的周期T,并且根据周期静态地为每个任务分配优先级,任务的周期越短,意味着其截止时间要求越迫切,其优先级越高。

2)最早截止时间优先(EDF)

任务的截止时间越近则优先级越高·

5.其他调度

借用虚拟时间(BVT)

BVT策略允许其“向自己的未来借用一定虚拟时间”。即BVT策略允许人物在短时间内将自己的pass值降低,以达到被优先调用的目的。

多核调度策略

在多核系统中,任务会同时在多个CPU核心上并行执行,相比于单核调度策略,多核调度策略需要考虑的因素更加复杂。

1.负载分担

2.协同调度

协同调度的目的在于尽可能让一组任务并行执行,避免调度器同时调度有依赖关系的两组任务,同时避免关联任务执行效率低的问题。

3.两级调度

为了减少开销,每个任务尽可能只在一个CPU核心上进行调度。将任务绑定到特定的CPU核心上进行调度执行,避免了任务在多核间切换。

为每个CPU核心都引入一个本地调度器,并用它管理对应核心上执行的任务。改调度策略使用全局调度器和本地调度器,构成了层级化结构。

4.负载追踪与负载均衡

负载均衡是通过追踪每个CPU核心当前的负载情况,将处于高负载的CPU核心管理的任务迁移到低负载的CPU核心上,尽可能地保证每个核心的负载大致相同。

Guess you like

Origin blog.csdn.net/weixin_42104154/article/details/119419344