操作系统调度

调度:一个系统会同时处理多个请求,但资源是有限的,调度就是用来协调每个请求对资源的使用方法。
优先级:优先级高的请求优先使用资源。
时间片:每个请求一次可以占用多长时间的资源。

任务(线程)调度

一般调度器会通过维护运行队列的方式来管理任务。linux中用红黑树来实现运行队列。任务在执行时若触发一定条件,则会停止执行,如任务还需被执行,则会被加入运行队列等待再次被调度。

  • 执行完指定时间片后,将cpu让出
  • 发起I/O请求,I/O返回前不会继续执行
  • 主动停止执行或进入睡眠
  • 被系统中断打断,系统优先处理中断

调度器的作用是做出调度决策,决策包括:

  • 从运行队列中选出下一个运行的任务
  • 决定执行该任务的cpu
  • 决定该任务的时间片

调度指标

调度器应该做出什么样的调度决策?

批处理任务

01 吞吐量:单位时间内完成的任务数,尽可能高

02 周转时间:任务从被发起到执行结束所需时间,尽可能短

交互式任务

03 响应时间:任务从被发起到第一次向用户返回输出以响应用户所需时间,足够短

实时任务

04 实时性

共有指标:

05 能耗

06 资源利用率:保证系统资源被充分利用。

07 公平性:保证每个任务都有执行的可能。

08 调度开销:尽可能降低调度开销,缩短调度器做出决策的时延。

调度机制

进程调度机制负责进程在不同状态之间的转换。

 概念 触发频率
长期调度从批处理队列选取任务,为其创建进程并将其设置为预备状态,并放入运行队列;增加当前可被调度进程的数量
中期调度避免内存使用过多;会根据某些策略选择被挂起的进程(换页机制会将该进程的内存换入磁盘),监控当前内存的使用情况,并在适当时机激活进程。限制当前可被调度进程的数量,辅助换页机制
短期调度主要负责进程在预备、运行、阻塞状态之间的转换。尽可能满足系统的调度指标。 

进程分为:计算密集型,I/O密集型,长期调度可根据当前cpu、I/O利用率的情况,选取合适的进程交由短期调度管理。

(交互式/实时)任务不被长期调度管理,系统创建进程并将其直接放入运行队列。

单核调度策略

01 先到先得FCFS first come first served:每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。

优点:保证任务执行顺序;不需要预知任务信息。

弊端:

  1. 在长短任务混合的场景下,导致短任务的周转时间与运行时间之比过大。
  2. 会导致I/O密集型任务长时间内无法执行,I/O资源利用率低。

02 最短任务优先SJF: 优先执行短任务,缩短平均周转时间

弊端:

  1. 需要提前预知任务执行时间。
  2. 表现严重依赖任务到达的时间点,迟到的短任务无法受益。

03 最短完成时间任务优先STCF短任务抢占:shortest time-to-complete first

弊端:长任务饥饿,对公平性不利

04 时间片轮转Round Robin:可定时响应用户,限定任务执行时间,时间到后切换到下一个任务。

优点:响应时间;无需预知任务运行时间;不会出现长任务饥饿;

时间片长度的选择上需要考虑:响应时间;调度器调度开销;任务上下文切换的开销;

弊端:在任务运行时间相近的情况下,平均周转时间长。

05 优先级调度:为每个任务设置优先级,调度器可以确定任务执行的先后顺序。实时任务>交互式任务>批处理任务

  • 多级队列:每个任务会被预先分配好设置的优先级,每个优先级对应一个队列,一个任务必须等到所有优先级更高的任务调度完后才可以被调度。相同优先级队列内部的调度顺序没有统一标准。
    • 需提前预知任务信息:运行时间,资源使用情况等
    • 需将I/O密集型任务优先级提高,提高资源利用率

弊端:低优先级任务饥饿,需要监控任务等待时间,为等待时间较长的任务提高优先级。

优先级反转:高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度。但其他中等优先级的任务却能抢到CPU资源。从现象上来看,好像是中优先级的任务比高优先级任务具有更高的优先权。

优先级继承:是为了解决优先级反转问题。低优先级线程在获得同步资源的时候(如果有高优先级的线程也需要使用该同步资源时),临时提升其优先级。以前其能更快的执行并释放同步资源。释放同步资源后再恢复其原来的优先级。

  • 多级反馈队列:维护多个优先级队列,相同优先级队列使用RR策略执行,动态设置任务优先级。
    • 场景:无法预知任务信息,任务类型动态变化(计算密集/IO密集)。
    • 目标:缩短周转时间,降低任务响应时间。
    1. 短任务优先级更高:降低平均周转时间;提高IO利用率;提高交互式任务响应时间。
    2. 低优先级的任务采用更长的时间片:减少任务调度次数。
    3. 定时将所有任务的优先级提至最高:避免低优先级任务饥饿。

06 公平共享调度:以份额量化任务对系统资源的占有比例,实现资源的公平调度。

  • 彩票调度:每个任务持有一定比例的份额,份额越大越有可能被调度。(通过随机数来选择任务)
  • 步幅调度:确定性方式。

07 实时调度:指标是任务是否能在截止时间之前完成。

多核调度策略

应该调度哪个任务;任务应该在哪个cpu执行;每个任务应执行多久。

01 负载分担:当一个cpu核需要调度任务时,根据全局策略选出下一个任务执行。

优点:设计和实现简单;不会出现cpu资源浪费的情况;

缺点:任务在多核之间的切换会导致大量调度开销,包括载入缓存、TLB刷新等。

02 协同调度:尽量让一组任务并行执行,避免同时调度有依赖关系的任务,避免关联任务(需要互相通信的)执行效率低的问题。

  • 群组调度:将关联任务设为一组,以组为单位调度任务再多个cpu核心运行,使它们有几乎相同的开始结束时间。

可提升特定应用场景下任务执行的性能,如果场景不匹配则不是最优。

  • 两级调度:每个任务尽可能在一个cpu核上运行,每个cpu核心都引入一个本地调度器。全局调度器和本地调度器构成层级化结构。

提高缓存的局部性,减少数据竞争的冲突。解耦多核及单核调度。可能导致多核之间的负载不均衡。

02 负载追踪与负载均衡:追踪每个cpu核心当前的负载,进行任务迁移以均衡负载。

  • 调度实体粒度负载追踪:以单个任务为粒度。
  • 负载均衡
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值