当前位置:首页>Linux>《操作系统教程(Linux版)》第四章|处理机管理干货笔记+面试笔试题

《操作系统教程(Linux版)》第四章|处理机管理干货笔记+面试笔试题

  • 2026-10-11 06:51:59
《操作系统教程(Linux版)》第四章|处理机管理干货笔记+面试笔试题
Hello,大家好,我是程序媛MM。

本文约3000字,今天继续阅读《操作系统教程(Linux 版)》这本书, 本文整理了第四章的读书笔记。

关注公众号, 即可获得与Linux相关的电子书籍(含《操作系统教程(Linux 版)》)以及常用开发工具,文末有文档清单。


书籍原文整理|含高频面试/笔试题,计算机考研、校招后端/运维/内核必看

🔖 章节导读

本章是操作系统核心重难点+高频考点,聚焦CPU(处理机)资源分配调度。 

全书逻辑线:四级调度体系→调度方式→七大经典算法→实时调度→Linux真实调度实

📚 一 核心知识点梳理

1.1 四级分级调度模型

操作系统把CPU调度拆分为四层,四层触发频率、使用场景完全不同:

调度层级
别名
存在系统
核心作用
触发频率
作业调度
高级/宏观调度
仅批处理系统
从外存后备队列选作业、分配内存、创建进程
最低
交换调度
中级调度
分时/实时系统
进程内外存换入换出,虚拟内存支撑
中等
进程调度
低级/微观调度
全部多道系统
真正分配CPU,完成上下文切换
最高
线程调度
线程级调度
现代多线程系统
进程内线程调度,分用户/内核级
高

流转逻辑:作业经高级调度入内存→内存进程可由中级调度换出;就绪进程靠低级调度分配CPU;进程内部由线程调度分配时间片。

1.2 作业调度 & 进程调度详解

1.2.1 作业调度

核心功能

  1. 维护JCB,记录所有作业四种状态;
  2. 按算法挑选后备作业;
  3. 分配内存、外设资源;
  4. 为作业创建进程,加入就绪队列;
  5. 作业结束回收资源、输出报告。

调度目标(互相冲突,无法全部满足)公平性、设备高利用率、高吞吐量、快速响应时间

1.2.2 进程调度(CPU真正分配单元)

两种调度方式
  1. 非抢占式进程主动放弃CPU(结束/发起I/O),高优先级进程到达也不会打断;实现简单,交互差,小型设备使用。
  2. 抢占式时间片耗尽/高优先级进程抵达,强制剥夺CPU;分时、硬实时系统标配,响应快。
触发进程调度6大场景
  1. 进程正常执行完毕;
  2. 进程调用阻塞原语、发起I/O;
  3. 系统调用结束,从内核态返回用户态;
  4. 时钟中断,当前进程时间片用完;
  5. 就绪队列出现更高优先级进程(抢占场景);
  6. 程序主动调用schedule调度函数。
调度性能六大评价指标
  1. CPU利用率:CPU有效工作时长/总开机时长
  2. 吞吐量:单位时间完成作业数量
  3. 周转时间:作业提交→完成总时长 (T_{结束}-T_{提交}),取均值为平均周转时间
  4. 带权周转时间:周转时间 ÷ 作业运行时间(衡量长短作业公平性)
  5. 等待时间:进程在就绪队列累计等待时长
  6. 响应时间:交互式请求发出到系统首次回复的时间

1.3 七大经典调度算法

1. FCFS 先来先服务

规则:按到达顺序排队,先来先执行 优点:无饥饿,实现简单;缺点:短作业长时间等待,平均周转时间长 适用:纯批处理系统

2. 静态优先级调度

规则:提前固定优先级,数值越大优先级越高;分抢占/非抢占 缺点:低优先级进程长期得不到CPU,产生饥饿

3. RR 时间片轮转(分时系统专用)

公式:单轮时间片 (q=\frac{R}{N}) R=期望响应时间,N=系统最大就绪进程数 特点:交互友好;时间片过小会产生大量上下文切换开销

4. 多级队列调度(分级轮转)

划分多条优先级就绪队列,只有高优先级队列为空,才调度低优先级; 前台交互队列分配短时间片,后台批处理分配长时间片。

5. 多级反馈队列(综合最优通用算法)

核心规则:

  1. 队列优先级从高到低,时间片逐级放大;
  2. 新进程直接进入最高优先级队列;
  3. 时间片用完未完成,降级至下一级队列;
  4. 高优先级进程可抢占低优先级进程CPU; 优势:兼顾短任务、交互程序、长批处理,解决饥饿问题。

6. SJF 最短作业优先(非抢占)

规则:预估运行时间最短作业优先调度 优点:系统吞吐量最高;缺点:长作业饥饿,无法预估时长时不可用

7. HRRN 高响应比优先

响应比公式: [R_p=1+\frac{作业等待时间}{作业运行时间}] 每次调度全部作业计算响应比,选最大值执行; 优点:兼顾到达顺序与作业长短,消除饥饿;缺点:每次遍历计算,系统开销大。

1.4 实时调度模块

1.4.1 实时任务分类

  • 硬实时:超时引发事故(军工、工业控制)
  • 软实时:轻微延迟可接受(视频、直播)
  • 周期性:固定周期触发;非周期性:随机外部事件

