进程调度机制负责进程在这些状态间的转换。进程调度根据职责的不同,具体分为长期、中期、短期调度。
- 长期调度的触发间隔较长,它粗粒度地决定是否应该将一个新的进程纳人调度管理,负责增加系统中可被调度的进程的数量。
- 中期调度的触发相对频繁,它辅助换页机制,负责限制系统中可被调度的进程的数量。
- 短期调度的触发最为频繁,它负责细粒度地调度进程的执行,做出相应的调度决策。
非抢占式调度:调度器必须等一个任务执行完或者主动退出执行才能升始下—个调度。
抢占式调度:任务到达系统时会进行调度,有可能会中断当前正在执行的任务,转而执行其他任务。
响应时间:指的是从用户发起请求到任务响应用户所需的时间。
时间片:每个请求一次可以占用多长时间的资源。
优先级:会根据重要程度给每个请求分配优先级,优先级高的请求可以优先使用资源。
低优先级任务饥饿 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CYLJOcEC-1661672910709)(https://img-blog.csdnimg.cn/2fe2d6fca3bf48be968a6d1e42e39286.png)]
优先级反转:
优先级反转:
假设现在有3个任务A、B、C,它们的优先级为A>B>C。任务C在运行时持有一把锁,然后它被高优先级的任务A抢占了(任务C的锁没有被释放)。此时任务A恰巧也想申请任务C持有的锁,但是申请失败,因此进人阻塞状态等待任务C放锁。此时,任务B、C都处于可以运行的状态,由于任务B的优先级高于C,因此B优先运行。综合观察该情况,就会发现任务B好像优先级高于任务A,先于任务A执行。这一问题称为优先级反转。
优先级继承:
任务A通过将自己的优先级转移给占有锁的任务C,让任务C优先执行并放锁。之后,任务A可在任务C放锁后以抢占的方式立即执行,从而避免了优先级反转的问题。
这类调度器会量化任务对系统资源的占有比例,从而实现对资源的公平调度。我们将以份额(share)来量化每个任务对CPU时间的使用。
根据任务超过截至时间所造成的后果来分类:
根据被触发的时间来分类:
实时操作系统的特点是确定性,即实时任务的完成时间应该是有明确上界的。
实时调度策略:
多核共享—个全局运行队列。当一个CPU核心需要调度任务时,根据给定的调度策略,决定全局运行队列中下一个由它执行的任务。给定的调度策略可以是单核调度中的任一策略。
尽可能让一组任务并行执行,避免调度器同时调度有依赖关系的两组任务,同时避免关联任务(倾向于同时执行的—系列任务,比如需要相互通信的任务)执行效率降低的问题。
全局调度器会使得任务在不同CPU核心上切换执行,造成切换开销。为了减少开销,每个任务应尽可能只在一个CPU核心上进行调度。因此,新的调度策略改为每个CPU核心都引人一个本地调度器,并用它管理对应核心上执行的任务。这种调度策略使用全局调度器和本地调度器,构成了层级化结构,—般称之为两级调度(two level scheduling)。
通过追踪每个CPU核心当前的负载情况,将处于高负载的CPU核心管理的任务迁移到低负载的CPU核心上,尽可能地保证每个核心的负载大致相同。