中级软考(软件工程师)第四章知识点------操作系统
-
- [1. OS的两大作用](#1. OS的两大作用)
- [2. OS的特征](#2. OS的特征)
- [3. OS的功能](#3. OS的功能)
- [4. OS的分类](#4. OS的分类)
- [5. 核心知识点补充(重点)](#5. 核心知识点补充(重点))
-
- [1. 进程的状态](#1. 进程的状态)
-
- [1.1 三模态](#1.1 三模态)
- [1.2 五模态](#1.2 五模态)
- [2. 进程间通信](#2. 进程间通信)
-
- [2.1 同步与互斥](#2.1 同步与互斥)
- [2.2 信号量](#2.2 信号量)
- [2.3 PV操作](#2.3 PV操作)
- [3. 进程调度](#3. 进程调度)
-
- [3.1 调度层次------三级调度](#3.1 调度层次——三级调度)
- [3.2 调度算法](#3.2 调度算法)
- [4. 死锁](#4. 死锁)
-
- [4.1 四大必要条件](#4.1 四大必要条件)
- [4.2 死锁的处理策略](#4.2 死锁的处理策略)
- [4.3 银行家算法简介](#4.3 银行家算法简介)
-
- [1. 存储结构和地址](#1. 存储结构和地址)
-
- [1.1 层次结构](#1.1 层次结构)
- [1.2 地址](#1.2 地址)
- [2. 分区存储管理](#2. 分区存储管理)
- [3. 分页存储管理](#3. 分页存储管理)
- [4. 分段存储和段页式](#4. 分段存储和段页式)
- [5. 虚拟存储与页面置换](#5. 虚拟存储与页面置换)
-
- [5.1 程序局部性原理](#5.1 程序局部性原理)
- [5.2 页面置换算法](#5.2 页面置换算法)
- [6. 扩展缺页中断](#6. 扩展缺页中断)
- [7. 经典题目](#7. 经典题目)
-
- [4.1 I/O软件的操作过程(重点)](#4.1 I/O软件的操作过程(重点))
- [4.2 四大关键技术](#4.2 四大关键技术)
- [4.3 磁盘调度算法](#4.3 磁盘调度算法)
- [4.4 经典题目](#4.4 经典题目)
-
- [5.1 文件和文件系统](#5.1 文件和文件系统)
- [5.2 文件结构和组织](#5.2 文件结构和组织)
- [5.3 真题解析](#5.3 真题解析)
-
- [6.1 作业与作业控制](#6.1 作业与作业控制)
- [6.2 作业调度](#6.2 作业调度)
- [6.3 衡量指标](#6.3 衡量指标)
- [6.4 真题解析](#6.4 真题解析)
-
分值占比:大约7分左右
-
题型:单选 & 多选
-
注意点: 这一章节比较重要,大多都是一些框架知识

一、OS概述
1. OS的两大作用
- 通过资源管理提高计算机系统的效率。
- 改善人际页面,给用户提供良好的工作环境。
2. OS的特征
- 并发性
- 共享性
- 虚拟性
- 不确定性
3. OS的功能
- 进程管理
- 文件管理
- 存储管理
- 设备管理
- 作业管理
4. OS的分类
- 批处理
- 分时
- 实时
- 网络(集中、C/S、对等)
- 分布式
- 微型
- 嵌入式
5. 核心知识点补充(重点)

简单说一下几种系统的区别
- 批处理: 用户无法干预程序运行,一般用于规范的计算,只能等待结果。
- 分时: 代表就是我们使用的手机电脑,一人独占CPU和资源,但是开销比较大。
- 实时系统: 导弹、航班等是代表,特点就是响应速度极快,而且要求安全可靠,就是资源利用率不一定高,毕竟重点还是快、安全。
注意一下并发和并行的区别
- 并发: 宏观上同步执行,微观实际上在不同进程之间来回切换。
- 并行: 多核CPU支持,不同的核运行不同的程序。
二、进程管理
1. 进程的状态
1.1 三模态
- 就绪态: 所有已准备好,等待CPU。
- 运行态: CPU执行代码。
- 阻塞态: 正在等待某个事件(比如键盘输入、硬盘读写),或者挂起

1.2 五模态
📝 在上面的基础上增加了出生和死亡
- 创建态: 进程的创建。
- 终止态: 进程的结束。

2. 进程间通信
2.1 同步与互斥
- 互斥: 只有一个设备(厕所),同一时间只能有一个人使用。
- 同步: 有顺序要求,A完成之后才能运行B。
2.2 信号量
📝 S S S是一个整数变量
- S > 0 S > 0 S>0:表示当前可用的资源数量
- S = 0 S = 0 S=0:表示资源刚好用完,且没有人排队
- S < 0 S < 0 S<0:表示当前正在排队等待该资源的进程数(绝对值就是排队人数)
2.3 PV操作
📝 这是两个原语,也就是原子操作,执行过程不允许被中断
- P操作:申请资源

- V操作:释放资源

3. 进程调度
3.1 调度层次------三级调度
- 作业调度(高级):将程序从硬盘调入内存(频率低)
- 内存调度(中级):当内存紧张时,将不重要的进程阻塞(挂起),放入外存中。
- 进程调度(低级):决定哪个就绪进程抢到CPU(发生频率极高,毫秒级别)
3.2 调度算法
-
先来先服务(FCFS):
- 特点:那就是先到先得呗
- 缺点:对于耗时比较短的作业不公平,因为耗时长的会消耗很多时间
-
时间片轮转:
- 特点:轮转顾名思义就是,每个人咱都来运行一下子,时间到了你就撤退
- 优点:公平,适合分时系统,也就是我们常用的PC手机等
-
优先级调度:
- 静态优先级:创建时定义好,之后不会改变优先级
- 动态优先级:等待时间越长优先级越高,防止饿了(等的时间太长)
-
多级反馈队列:
- 集万众宠爱于一身,拥有多个队列,优先级不同,时间片也不一样,需求兼容性很好。
-
周转时间: 就是等待 + 服务时间
周转时间 = 完成时间 − 到达时间 周转时间 = 完成时间 - 到达时间 周转时间=完成时间−到达时间 -
带权周转时间: 其实就是效率,看看是不是在规定时间内完成任务
带权周转时间 = 周转时间 / 服务时间 带权周转时间 = 周转时间 / 服务时间 带权周转时间=周转时间/服务时间

4. 死锁
4.1 四大必要条件
- 互斥: 资源独占
- 保持请求: 占有资源的同时申请新的资源
- 不可剥夺: 只能等对方主动释放
- 环路等待: A等B,B等C,C等A,闭环
4.2 死锁的处理策略
- 预防: 比如
一次性申请所有资源,但是代价很大 - 避免死锁:
银行家算法,在分配下一个资源的时候查看当前系统资源是否足够,足够了再分配。 - 检测与解除: 允许死锁发生,但
定期检查,一旦发现就杀死进程,直接干掉干掉。
4.3 银行家算法简介

📝 首先记住一个公式:
N e e d = M a x − A l l o c a t i o n Need = Max - Allocation Need=Max−Allocation

之后的核心就是拿着剩下的Allocation慢慢算,直到有一个安全序列,只不过我们要注意计算P1的时候,归还的资源是减去请求后的新[3,0,2]就行。
三、存储管理

1. 存储结构和地址
1.1 层次结构
📝 层次结构生效的基础:局部性原理。
- 寄存器: 最快、最贵
- Cache: 很快、也很贵
- 主存: 正常、价钱适中
- 外存: 一般、价钱合适
寄存器------Cache------主存------外存
1.2 地址
- 逻辑地址(相对地址): CPU生成的、程序里写的地址,比如变量a的地址。
- 物理地址(绝对地址): 内存条上真实的地址,我们也可以通过程序打印出变量的物理地址。
- 重定位: 逻辑地址和物理地址的映射过程
2. 分区存储管理
- 固定分区: 死板,存在
内部碎片(也就是无法完整利用存储空间) - 可变分区:
按需分配,存在外部碎片(不同分区之间的空隙) - 四大分配算法:
- 首次适应:
从头开始找能放下的,最快,但是会破坏低地址空间(因为不一定完全适应,然后导致内存切割) - 最佳适应: 找
大小最合适的,最烂,因为会留下无数极小且无法利用的外部碎片。 - 最差适应: 找
最大的一块切割。适用于大作业。 - 循环首次适应: 从
上次找的地方接着找,分布均匀。
- 首次适应:
3. 分页存储管理
-
原理: 把物理内存切成一块块(页帧),把逻辑程序切成大小一样的一页页。
-
地址结构:
逻辑地址 = 页号 P + 页内偏移量 W 逻辑地址 = 页号P + 页内偏移量W 逻辑地址=页号P+页内偏移量W
物理地址 = 块号 ∗ 页面大小 + 页内偏移量 W 物理地址 = 块号 * 页面大小+ 页内偏移量W 物理地址=块号∗页面大小+页内偏移量W -
页表: 记录"页号和物理块号"的映射表。
-
块表(TLB): 放在寄存器 / 高度缓存里的"精简版页表",用来加速查表。
4. 分段存储和段页式
- 分段: 按
逻辑功能分(主函数一段、子函数一段、数据一段)。利于共享和保护。 - 段页式:
先分段,段内在分页。结合了段的共享和页的内存利用率优点。
5. 虚拟存储与页面置换
5.1 程序局部性原理
- 时间局部性: 刚访问过的指令马上又访问(循环结构)
- 空间局部性: 访问了某个位置,马上访问它隔壁(数组遍历)
5.2 页面置换算法
- OPT(最佳置换): 踢出未来最久不用的,无法实现,因为谁也不知道。
- FIFO(先进先出)
- LRU(最近最少使用): 踢掉最近一段时间没有使用过的。
- NRU(最近未使用): 成本相比LRU低一些
6. 扩展缺页中断
- 这是当访问的页面不在内存中,可能因时间太长被清理出内存了,然后产生了所谓的"缺页中断"现象,这时候会阻塞进程,然后重新调入页面,修改页表,重新执行指令。
7. 经典题目
- 分页地址计算

- 页面置换LRU

四、设备管理
4.1 I/O软件的操作过程(重点)

4.2 四大关键技术
- DMA(直接存储器读取):
- 原理: 数据在内存和I/O设备之间
成块传输,不需要CPU搬运,这个之前说过。 - 特点: 减少CPU干预,只在申请总线和释放总线的时候干预。
- 原理: 数据在内存和I/O设备之间
- Spooling(假脱机):
- 原理: 在磁盘上开辟输入井/输出井,先存盘在排队处理。
- 作用: 将独占设备(打印机) 改造成
共享设备。
- 缓冲:
- 目的: 缓和CPU和设备
速度不匹配的问题。
- 目的: 缓和CPU和设备
- 通道: 一种比DMA更加高级的手段,有一个
专门的硬件来处理IO。
4.3 磁盘调度算法
- 先来先服务(FCFS):公平,但效率低。
- 最短寻道时间优先(SSTF):谁距离磁头近就去哪儿,但可能导致饥饿现象,因为排队远的就耗时长。
- 扫描算法(SCAN / 电梯算法):先规定一个方向,扫描结束后换一个方向
- 循环扫描(C-SCAN):单向扫描,到终点之后直接从头开始再次扫描
4.4 经典题目
- 磁盘调度计算

五、文件管理
5.1 文件和文件系统
- 文件: 具有名称和后缀名的一组
相关信息的集合,对用户来说这是存取数据的基本单位。 - 文件系统: 操作系统中负责管理和存取文件的
软件机构,负责把用户的文件名对应到硬盘上的物理地址。
5.2 文件结构和组织
(1)逻辑结构
- 流式文件: 看做是一串
字符流,没有结构,类似我们常见的txt文件。 - 记录式文件: 由若干条记录组成,每条记录有
固定的字段,也就是数据库类似的。
(2)物理结构
- 连续结构: 文件存放在
连续的物理块中。优点 是顺序读取快,缺点是不能灵活扩展。 - 链接结构: 文件离散存放,用
指针串联。优点 是容易扩展,缺点是随机访问慢。 - 索引结构: 为每个文件建立一张
索引表,记录逻辑块到物理块的映射。支持随机访问,而且易于扩展,是现代的主流。
(3)目录
- 文件控制块(FCB): 由FCB组成的表,里面记录了文件大小、物理位置、创建时间等等各种信息。
- 目录结构:
- 一级目录: 最开始的划分,所有文件在一张表里,不能重名。
- 二级目录: 按照用户划分目录,但也只是解决了不同用户文件重名的问题。
- 多级目录: 树形结构,目录按照理论来说可以无限嵌套,层次清晰,便于分类。
(4)存储方法与空间
📝 思考:当硬盘上有很多空位,怎么管理这些空位?
- 空闲区表: 用一张
表来记录哪一段是空的(起始位置+长度),适用于连续分配。 - 位示图(重点中的重点): 用二
进制位构成的地图来表示磁盘块的使用情况,1代表占用,0代表空闲。 - 空闲块链: 把空闲的块向
链条一样串起来。 - 成组链接法: unix系统专用。把空闲块分成组,每一组的第一个块记录下一组的地址。结合了空闲表和链表的优点,适合大型的系统。
(5)共享与保护
-
文件共享:
- 硬链接: 利用
索引节点共享,多个文件名指向同一个物理索引。删除时通过计数器判断,计数器为0时才真的删除。 - 符号链接(软链接): 通俗的就是
快捷方式,这是一个存储了另一个文件地址的文件,如果源文件删除,这个链接就失效了。
- 硬链接: 利用
-
文件保护:
- 存取控制矩阵/表: 一张二维表,记录哪个用户对哪个文件有什么
权限。
- 存取控制矩阵/表: 一张二维表,记录哪个用户对哪个文件有什么
(6)安全和可靠性
- 系统安全:
分级管理(系统级,用户级),防止未授权访问。 - 可靠性:
- 转储和恢复: 定期备份(全量备份和增量备份)
- 日志文件: 记录每一次操作,系统奔溃重启后,根据
日志系统重做或者撤销未完成的操作,保证一致性(类似强制重启后打开浏览器,还能恢复之前的页签的功能)
5.3 真题解析
(1)索引结构计算
📝 首先要记住两个公式:
N ( 地址数量 ) = 物理块大小 / 地址项大小 N(地址数量) = 物理块大小 / 地址项大小 N(地址数量)=物理块大小/地址项大小
索引容量 = N ∗ 物理块大小 索引容量 = N * 物理块大小 索引容量=N∗物理块大小
题目:某文件系统采用索引节点管理,直接索引10个,一级间接索引1个,二级间接索引1个。物理块大小4KB,地址项大小4字节。
问:该系统支持的
最大文件长度是多少?

(2)位示图计算
题目:某系统字长32位,位示图从0开始编号(字号0,位号0)。若物理块号为 4195,它对应位示图的位置是?

(3)硬链接与软链接
题目:用户A对文件F创建了硬链接H,用户B对文件F创建了软链接S。

六、作业管理
📝 作业管理主要解决的是:"系统如何接纳用户的任务,并决定先干哪一个"
6.1 作业与作业控制
- 作业: 用户提交的一个任务,对于计算机来说是一个
各种工作的集合。(相当于说我打开了微信,那后台可能分为好几个进程,这个进程对于计算机来说才是一个一个任务) - 作业状态:
- 提交: 用户正在进行
数据的准备,比如正在键盘输入或者其它的数据输入。 - 后备: 提交后作业存放在"
后备队列"中,等待内存的调度(所谓的作业调度就发生在这里) - 执行: 作业被调入内存之后就变成了进程,然后开始执行。
- 完成: 任务完成,输出结果。
- 提交: 用户正在进行
6.2 作业调度
- 先来先服务(FCFS): 自己感悟吧,这个说太多了。
- 短作业有限(SST): 谁运行时间短谁先来,但容易出现长作业饥饿现象,因为短的老是插队。
- 响应比高优先(HRRN): 折中方案,具体就是你等的时间太长把你放前面。
响应比 = 1 + 等待时间 / 服务时间 响应比=1+等待时间 / 服务时间 响应比=1+等待时间/服务时间 - 优先级调度: 根据用户指定的优先级或者系统内置的优先级调度。
6.3 衡量指标
- 周转时间: 完成时间 - 提交时间
- 带权周转时间: 周转时间 / 服务时间。(且必定大于1,越接近1越好)
6.4 真题解析
(1)调度算法特性

(2)计算必考(响应比)

(3)周转时间计算
