当前位置: 首页 > news >正文

CPU调度调度算法

1. 先来先服务(FCFS)调度算法

  • 原则:按进程/作业到达顺序调度(先到先服务),非抢占式
  • 适用场景:作业调度、进程调度(辅助其他算法处理同优先级进程)。
  • 优点:算法简单,公平(对长作业有利)。
  • 缺点
    • 短作业可能因长作业先到而长期等待(短作业吃亏)。
    • 效率低,平均周转时间长。
  • 特点:有利于CPU繁忙型作业(如科学计算),不利于I/O繁忙型作业(如频繁读写文件)。

2. 短作业优先(SJF)/短进程优先(SPF)调度算法

  • 原则:选择估计运行时间最短的作业/进程优先执行。
  • 分类
    • 非抢占式:一旦开始执行,直至完成或阻塞。
    • 抢占式(最短剩余时间优先,SRTF):新进程到达时,若剩余时间更短则抢占CPU。
  • 优点平均等待时间、平均周转时间最优(对短作业友好)。
  • 缺点
    • 长作业饥饿(长期等待)。
    • 依赖用户估计运行时间(可能不准确)。
    • 未考虑作业紧急程度(实时任务无法保证)。

3. 高响应比优先调度算法

  • 原则:综合考虑等待时间运行时间,选择响应比最高的作业。
  • 优点
    • 短作业:等待时间相同时,服务时间短→响应比高(类似SJF)。
    • 长作业:等待时间增长→响应比提高,避免饥饿(类似FCFS)。
  • 适用场景:作业调度(平衡FCFS和SJF的优缺点)。

4. 优先级调度算法

  • 原则:按进程/作业优先级高低调度,优先级高者优先。
  • 调度方式
    • 非抢占式:运行进程主动放弃CPU后才调度高优先级进程。
    • 抢占式:高优先级进程就绪时立即剥夺当前CPU。
  • 优先级类型
    • 静态优先级:创建时确定,运行中不变(简单但可能饥饿)。
    • 动态优先级:随等待时间/运行状态变化(如等待时间越长优先级越高,避免饥饿)。
  • 优先级设置依据:系统进程 > 用户进程;交互进程 > 非交互进程;I/O型进程 > 计算型进程。

5. 时间片轮转(RR)调度算法

  • 原则:所有就绪进程按FCFS排队,轮流分配CPU时间片(如30ms),时间片用完后剥夺CPU,放入就绪队列末尾。
  • 适用场景分时系统(如Unix/Linux终端交互)。
  • 时间片大小影响:过大→退化为FCFS;过小→上下文切换频繁,CPU开销大。
  • 优点:公平性好,响应时间可控;缺点:平均周转时间较长。

6. 多级队列调度算法

  • 原则:设置多个就绪队列(如按进程类型/优先级划分),每个队列采用不同调度算法(如 foreground队列用RR,background队列用FCFS)。
  • 优点:灵活,可针对不同进程类型优化(如实时进程用高优先级队列+抢占调度)。

7. 多级反馈队列调度算法(最高级综合算法)

  • 核心思想:结合优先级调度时间片轮转,动态调整进程优先级和时间片。
  • 实现机制
    • 多个队列:优先级从高到低(Q1 > Q2 > ... > Qn),时间片逐级加倍(如Q1=10ms,Q2=20ms)。
    • 调度规则
      • 新进程入Q1,按FCFS调度,时间片内完成则退出;否则降入Q2末尾。
      • 仅当高优先级队列为空时,才调度低优先级队列(抢占式:高优先级进程就绪时立即剥夺低优先级进程)。
  • 优点
    • 短作业:在高优先级队列快速完成(类似SJF)。
    • I/O型进程:频繁阻塞后重回高优先级队列(响应快)。
    • 长作业:逐次降入低优先级队列,最终按RR执行(避免饥饿)。

