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

操作系统笔记:进程调度(Process Scheduling)

一、什么是进程调度

进程调度(Process Scheduling) 是操作系统中负责选择下一个要运行的进程的一项核心功能。在多道程序设计系统中,多个进程竞争CPU资源,调度器根据特定策略选择一个进程运行。

目标

  • 提高CPU利用率
  • 提高系统吞吐量
  • 减少平均等待时间
  • 保证响应时间
  • 实现公平性与优先级

二、调度类型

调度类型说明
长程调度(Long-term)决定哪些进程进入就绪队列
中程调度(Mid-term)暂停/恢复进程(换出/换入)以节省内存
短程调度(Short-term)选择哪个就绪进程获得CPU(核心调度器)

实际中,主要关注短程调度,即CPU调度。


三、调度时机

进程调度的典型触发场景包括:

  1. 进程从运行状态 → 阻塞(如等待I/O)
  2. 进程从运行状态 → 就绪(时间片耗尽)
  3. 进程终止
  4. 优先级更高的进程进入就绪队列(抢占式调度)

四、调度方式:非抢占 vs 抢占

类型描述特点
非抢占式一旦CPU被分配,直到终止或阻塞简单、安全,但响应差
抢占式系统可中断当前运行进程调度他人响应快,但复杂

五、常见调度算法(经典)

1. 先来先服务

  • 按照进程到达时间先后执行
  • 非抢占式
  • 简单易实现,但容易造成长作业阻塞短作业

