第二章操作系统
软考高级系统架构设计师备考,只是写着方便自己看,如果有发现不对或少得的地方可以多多指正,谢谢各位兄弟。
一、操作系统概述
1.1 核心定义与作用
操作系统是管理软硬件资源、控制程序执行、提供用户接口的底层系统软件,两大核心价值:
-
效率提升:通过CPU、内存、设备等资源的统一调度,最大化硬件利用率
-
体验优化:封装硬件操作细节,提供图形/命令行等友好交互界面
1.2 四大基本特征
|
特征 |
核心含义 |
|---|---|
|
并发性 |
多个程序在同一时间段内交替执行(区别于并行的同时执行) |
|
共享性 |
系统资源被多个进程共同使用(互斥共享/同时访问) |
|
虚拟性 |
通过时分复用/空分复用,将一个物理实体映射为多个逻辑对应物(如虚拟内存) |
|
不确定性 |
进程执行速度受调度策略影响,相同输入可能产生不同执行时序 |
1.3 五大核心功能
-
进程管理:进程创建/销毁、状态切换、调度与同步
-
文件管理:文件存储、目录组织、权限控制与空间分配
-
存储管理:内存分配、地址映射、碎片回收与扩充
-
设备管理:I/O设备分配、驱动控制、缓冲管理与虚拟设备实现
-
作业管理:作业调度、状态监控与资源分配
二、操作系统分类与嵌入式系统专项
2.1 常见操作系统类型
|
类型 |
典型场景 |
代表系统 |
|---|---|---|
|
批处理OS |
大规模科学计算 |
IBM OS/360 |
|
分时OS |
多用户交互 |
UNIX、Linux |
|
实时OS |
工业控制、航空航天 |
VxWorks、RTEMS |
|
网络OS |
服务器集群 |
Windows Server |
|
分布式OS |
分布式计算 |
Hadoop生态 |
|
微机OS |
个人电脑 |
Windows、macOS、Linux |
|
嵌入式OS |
智能设备、工业终端 |
嵌入式Linux、FreeRTOS |
2.2 嵌入式操作系统五大特性
-
微型化:代码量与资源占用极低,适配微小型硬件(如低功耗MCU)
-
可定制:支持跨平台移植,可通过配置裁剪功能适配不同硬件
-
实时性:硬实时响应要求,满足工业控制、数据采集等场景的确定性延迟需求
-
可靠性:内置容错机制,关键场景支持防故障与冗余设计
-
易移植性:通过硬件抽象层(HAL)和板级支撑包(BSP)降低硬件依赖
2.3 嵌入式初始化流程(自底向上)
片级初始化(CPU核心配置)→ 板级初始化(外设驱动加载)→ 系统初始化(内核启动)
三、进程管理核心考点
3.1 进程基础
-
组成:程序(代码段)+ 数据(数据段)+ 进程控制块(PCB,进程唯一标识)
-
三态模型:运行态(占用CPU)、就绪态(等待CPU)、阻塞态(等待I/O等资源)
-
五态模型:新增新建态(进程创建中)、终止态(进程执行结束)
3.2 进程通信:同步与互斥
|
概念 |
核心区别 |
典型案例 |
|---|---|---|
|
同步 |
合作进程间的直接制约,需按序执行 |
生产者-消费者模型中,消费者需等待生产者产出数据 |
|
互斥 |
竞争临界资源的间接制约,同一时间仅一个进程访问 |
多进程争抢打印机,需互斥使用 |
临界资源:一次仅允许一个进程使用的资源(如打印机、共享变量)
3.3 PV操作与信号量机制
信号量分类
-
公用信号量(互斥信号量):初值为1(或资源数量),用于互斥访问临界资源
-
私有信号量(同步信号量):初值为0(或正整数),用于进程间同步协作
信号量物理意义
-
S≥0:当前可用资源数量
-
S<0:|S|为等待该资源的进程数
PV操作规则(原子操作,不可中断)
-
P操作(申请资源):S = S-1;若S≥0继续执行,否则阻塞当前进程
-
V操作(释放资源):S = S+1;若S>0继续执行,否则唤醒一个阻塞进程
典型应用
-
互斥实现:设置mutex初值=1,临界区前后分别执行P(mutex)和V(mutex)
-
生产者-消费者同步(单生产者单消费者,缓冲区容量n):
-
mutex(互斥信号量):初值1,保护缓冲区访问
-
S1(空缓冲区信号量):初值n,控制生产节奏
-
S2(满缓冲区信号量):初值0,控制消费节奏
-
3.4 前趋图
有向无环图(DAG),用于表示任务间的执行顺序约束:→={(Pi,Pj)|Pi必须在Pj开始前完成}。例如P1→P2表示P1是P2的前趋,P2需等待P1执行完毕。
3.5 进程调度
调度方式
-
可剥夺:高优先级进程到来时,立即暂停当前进程,分配CPU给高优先级进程
-
不可剥夺:高优先级进程需等待当前进程主动释放CPU
三级调度体系
|
调度级别 |
别名 |
核心作用 |
|---|---|---|
|
高级调度 |
作业调度 |
从后备队列选择作业调入内存,做好运行准备 |
|
中级调度 |
对换调度 |
将内存中暂时不用的进程换出到交换区,腾出内存空间 |
|
低级调度 |
进程调度 |
从就绪队列选择进程分配CPU,是OS中最活跃的调度 |
经典调度算法
|
算法 |
核心逻辑 |
优缺点 |
|---|---|---|
|
先来先服务(FCFS) |
按进程到达顺序分配CPU |
利于长作业、CPU繁忙型作业,不利于短作业、I/O繁忙型作业 |
|
时间片轮转 |
为每个进程分配固定时间片,轮流执行 |
提高并发性,响应速度快,时间片过大会退化为FCFS |
|
优先级调度 |
选择优先级最高的进程执行 |
需防止低优先级进程饥饿,可动态调整优先级 |
|
多级反馈调度 |
设置多个优先级队列(优先级从高到低),高优先级队列时间片短,未执行完的进程降级到低优先级队列 |
综合FCFS和时间片轮转优势,兼顾长短作业,是目前主流调度算法 |
3.6 死锁
死锁定义
两个及以上进程因争夺资源陷入无限等待的状态(如进程A持有资源1等待资源2,进程B持有资源2等待资源1)。
死锁四必要条件(缺一不可)
-
互斥条件:资源只能被一个进程独占
-
请求保持条件:进程持有资源的同时等待其他资源
-
不可剥夺条件:进程已获得的资源不能被强制剥夺
-
环路条件:进程资源图中存在环形等待链
死锁处理策略
|
策略 |
核心思路 |
典型方法 |
|---|---|---|
|
死锁预防 |
破坏死锁四必要条件之一 |
资源一次性分配(破坏请求保持)、可剥夺资源设计(破坏不可剥夺) |
|
死锁避免 |
动态检查资源分配安全性,避免进入死锁状态 |
银行家算法 |
|
死锁检测 |
允许死锁发生,定期检测并解除 |
资源分配图化简法 |
|
死锁解除 |
死锁发生后恢复系统正常运行 |
资源剥夺法(剥夺部分进程资源)、撤销进程法(终止死锁进程) |
死锁资源计算公式
-
发生死锁的最大资源数:
n*(R-1)(n为进程数,R为每个进程所需资源数) -
不发生死锁的最小资源数:
n*(R-1)+1
3.7 线程
-
定位:线程是进程内的执行单元,是CPU调度的最小单位;进程是资源分配的最小单位
-
优势:相比进程,线程创建、切换开销更小,可提高系统并发度
-
资源共享:同一进程内的线程共享代码段、数据段、打开的文件、全局变量等进程资源;但线程私有栈指针、程序计数器等上下文信息,互不共享
四、存储管理核心考点
4.1 地址相关概念
-
逻辑地址(虚拟地址):程序编译后生成的地址,不直接对应物理内存
-
物理地址:内存单元的实际地址,CPU通过地址总线访问
-
地址重定位:将逻辑地址转换为物理地址的过程
-
静态重定位:程序装入内存时一次性完成转换
-
动态重定位:程序运行过程中边执行边转换(支持内存紧凑、虚拟内存)
-
4.2 分区存储管理
|
分区类型 |
核心特点 |
优缺点 |
|---|---|---|
|
固定分区 |
内存预先划分为固定大小的分区 |
实现简单,但产生内部碎片(分区大于作业需求),空间利用率低 |
|
可变分区 |
按作业实际需求动态划分分区 |
无内部碎片,但会产生外部碎片(零散空闲分区无法使用) |
|
可重定位分区 |
通过移动已分配分区,合并零散空闲空间 |
解决外部碎片问题,但移动开销大 |
可变分区分配算法
-
首次适应算法:从内存低地址开始查找,选择第一个足够大的空闲分区
-
循环首次适应算法:从上次分配结束的位置开始查找空闲分区
-
最佳适应算法:选择最接近作业需求的空闲分区,易产生大量小碎片
-
最差适应算法:选择最大的空闲分区分配,可减少小碎片产生
4.3 分页存储管理
-
核心思想:将进程地址空间划分为大小相等的页,内存划分为与页大小相等的块,进程页可装入不相邻的内存块
-
地址结构:
页号 + 页内地址(页大小决定页内地址位数,如4K页面对应12位页内地址) -
页表:记录页号到物理块号的映射关系
-
快表(TLB):缓存常用页表项的高速缓存,加速地址转换
页面置换算法(内存不足时淘汰页面的策略)
|
算法 |
核心逻辑 |
特点 |
|---|---|---|
|
最佳置换算法 |
淘汰未来最长时间不再访问的页面 |
理论最优,但无法实现,作为评价基准 |
|
先进先出(FIFO) |
淘汰最早进入内存的页面 |
实现简单,可能出现Belady异常(分配更多内存反而缺页率上升) |
|
最近最少使用(LRU) |
淘汰最近一段时间内最久未使用的页面 |
基于局部性原理,性能接近最佳置换,但实现开销大 |
|
最近未用(NRU) |
优先淘汰未访问、未修改的页面 |
综合访问位和修改位,实现成本较低 |
4.4 分段存储管理
-
核心思想:按逻辑功能将进程地址空间划分为段(如代码段、数据段、堆栈段),每段大小不等,对应完整逻辑单元
-
地址结构:
段号 + 段内地址 -
与分页的区别:分页是物理单位(提高内存利用率),分段是逻辑单位(便于共享和保护,如共享代码段)
4.5 段页式存储管理
-
核心思想:结合分页和分段优势,先将进程按逻辑分段,每段再划分为固定大小的页
-
地址结构:
段号 + 段内页号 + 页内地址 -
优缺点:空间利用率高、支持共享保护,但地址转换开销大,需硬件支持
五、设备管理核心考点
5.1 I/O系统组成
设备(I/O硬件)+ 控制器 + 通道 + 总线 + I/O软件
5.2 核心管理技术
|
技术 |
核心作用 |
典型应用场景 |
|---|---|---|
|
通道技术 |
专用I/O处理器,独立执行I/O指令,完成后才中断CPU |
大型机、服务器,解放CPU,提高并行度 |
|
DMA技术 |
数据在内存与设备间直接传输,无需CPU干预 |
磁盘、网卡等高速设备,减少CPU中断次数 |
|
缓冲技术 |
通过硬件/软件缓冲区匹配CPU与I/O设备速度差异 |
缓解速度不匹配、减少CPU中断频率、提高并行性 |
|
Spooling技术 |
用磁盘空间模拟独占设备,将物理独占变为逻辑共享 |
虚拟打印机,多进程共享打印机,形成输出队列依次打印 |
5.3 缓冲技术计算(高频考点)
-
单缓冲总时间:
(T+M)*n + C(T=读入缓冲区时间,M=缓冲区送用户区时间,C=处理时间,n=块数) -
双缓冲总时间:
max(T,M+C)*(n-1) + T + M + C(当T>M+C时,为T*n + M + C)
六、文件管理核心考点
6.1 文件逻辑结构
|
类型 |
核心特点 |
典型案例 |
|---|---|---|
|
流式文件 |
无结构,由字节流组成 |
文本文件、二进制可执行文件 |
|
记录式文件 |
由若干逻辑记录组成,记录包含多个数据项 |
数据库表、Excel文件 |
6.2 文件物理结构(存储结构)
|
结构 |
核心特点 |
优缺点 |
|---|---|---|
|
连续结构 |
文件连续存储在相邻物理块中 |
访问速度快,但易产生外部碎片,文件长度难动态增长 |
|
链接结构 |
文件存储在不连续物理块中,块间通过指针链接 |
无外部碎片,文件可动态增长,但访问需遍历指针,可靠性低 |
|
索引结构 |
为每个文件建立索引表,记录逻辑块到物理块的映射 |
支持随机访问,无外部碎片,但索引表占用额外空间 |
|
UNIX三级索引 |
直接索引(0-9号块)+ 一级间接索引 + 二级间接索引 + 三级间接索引 |
兼顾小文件访问速度和大文件存储能力 |
6.3 文件目录
-
文件控制块(FCB):记录文件名、物理地址、权限、时间戳等信息的结构体,是文件存在的唯一标识
-
目录结构:
-
一级目录:单用户系统,所有文件在同一目录,易重名
-
二级目录:主文件目录(MFD)+ 用户文件目录(UFD),支持多用户
-
多级目录(树形目录):主流OS采用(如Windows、Linux),支持文件分类,便于共享和权限控制
-
6.4 空闲存储空间管理
|
方法 |
核心逻辑 |
适用场景 |
|---|---|---|
|
空闲区表 |
记录所有连续空闲区的起始块号和长度 |
连续文件结构 |
|
位示图 |
用二进制位(0=空闲,1=占用)表示物理块状态 |
各类文件系统,支持快速查找连续空闲块 |
|
空闲块链 |
将所有空闲块通过指针链接成链表 |
实现简单,无需额外元数据,但遍历效率低 |
|
成组链接法 |
空闲块分组,每组首块记录下一组信息 |
UNIX系统采用,兼顾效率与空间利用率 |
位示图计算(高频考点)
-
物理块号k对应的字序号:
⌊k / 字长⌋ + 1(物理块编号从0开始,字编号从1开始) -
位示图大小(字数):
⌈总物理块数 / 字长⌉
七、作业管理核心考点
7.1 作业基础
-
组成:程序 + 数据 + 作业说明书(描述作业执行步骤)
-
状态转换:提交(用户提交作业)→ 后备(进入作业队列)→ 执行(调入内存运行)→ 完成(输出结果,释放资源)
-
作业控制块(JCB):记录作业名、优先级、资源需求等信息,是作业存在的唯一标识
7.2 作业调度算法
|
算法 |
核心逻辑 |
特点 |
|---|---|---|
|
先来先服务 |
按作业提交顺序调度 |
实现简单,利于长作业,不利于短作业 |
|
短作业优先 |
优先调度运行时间短的作业 |
平均周转时间最短,但长作业可能饥饿 |
|
响应比高优先 |
响应比Rp=1+等待时间/运行时间,优先调度Rp高的作业 |
兼顾短作业(运行时间短)和长作业(等待时间长),避免饥饿 |
|
优先级调度 |
优先调度优先级高的作业 |
可根据作业类型、用户需求动态调整优先级 |
|
均衡调度 |
按作业特性分类(如I/O型、CPU型),均衡使用系统资源 |
提高系统整体吞吐量 |
7.3 性能指标
-
周转时间:作业从提交到完成的时间 = 等待时间 + 运行时间
-
带权周转时间:周转时间 / 运行时间(反映作业等待的相对代价)
-
平均周转时间:所有作业周转时间的平均值,越小说明调度算法性能越好
-
平均带权周转时间:所有作业带权周转时间的平均值,越小说明短作业等待代价越低
八、常考题
-
前趋图题目:根据前趋图确定逻辑关系,核心原则是“箭头指向的后继节点,其前趋必须全部执行完毕”,解题时优先排查缺失或多余的逻辑对。
-
银行家算法题目:通过计算进程最大需求、已分配资源和可用资源,判断是否存在安全序列。
-
线程资源共享题目:同一进程内线程共享进程资源(如打开的文件),但私有栈指针等上下文信息互不共享。
-
分页地址转换题目:例如页大小4K→页内地址12位,逻辑地址1B1AH中低12位B1AH为页内地址,高1位为页号1,查表得物理块号6,最终物理地址6B1AH。
-
页面置换题目:访问逻辑地址5148H,页号5对应物理块3,物理地址3148H;淘汰页面优先选状态位0(不在内存),其次访问位0(未访问),最后修改位0(未修改)。
-
双缓冲计算题目:双缓冲时间=10 * 10+6+2=108us,单缓冲时间=(10+6)*10+2=162us,节约54us。
-
三级索引题目:例如逻辑块号4属于直接索引(i_addr[0]-i_addr[4]),逻辑块号5属于一级间接索引;单个文件最大长度=5 * 1KB + 2(1KB/4B)1KB + (1KB/4B)(1KB/4B)1KB=66053KB。
-
位示图计算题目:例如4096号块对应字序号=4096/32+1=129;200GB磁盘共200 * 1024MB/1MB=204800块,位示图大小=204800/32=6400字。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)