8. 基于公平原则的调度算法

  • 保证调度算法:保证每个进程获得1/n的CPU时间(n为进程数),跟踪实际CPU时间与应得时间的比率,优先调度比率最小的进程。
  • 公平分享调度算法:保证每个用户获得公平的CPU份额(而非进程),如2个用户则各占50% CPU时间,无论用户启动多少进程。

各类算法对比表

算法

核心原则

优点

缺点

适用场景

FCFS

按到达顺序

简单公平

短作业吃亏,效率低

批处理系统(辅助调度)

SJF/SPF

最短运行时间优先

平均周转时间最优

长作业饥饿,依赖估计时间

批处理系统(短作业为主)

高响应比优先

响应比=1+等待时间/服务时间

平衡短作业与长作业,无饥饿

计算响应比开销大

批处理系统

优先级调度

按优先级高低

支持紧急任务

低优先级进程饥饿

实时系统、多任务系统

RR

时间片轮转

公平,响应快

上下文切换开销大

分时系统(如终端交互)

多级反馈队列

动态优先级+时间片轮转

兼顾短作业、I/O型、长作业,无饥饿

实现复杂

通用OS(如Unix/Linux)


 

核心考点 📌

  1. SJF的最优性:平均等待时间和平均周转时间最短(仅限非抢占式,且已知运行时间)。
  2. 多级反馈队列的优势:综合多种算法优点,动态调整优先级,是“最优的通用调度算法”。
  3. 饥饿与死锁的区别:饥饿是调度策略导致(如SJF中的长作业),死锁是资源竞争导致的循环等待。
  4. 时间片轮转的时间片设置:过小→切换开销大,过大→退化为FCFS。

        ✨ 一句话总结:调度算法需平衡公平性、效率与响应时间,FCFS简单、SJF高效、优先级支持紧急任务、多级反馈队列兼顾多方,是现代OS的核心选择! ✨

http://www.lryc.cn/news/584312.html

相关文章:

  • 链表算法之【合并两个有序链表】
  • Web后端开发工程师AI协作指南
  • 【java面试day4】redis缓存-数据持久化
  • AI赋能生活:深度解析与技术洞察
  • 【论文阅读】Decoupled Knowledge Distillation
  • Spring Boot 整合 RabbitMQ
  • 大语言模型驱动智能语音应答:技术演进与架构革新
  • Java Reference类及其实现类深度解析:原理、源码与性能优化实践
  • 聊一聊 Linux 上对函数进行 Hook 的两种方式
  • 使用EasyExcel动态合并单元格(模板方法)
  • Centos 7下使用C++使用Rdkafka库实现生产者消费者
  • Houdini 分布式解算效率瓶颈突破:渲染 101 云集群实战指南
  • 编程实践:单例模式(懒汉模式+饿汉模式)
  • 面试技术问题总结一
  • android TabLayout 标题栏切换 事件拦截
  • 【Linux系统】冯诺依曼体系结构 | 初识操作系统
  • Redis数据安全性分析
  • Spring Boot快速搭建RESTful应用
  • P1722 矩阵 II 题解 DFS深度优先遍历与卡特兰数(Catalan number)解
  • 【WPF实战】MVVM中如何从数据模型反查自定义控件实例(ImageView + Halcon)
  • C++类对象多态底层原理及扩展问题
  • Zotero+zotmoov+坚果云同步
  • 2023年华为杯研究生数学建模竞赛E题脑卒中临床智能分析
  • 我的世界Java版1.21.4的Fabric模组开发教程(十五)方块实体渲染器
  • 北京一家IPO业绩持续性存疑,关联交易频繁独立性堪忧
  • iOS 抓包详细教程:从零搭建、操作到实战调试的全流程指南
  • C++ -- STL -- vector
  • 北斗舞动在线监测装置:电力安全的“智慧守护者”
  • 大健康IP如何借“合规创新”抢占行业新风口|创客匠人
  • 基于Python的程序员数据分析与可视化系统的设计与实现