14.CPU调度——CPU调度策略

1.CPU调度的直观想法

线程1阻塞,线程2 3都处于就绪态,该执行哪个呢?需要有调度策略

  • FIFO
    • 先进先出,简单有效。比如:食堂
  • Priority
    • 任务短的先执行(怎么知道任务的执行时长)
    • 任务多了,优先级询问 会越来越长
    • 如果优先级高的任务 耗时很长怎么办?比如优先级高的用户需要填一个很长的表格

2.面对诸多场景,如何设计调度算法?

  • 目的:
    • 面对用户,目的是让用户满意
    • 面对进程:CPU调度的目标是 进程满意
  • 如何让进程满意?
    • 尽快结束任务:周转时间(从任务进入到任务结束)短
    • 响应用户操作快:响应时间(从操作发生到响应)短
    • 系统内耗时间少:吞吐量(完成的任务量)
  • 总原则:系统专注于任务执行,又能合理调配任务

3.如何做到 合理调配任务

  • 吞吐量 和 响应时间 有矛盾
    • 响应时间小,需要进程频繁切换,切换的次数多了,系统内耗大,吞吐量就小了
  • 前台任务 和 后台任务 关注点不同
    • 前台任务 关注 响应时间,后台任务 关注 周转时间
  • IO约束型任务 和 CPU约束型任务 有各自的特点
    • IO约束型,比如word,CPU执行时间少,IO时间长
    • CPU约束型,很长时间 都是CPU在计算,没有IO

任务类型不同,需要有折中方案,考虑很多 会使操作系统复杂
好的CPU调度算法 要折中也要简单

4. CPU调度算法及影响因素

4.1 FCFS(First Come, First Served)

这里写图片描述
谁先来,谁先被处理
P1 到 P5 顺序执行,平均周转时间是 40.2
短的任务放前边,短的任务优先执行,平均周转时间是 35
短的任务方前边,能增加任务的满意度

4.2 短任务优先

如果调度结果是 P1,P2,…,Pn,则平均周转时间为:
P1 + P2 + P3 + … + Pn = ∑(n + 1 - i) * Pi
P1的周转时间是 P1
P2的周转时间是 P1 + P2
……
Pn的周转时间中含有 n*P1 + (n - 1) * P2 + …
P1 计算的次数最多,需要把最短的任务放在前边
这里写图片描述
平均周转时间是 25.2

4.3 轮转调度 解决 响应时间问题

顺序执行 需要等前边的任务 全部执行完,自己才能执行,排序靠后的任务 一直得不到执行
这里写图片描述
如何解决?
按时间片来轮转调度
轮转调度叫 Robin,是一个小鸟
将P1分为10个时间片,P2氛围10个时间片,P3分为3个时间片……
按时间片切换,每个任务执行一段,轮转调度,不会偶一个任务长期等待

切换次数增多,切换的耗时就在增加,时间片大小要折中:

  • 时间片大:响应时间太长
  • 时间片小:吞吐量小
  • 折中:时间片 10-100ms,切换时间 0.1-1ms(1%)

4.4 响应时间 与 周转时间

响应时间 和 周转时间 同时存在:word 更关心 响应时间,gcc 更关心 周转时间,两种任务同时存在,怎么办?
要设置优先级,设置 前台任务 和 后台任务
前台任务 优先级高,后台任务 优先级低。
定义 前台任务队列 和 后台任务队列,只有前台任务没有了 才调度后台任务
如果一直有前台任务,后台任务一直得不到执行(优先级低的任务一直得不到执行)……

任务的优先级要动态调整
一般后台任务 耗时比较长,一旦后台任务转到前台执行,可能耗时很长,一直不释放CPU,前台任务的响应时间又没法保证
前后台任务都要设置时间片,后台任务转到前台,执行一段,要释放CPU,让其他任务执行

要以 轮转调度为核心,又要考虑 优先级,要折中。考虑很多,又很麻烦……

4.5 还有很多问题

  • 怎么判断 哪些是 前台任务,哪些是 后台任务?调度算法要认识这个任务,根据任务变化,调整优先级
  • 一个任务 既有IO 又要 计算快。比如 gcc是CPU约束型的,按Ctrl + C 也是IO,word是IO约束型的,Ctrl + F 也要求 运算快
  • 短任务优先,如何判断任务长度?长度是未来的信息……

总结:
- 调度:从就绪队列中 找一个 任务执行
- 调度算法要考虑 时间(周转时间、响应时间)、任务的特点(IO或CPU约束)、优先级
- 需要折中方案:短任务优先(减少周转时间)、以 轮转调度为核心,要设置优先级

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值