07: cpu调度

CPU Scheduling

content

本文简要说明了多进程任务是怎么由cpu调度运转的,我们可以将负载的逻辑简化,使用多个假设构建简单的模型,并一步步的舍弃假设条件,逐渐逼近真实场景下的调度过程。

假设:

  1. 任务运行时长相同
  2. 任务是同时到达cpu的
  3. 任务一旦运行则不可中断
  4. 任务运行过程中没有IO操作
  5. 任务所需时间是已知的

在固定假设后,我们还需要两个指标来描述调度结果是否是符合预期的。指标1:周转时长;指标2:响应时长。

指标:

周转时长=任务完成时刻 - 任务到达时刻
响应时长=任务第一次被执行的时刻 - 任务到达时刻

先进先出(FIFO)

first in first out, 因为任务时长都一致,假设ABC三个任务同时到达,且都需要10s运行完。那么对于单个cpu,以排队的方式运行他们即可。

image

实际上任务运行时长基本都是非等长的,我们尝试着去掉假设1。如果ABC同时到达,A运行时长为100s,BC运行时长仍为10s。CPU面对同时到达的任务必须给出一个运行顺序,当优先运行A时,BC将被严重阻塞。

image

此时整体的周转时间=(100+110+120)/3=110s

最短任务优先(SJF)

shortest job first, 优先运行耗时短的任务。ABC同时到来,这时计算下各自运行时长,优先运行小任务。此时整体的周转时间=(10+20+120)/3=50s。

image

实际上任务的到来时间并非同时,往往是前后交错的,我们尝试抛弃假设2。 ABC三个任务的耗时不变,但是A在0刻到达,BC在10刻到达。受限于假设3,必须等A执行结束再执行BC,那么最终运行效果将降级为FIFO。为此我们必须再尝试抛弃假设3。

image

最短完成时间优先(STCF)

shortest time to complete first, 这里引入的抢占的概念,当BC到来,即使A在运行,也要优先给BC提供资源,保证小任务优先执行。(BC到达时,A还需要90s,BC相对来说是小任务)

image

此时整体周转时间=(10+20+120)/3=50s,通过任务抢占,适应了“任务在不同时间达到”这一场景。

轮转(RR)

round robin, 轮转调度。当人使用计算机交互时,任务的响应速度对使用感影响较大,因此响应时间成为不可忽视的一个指标。为了更快的响应,os可以利用硬件提供的时钟中断,收回cpu控制权,计算出需要及时响应的任务并运行。

比如ABC同时到达,并都需运行5s,时钟中断周期(时间片)为1s。在SJF和RR下的表现:

image

SJF整体响应时长=(0+5+10)/3=5s,周转时长=(5+10+15)/3=10s
RR整体响应时长=(0+1+2)/3=1s,周转时长=(13+14+15)/3=14s

实际上,时间片执行完后的任务切换也是需要时间的,如果任务切换过于频繁,或是时间片太小,上下文的切换成本将会大大提高,耗时也会收到较大影响。

如果想快速执行完所有任务,可以使用STCF,但会舍弃一些公平性,任务将无法公平的获取资源;如果想要公平性,可以使用RR,但这不可避免的会损耗一些时间。

结合IO

实际上任务的运行不止使用到CPU,往往还需与IO驱动进行交互,网络通信,文件读写等等。我们需要抛弃假设4。 当IO发生时,将任务A停止并切换到另一个等待调度的任务B,A的IO结束后再切换回执行。使CPU和IO利用率尽可能提高。

image

最终的问题

对于假设5,实际上任务运行时长是不可估算的,我们可以尝试着从过去的运行规律总结些经验,并以此推算未来任务运行时长。

homework

1.使用 SJF 和 FIFO 调度程序运行长度为 200 的 3 个作业时,计算响应时间和周转时间。

SJF:
响应时间=(0+200+400)/3=200s
周转时间=(200+400+600)/3=400s

FIFO: 同上


2.现在做同样的事情,但有不同长度的作业,即 100、200 和 300。

SJF:
response=(0+100+300)/3=400/3s
turnaround=(100+300+600)/3=1000/3s

FIFO: 同上


3.现在做同样的事情,但采用 RR 调度程序,时间片为 1。

RR:
response=(0+1+2)/3=1s
turnaround=(298 + 300+199 + 300+200+100)/3=456.67s


4.对于什么类型的工作负载,SJF 提供与 FIFO 相同的周转时间?

任务时长相同。


5.对于什么类型的工作负载和量子长度,SJF 与 RR 提供相同的响应时间?

任务时长 不大于 时间片时长。


6.随着工作长度的增加,SJF 的响应时间会怎样?你能使用模拟程序来展示趋势吗?

SJF对长任务不利,响应时长增加。


7.随着量子长度的增加,RR 的响应时间会怎样?你能写出一个方程,计算给定 N 个
工作时,最坏情况的响应时间吗?

时间片变长,响应时间也变长。
(0 + C + 2C + 3C + ... + (n-1)C) = (n-1)nC/2

posted @   moon_orange  阅读(157)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示