当前位置: 首页 > 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.dtcms.com/a/273193.html

相关文章:

  • 低功耗小尺寸的空间入侵监测报警设备的市场需求方向
  • 【Python常见问题】【路径】路径总是有问题?深度剖析
  • 【JVM|垃圾回收】第二天
  • Transformer模型原理概述
  • 【Linux】Linux 操作系统 - 27 , 进程间通信(三) --System V 共享内存
  • 零基础入门物联网-远程门禁开关:硬件介绍
  • 多线程学习
  • 指针的const应用
  • 老式MVC架构Web应用:经典框架下的技术坚守与现代挑战
  • STM32F103C8T6驱动无源蜂鸣器详解:从硬件设计到音乐播放
  • 使用SpringAOP自定义权限控制注解
  • 从零开始的语言模型构建 CS336 第一课(一)
  • 【Python练习】036. 编写一个函数,将一个字符串中的所有字符按ASCII值排序
  • 用OpenCV标定相机内参应用示例(C++和Python)
  • Git简单命令
  • 获取印度股票数据API实战指南:NSE与BSE双市场对接
  • 华为OD 周末爬山
  • upload-labs靶场通关详解:第21关 数组绕过
  • 微服务架构下的自动化测试策略调优经验分享
  • 【基于大模型 + FAISS 的本地知识库与智能 PPT 生成系统:从架构到实现】
  • Datawhale AI 夏令营:用户洞察挑战赛 Notebook(2)
  • HVV注意事项(个人总结 非技术)
  • 【HTTP服务端】Cookie?Session?Token?
  • React 自定义Hook——页面或元素滚动到底部监听 Hook
  • Java+Vue开发的资产设备全周期管理系统,移动端+后台管理,涵盖采购至报废全程,实现高效管理、成本可控与资源优化
  • Shell脚本一键部署KubeSphere前置环境
  • 04-ES6
  • 多线程 JAVA
  • Java :Optional容器类
  • python的保险业务管理与数据分析系统