OS-调度

本文介绍了进程调度的基本概念,包括调度的时机、上下文切换过程及常见的作业调度算法,如FCFS、SJF、RR和优先级调度等。此外还详细讨论了多级反馈队列调度算法的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

调度

多个程序在并发的情况下执行,最大化CPU利用率,同时要保证一定的公平性

调度的时机

五种情况:

  • Running -> Waiting:例如等待I/O
  • Running -> Ready: interupt,计时器到时间了
  • Running -> Terminated
  • Waiting -> Ready: I/O完成
  • New -> Ready

将进程调度分为非抢占式调度(当前运行的进程不能再运行时才会进行一次调度)和抢占式调度(根据进程的优先级进行跑)

可以直接用调度器来进行调度

调度的过程

img

···的过程叫上下文切换,这里的上下文切换用PCB来表示

作业调度算法

FCFS:First come First Saved,非抢占式

SJF:shortesr-Job-First,问题在于不知道具体运行时间

RR: Round-Robin,定义一个时间片轮流跑,抢占式

Priority Scheduling:选取最高优先级进行执行

Multilevel Queue Scheduling:

在实际应用中,进程通常被分为不同的组,每个组有一个自己的 ready queue,且每个队列内部有自己独立的调度算法。例如,前台队列使用 RR 调度以保证 response,后台队列可以使用 FCFS。同时,队列之间也应当有调度。通常使用 preemptive priority scheduling,即当且仅当高优先级的队列(如前台队列)为空时,低优先级的队列(如后台队列)中的进程才能获准运行。也可以使用队列间的 time-slicing,例如一个队列使用 80% 的时间片而另一个使用 20%。例如:

  • img

Multilevel Feedback Queue Scheduling

Multilevel Feedback Queue Scheduling 允许进程在队列之间迁移。这种算法可以有很多种实现,因为队列的数量、每个队列中的调度策略、队列之间的调度算法以及将进程升级到更高优先级/降级到更低优先级的队列的条件都是可变的。一个系统中的最优配置在另一个系统中不一定很好。这种算法也是最为复杂的。

linux nice函数实现优先级

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值