1.4.2 两大主流实时调度算法

  1. EDF 最早截止优先截止时间越近优先级越高,抢占式;周期性/非周期性任务通用。
  2. RMS 频率单调调度周期越短、执行频率越高,优先级越高,仅适用于周期性硬实时; 可调度判定公式: [\sum \frac{C_i}{T_i} \le m(2^{\frac{1}{m}}-1)] C=任务执行时长,T=任务周期,m=任务总数

1.5 Linux 进程调度(内核面试重点)

  1. 进程分类:实时进程 > 普通进程,实时进程优先级更高
  2. 三大调度策略(task_struct中policy字段控制)
    • SCHED_FIFO:实时先来先服务,不主动让出CPU
    • SCHED_RR:实时时间片轮转,同优先级分时执行
    • SCHED_OTHER:普通进程动态优先级轮转
  3. 优先级计算 实时进程优先级 = 1000 + rt_priority 普通进程优先级 = counter(剩余时间片,运行不断递减)
  4. 调度标记:内核need_resched置1时触发调度函数schedule()
  5. 就绪队列:双向链表,优先遍历实时进程

⚠️ 本章重点 & 难点

✅ 必背重点

  1. 四级调度的区别、适用系统;
  2. 抢占/非抢占调度的差异;
  3. 七大调度算法规则、优缺点;
  4. 周转、带权周转、响应比相关计算题;
  5. EDF、RMS实时调度规则与判定公式;
  6. Linux三种调度策略、优先级逻辑。

❌ 易混淆难点

  1. 多级反馈队列进程降级逻辑;
  2. RMS可调度条件计算;
  3. 抢占场景下作业执行顺序分析;
  4. Linux僵死进程、调度标记底层逻辑。

🎯 全题型高频面试/笔试题

一 理论简答题(面试口述高频)

  1. 简述处理机四级调度各自功能、适用系统、触发频率差异。
  2. 抢占式和非抢占调度有什么区别?分别适合什么系统?
  3. FCFS、SJF、HRRN三种算法优缺点,HRRN如何解决作业饥饿?
  4. 时间片轮转调度中,时间片过大/过小分别会造成什么问题?
  5. 多级反馈队列为什么是通用最优调度算法?简述完整执行流程。
  6. 硬实时和软实时系统区别,各举实际应用场景。
  7. EDF和RMS调度算法适用场景,写出RMS可调度公式。
  8. 衡量调度算法性能有哪些核心指标?分别代表什么?
  9. Linux的SCHED_FIFO、SCHED_RR、SCHED_OTHER三种调度策略区别?
  10. 系统在哪六种情况下会触发进程调度?

二 计算题(考研/校笔试必考)

  1. 单道批系统多作业,给定提交时间、运行时间,分别用FCFS/SJF/高响应比优先计算:执行顺序、单作业周转时间、平均周转、平均带权周转。
  2. 三个周期性任务,使用RMS算法判断系统能否满足时限,写出完整计算过程。
  3. 给定多进程到达时间、运行时长,时间片轮转,画出执行时序并计算平均等待时间。
  4. 某作业9点到达,13点开始运行,预计运行2小时,计算该作业响应比。

三 Linux内核面试题

  1. Linux中如何修改普通进程、实时进程优先级?
  2. task_struct里policy、priority、rt_priority、counter分别作用?
  3. 内核need_resched标记什么时候会置1?schedule()函数作用是什么?
  4. 频繁进程上下文切换会带来什么性能损耗?

四 辨析判断题(易踩坑考点)

  1. SJF算法一定能得到最短平均周转时间(×,抢占场景不成立)
  2. 非抢占调度不会出现进程饥饿(×,长任务持续占用CPU,短任务等待)
  3. RMS算法适合视频播放等软实时场景(×,仅用于周期性硬实时)
  4. Linux普通进程使用静态优先级调度(×,counter动态递减,属于动态)

📝 学习总结

处理机管理是操作系统性能优化核心,整体分为理论调度体系和Linux工程落地两大块。

  1. 计算题是硬性得分点,周转时间、响应比、RMS公式必须熟练演算;
  2. 不同场景匹配对应算法:批处理选FCFS/SJF,分时用RR/多级反馈,工控硬实时选用EDF/RMS;
  3. Linux调度融合了多种经典算法设计思想,后端、运维、内核岗面试高频提问,建议结合top、nice等命令实操加深理解。

往期文章(欢迎订阅技术分享栏目全部文章):

【从零开始撸内核驱动源码】:以ttyserial(串口驱动)为例,串联字符设备驱动基础知识点的学习计划
Linux内核源码顶层 Makefile分析并单独编译调试内核自带的驱动
【从零开始撸内核驱动源码】:ttynull驱动
Linux内核驱动安装失败问题调试及解决方法
Linux内核驱动源码走读之编译内核及外部驱动实操指南
“谢谢你看到这里”

这里是女程序员的笔记本

 15年+嵌入式软件工程师兼二胎宝妈

分享读书心得、工作经验,自我成长和生活方式。

希望我的文字能对你有所帮助

最新文章

随机文章