2. 短作业优先(SJF)

  • 按预估CPU时间从短到长排序
  • 非抢占式 or 抢占式(抢占版本称为最短剩余时间优先SRTF
  • 最优平均等待时间,但难以预知作业时间

3. 时间片轮转(RR)

  • 所有进程轮流执行,每次限时(时间片)
  • 抢占式,公平性强
  • 时间片大小影响性能与响应(小 → 响应好,切换多)

4. 优先级调度

  • 为每个进程分配优先级
  • 可抢占式或非抢占式
  • 可能导致饥饿(低优先级长期不运行)
  • 可引入**老化机制(aging)**缓解饥饿

5. 多级队列调度(Multilevel Queue)

  • 不同优先级进程分配到不同队列
  • 每个队列使用不同算法(如前台RR,后台FCFS)
  • 队列之间不可交互(静态)

6. 多级反馈队列调度(MFQ)

  • 类似多级队列,但允许进程在不同队列间迁移
  • 初始放高优先级队列,执行一次没完成则降级
  • 老化机制内置,适应性强,是实际常用的复杂调度策略

六、调度算法比较

算法平均等待时间响应速度公平性实现复杂度
FCFS一般偏高简单
SJF最低
RR中等
优先级不定(看策略)不定
多级反馈复杂

七、重要调度指标

指标含义
周转时间完成时间 - 提交时间
带权周转时间周转时间 / 服务时间
等待时间就绪队列中等待CPU的总时间
响应时间第一次响应所花时间(用于交互式系统)

八、进程调度相关术语回顾

  • 进程控制块(PCB):记录进程状态、寄存器、优先级等调度所需信息
  • 就绪队列:存放等待CPU的进程
  • 上下文切换(Context Switch):保存/恢复进程执行状态的开销操作

九、面试常见问题及参考回答

为什么需要进程调度?

答: 因为系统资源有限,多个进程必须共享CPU等资源,调度器通过一定策略动态决定哪个进程运行,从而提升CPU利用率、响应时间和系统吞吐量。


非抢占式调度的缺点?

答:

  • 无法强制切换,可能导致响应慢
  • 一个进程运行时间过长会拖慢其他进程
  • 不适用于交互式、实时系统

时间片轮转的优缺点?

答:

优点:

  • 公平性强,每个进程都有机会
  • 响应时间快,适合交互式系统

缺点:

  • 时间片太大 → 类似FCFS,响应差
  • 时间片太小 → 上下文切换频繁,浪费资源

多级反馈队列如何解决饥饿问题?

答:

  • 低优先级进程若等待过久,将被提升优先级(老化机制)
  • 动态调整进程优先级,确保所有进程都能运行

实际系统中常用哪些调度算法?

答:

  • Windows:多级反馈队列 + 优先级提升/衰减机制
  • Linux:O(1)调度器(老)、CFS(完全公平调度器)
  • Unix:多级反馈 + 动态优先级
  • Android:基于Linux CFS,并引入用户交互响应优化策略

十、总结

  • 进程调度是操作系统资源管理核心之一
  • 关键任务:选择最合适的进程运行,满足性能和公平
  • 多种算法适用于不同场景,没有“最优算法”
  • 面试重点:理解调度策略原理 + 实际适用性 + 面试题举例

文章转载自:
http://childminder.wkuuf.cn
http://basification.wkuuf.cn
http://catadromous.wkuuf.cn
http://bitterroot.wkuuf.cn
http://according.wkuuf.cn
http://beebee.wkuuf.cn
http://cariama.wkuuf.cn
http://activation.wkuuf.cn
http://catnapper.wkuuf.cn
http://batum.wkuuf.cn
http://asphodel.wkuuf.cn
http://calcaneal.wkuuf.cn
http://blackly.wkuuf.cn
http://blandly.wkuuf.cn
http://chromatophile.wkuuf.cn
http://arcuate.wkuuf.cn
http://bubbly.wkuuf.cn
http://chartography.wkuuf.cn
http://chiropteran.wkuuf.cn
http://anemochory.wkuuf.cn
http://balmoral.wkuuf.cn
http://chantey.wkuuf.cn
http://chinbone.wkuuf.cn
http://asker.wkuuf.cn
http://antipathetic.wkuuf.cn
http://agrimony.wkuuf.cn
http://academize.wkuuf.cn
http://balayeuse.wkuuf.cn
http://chopboat.wkuuf.cn
http://balpa.wkuuf.cn
http://www.dtcms.com/a/280210.html

相关文章:

  • 硬件与软件的桥梁:冯诺依曼体系、操作系统和初始进程的深度解析
  • 排序算法实战(上)
  • 串口通信性能优化
  • 人形机器人:技术落地、场景适配与产业演进
  • 卫星通信链路预算之六:输出回退
  • [RPA] 多页订单的自动处理
  • 高并发四种IO模型的底层原理
  • 【Rust Web】Axum :构建高性能 Web 服务
  • 快速精准估算光伏电站造价:效率与精度的关键
  • 4.增-demo
  • Java全栈工程师面试实录:从电商支付到AI大模型的应用场景与技术栈解析
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | DoubleClickHeart(双击爱心)
  • [INS-30014]无法检查指定的位置是否在CFS上
  • 【PTA数据结构 | C语言版】根据层序序列重构二叉树
  • 陶瓷基复合材料烧结:工业软件国有化在孔隙率控制仿真中的替代
  • [设计模式]C++单例模式的几种写法以及通用模板
  • HTTP请求
  • 医疗数据分析中标准化的作用
  • sglang笔记1: 后端详细阅读版
  • 配置使用SSH与VScode进行连接
  • LLM在腾讯游戏数据分析的实战
  • 论文阅读:arxiv 2025 A Survey on Data Contamination for Large Language Models
  • 深度学习-参数初始化、损失函数
  • 自然语言指令驱动的工业机器人协同学习系统:大语言模型如何重塑智能体协作范式
  • 流媒体直播分发服务器
  • 大语言模型零样本情感分析实战:无需机器学习训练,96%准确率实现指南
  • 小型客厅如何装修设计?
  • 2025-07-15 李沐深度学习6——Softmax回归
  • 【C++篇】STL的关联容器:map和set(上篇)—— map和set的介绍和使用
  • Dify的默认端口怎么修改