本文约3000字,今天继续阅读《操作系统教程(Linux 版)》这本书, 本文整理了第四章的读书笔记。
关注公众号, 即可获得与Linux相关的电子书籍(含《操作系统教程(Linux 版)》)以及常用开发工具,文末有文档清单。
书籍原文整理|含高频面试/笔试题,计算机考研、校招后端/运维/内核必看
🔖 章节导读
本章是操作系统核心重难点+高频考点,聚焦CPU(处理机)资源分配调度。
全书逻辑线:四级调度体系→调度方式→七大经典算法→实时调度→Linux真实调度实
📚 一 核心知识点梳理
1.1 四级分级调度模型
操作系统把CPU调度拆分为四层,四层触发频率、使用场景完全不同:
流转逻辑:作业经高级调度入内存→内存进程可由中级调度换出;就绪进程靠低级调度分配CPU;进程内部由线程调度分配时间片。
1.2 作业调度 & 进程调度详解
1.2.1 作业调度
核心功能
调度目标(互相冲突,无法全部满足)公平性、设备高利用率、高吞吐量、快速响应时间
1.2.2 进程调度(CPU真正分配单元)
两种调度方式
- 非抢占式进程主动放弃CPU(结束/发起I/O),高优先级进程到达也不会打断;实现简单,交互差,小型设备使用。
- 抢占式时间片耗尽/高优先级进程抵达,强制剥夺CPU;分时、硬实时系统标配,响应快。
触发进程调度6大场景
调度性能六大评价指标
- 周转时间:作业提交→完成总时长 (T_{结束}-T_{提交}),取均值为平均周转时间
- 带权周转时间:周转时间 ÷ 作业运行时间(衡量长短作业公平性)
1.3 七大经典调度算法
1. FCFS 先来先服务
规则:按到达顺序排队,先来先执行 优点:无饥饿,实现简单;缺点:短作业长时间等待,平均周转时间长 适用:纯批处理系统
2. 静态优先级调度
规则:提前固定优先级,数值越大优先级越高;分抢占/非抢占 缺点:低优先级进程长期得不到CPU,产生饥饿
3. RR 时间片轮转(分时系统专用)
公式:单轮时间片 (q=\frac{R}{N}) R=期望响应时间,N=系统最大就绪进程数 特点:交互友好;时间片过小会产生大量上下文切换开销
4. 多级队列调度(分级轮转)
划分多条优先级就绪队列,只有高优先级队列为空,才调度低优先级; 前台交互队列分配短时间片,后台批处理分配长时间片。
5. 多级反馈队列(综合最优通用算法)
核心规则:
- 高优先级进程可抢占低优先级进程CPU; 优势:兼顾短任务、交互程序、长批处理,解决饥饿问题。
6. SJF 最短作业优先(非抢占)
规则:预估运行时间最短作业优先调度 优点:系统吞吐量最高;缺点:长作业饥饿,无法预估时长时不可用
7. HRRN 高响应比优先
响应比公式: [R_p=1+\frac{作业等待时间}{作业运行时间}] 每次调度全部作业计算响应比,选最大值执行; 优点:兼顾到达顺序与作业长短,消除饥饿;缺点:每次遍历计算,系统开销大。
1.4 实时调度模块
1.4.1 实时任务分类
1.4.2 两大主流实时调度算法
- EDF 最早截止优先截止时间越近优先级越高,抢占式;周期性/非周期性任务通用。
- RMS 频率单调调度周期越短、执行频率越高,优先级越高,仅适用于周期性硬实时; 可调度判定公式: [\sum \frac{C_i}{T_i} \le m(2^{\frac{1}{m}}-1)] C=任务执行时长,T=任务周期,m=任务总数
1.5 Linux 进程调度(内核面试重点)
- 进程分类:实时进程 > 普通进程,实时进程优先级更高
- 三大调度策略(
task_struct中policy字段控制) SCHED_FIFO:实时先来先服务,不主动让出CPUSCHED_RR:实时时间片轮转,同优先级分时执行
- 优先级计算 实时进程优先级 = 1000 + rt_priority 普通进程优先级 = counter(剩余时间片,运行不断递减)
- 调度标记:内核
need_resched置1时触发调度函数schedule()
⚠️ 本章重点 & 难点
✅ 必背重点
❌ 易混淆难点
🎯 全题型高频面试/笔试题
一 理论简答题(面试口述高频)
- 简述处理机四级调度各自功能、适用系统、触发频率差异。
- FCFS、SJF、HRRN三种算法优缺点,HRRN如何解决作业饥饿?
- 时间片轮转调度中,时间片过大/过小分别会造成什么问题?
- 多级反馈队列为什么是通用最优调度算法?简述完整执行流程。
- EDF和RMS调度算法适用场景,写出RMS可调度公式。
- Linux的
SCHED_FIFO、SCHED_RR、SCHED_OTHER三种调度策略区别?
二 计算题(考研/校笔试必考)
- 单道批系统多作业,给定提交时间、运行时间,分别用FCFS/SJF/高响应比优先计算:执行顺序、单作业周转时间、平均周转、平均带权周转。
- 三个周期性任务,使用RMS算法判断系统能否满足时限,写出完整计算过程。
- 给定多进程到达时间、运行时长,时间片轮转,画出执行时序并计算平均等待时间。
- 某作业9点到达,13点开始运行,预计运行2小时,计算该作业响应比。
三 Linux内核面试题
task_struct里policy、priority、rt_priority、counter分别作用?- 内核
need_resched标记什么时候会置1?schedule()函数作用是什么?
四 辨析判断题(易踩坑考点)
- SJF算法一定能得到最短平均周转时间(×,抢占场景不成立)
- 非抢占调度不会出现进程饥饿(×,长任务持续占用CPU,短任务等待)
- RMS算法适合视频播放等软实时场景(×,仅用于周期性硬实时)
- Linux普通进程使用静态优先级调度(×,counter动态递减,属于动态)
📝 学习总结
处理机管理是操作系统性能优化核心,整体分为理论调度体系和Linux工程落地两大块。
- 计算题是硬性得分点,周转时间、响应比、RMS公式必须熟练演算;
- 不同场景匹配对应算法:批处理选FCFS/SJF,分时用RR/多级反馈,工控硬实时选用EDF/RMS;
- Linux调度融合了多种经典算法设计思想,后端、运维、内核岗面试高频提问,建议结合
top、nice等命令实操加深理解。
往期文章(欢迎订阅技术分享栏目全部文章):
这里是女程序员的笔记本
15年+嵌入式软件工程师兼二胎宝妈
分享读书心得、工作经验,自我成长和生活方式。
希望我的文字能对你有所帮助