系统分析师(4)- 系统可靠性、总线、存储系统-Cache、输入输出(IO)技术、磁盘管理
可靠性指标
- 平均无故障时间 \(\text{MTTF}=1/\lambda\);\(\lambda\) 失效率
- 平均故障修复时间 \(\text{MTTR}=1/\mu\);\(\mu\) 修复率
- 平均故障间隔时间 \(\text{MTBF}=\text{MTTF}+\text{MTTR}\)
- 系统可用性 \(=\dfrac{\text{MTTF}}{\text{MTTF}+\text{MTTR}} \times 100\%\)


串联、并联系统可靠性与MTTF(系统分析师高频)
前提:各个子系统失效率相互独立,单个部件 \(\text{MTTF}_i=\dfrac{1}{\lambda_i}\)
1. 串联系统(全部正常,系统才正常)
- 总失效率:\(\lambda = \lambda_1+\lambda_2+\dots+\lambda_n\)
- 系统平均无故障时间:
- 可靠度:\(R_\text{串}=R_1 \times R_2 \times \dots \times R_n\)
2. 并联系统(只要有一个正常,系统就正常,n个部件并联)
以2个部件并联(最常考):
若两个部件失效率相同 \(\lambda_1=\lambda_2=\lambda\):
n个同失效率\(\lambda\)并联通用公式:
- 可靠度:\(R_\text{并}=1-(1-R_1)(1-R_2)\dots(1-R_n)\)
3. 混联(串并联组合)
思路:从内层向外层,先算一组并联/串联的可靠度、MTTF,再当成一个部件继续计算。
💡考试小提示
- 串联:部件越多,整体MTTF越小,可靠性越低;
- 并联:冗余,部件越多,MTTF越大,可靠性越高;
- 考题经常给每个部件的MTTF,先转成\(\lambda=\dfrac{1}{\text{MTTF}}\)再代入计算。
总线
- 内部总线、系统总线(数据、地址、控制)、外部总线
- 串行、并行
- 单工、半双工、全双工
存储系统-Cache

局部性原理
- 时间局部性:
- 指程序中的
某条指令一旦执行,不久以后该指令可能再次执行;典型原因是程序中存在大量的循环操作。
- 指程序中的
- 空间局部性:
- 指一旦程序访问了某个
存储单元,不久以后,其附近的存储单元也将被访问;典型情况是程序顺序执行。
- 指一旦程序访问了某个
工作集理论
工作集是进程运行时被频繁访问的页面集合。
Cache 平均访问时间
假设:
h:Cache 访问命中率t₁:Cache 的周期时间t₂:主存储器周期时间
以读操作为例,其中 (1 - h) 为失效率:
系统的平均周期为:
Cache 映像方式
- 直接相联映像:硬件电路较简单,但冲突率很高。
- 全相联映像:电路难于设计和实现,只适用于小容量的cache,冲突率较低。
- 组相联映像:直接相联与全相联的折中。
直接映射 = 固定位置;
全相联 = 随便放、需要比较全部标记;
组相联 = 先分到组,组内全相联。
直接映射

- 分成了128个
区,编号 0-127 - \(128 = 2^{7}\) ,用7个位来标识Cache里的页来自主存的哪一
区- 显然:Cache大小 = 分区大小
- 会出现多个
主存页映射到同一个Cache页,可能造成读写时反复抢占Cache,导致谁都无法命中,使命中率下降。
全相联

- 页(主存) 与 页(Cache)大小完全一致
- \(2048 = 2^{11}\) ,用11个位完全能够严格区分出Cache里的页来自主存的哪一页
组相联
Cache淘汰策略 & 写过程

- Cache淘汰策略
- 先进先出 FIFO : 对应空间局限性,越早进Cache的存放位置离刚进的页最远,越早的越先淘汰掉
- 近期最少使用 LRU : 对应时间局限性
- Cache 写过程
- 写通: Cache 和 内存 都写,保持一致
- 写回: 只写Cache,当Cache要淘汰时,才写到内存里去保存
- 标记法:只写内存,并将标记位清0;若要用到此数据,需要再次调取到 Cache
模运算的三种硬件实现方式(含ASCII图解)
针对上一轮提到的三种模运算硬件实现场景,下面分别给出一个具体的工程/数学例子,并结合 ASCII 图形化的方式,把硬件内部寄存器、逻辑门和数据的流动画出来,让你直观看到硬件在干什么。
场景一:通用模运算(整数除法取余)—— 硬件除法器
例子:计算 13 % 5(即 二进制 1101 % 101)
硬件内部有一个“移位-减法”状态机。过程如下:
【初始状态】
被除数寄存器 (A): 1 1 0 1
除数寄存器 (B): 1 0 1
余数寄存器 (R): 0 0 0 0
【第1步:A左移,最高位移入R】
A: 1 0 1 0 (左移,最高位1移出)
R: 0 0 0 1 (接收了移出的1)
比较:R (1) < B (5),不执行减法,商位填0。
【第2步:A继续左移】
A: 0 1 0 0
R: 0 0 1 1 (R左移,移入A的最高位0) -> R=3
比较:R (3) < B (5),不执行减法,商位填0。
【第3步:A继续左移】
A: 1 0 0 0
R: 0 1 1 1 (R左移,移入A的最高位0) -> R=7
比较:R (7) >= B (5)!
执行减法:R = R - B = 7 - 5 = 2
商位填1。
【第4步:A继续左移】
A: 0 0 0 0
R: 0 1 0 1 (R左移,移入A的最高位1) -> R=5
比较:R (5) >= B (5)!
执行减法:R = R - B = 5 - 5 = 0
商位填1。
【结束状态】
商寄存器: 0 0 1 1 (即十进制的3)
余数寄存器(R): 0 0 0 0 (即十进制的0)
硬件结果:
13 % 5 = 0(注意:13 是1101,最后一步移入的 1 让 R 变成 5,减去后为 0)。
场景二:特殊模数($ 2^n - 1 $)—— 加法器与循环进位
例子:计算 29 % 15(即 二进制 11101 % 1111)
此时不需要除法器,硬件只需利用一个简单的加法器(Adder),把二进制数按 4 位(n)切分。
【步骤1:切分与对齐】
被除数: 1 1 1 0 1
模数: 1 1 1 1 (即 2^4-1, 15)
高1位: 1
低4位: 1 1 0 1
【步骤2:相加(利用加法器硬件)】
1 (高位)
+ 1 1 0 1 (低位)
----------
1 1 1 0 (十进制 14)
【步骤3:比较(由于 14 < 15,结束)】
结果: 1 1 1 0 (十进制 14)
反面例子:计算 31 % 15 (即 11111 % 1111,触发循环进位)
切分:
高1位: 1
低4位: 1 1 1 1
相加:
1
+ 1 1 1 1
----------
1 0 0 0 0 (十进制 16,超出了4位,产生进位)
【循环进位】(关键硬件操作,把最高位加回最低位)
1 0 0 0 0
+ 1 (最高位落回最低位)
----------
0 0 0 1 (十进制 1)
结果: 31 % 15 = 1
硬件实现:只需加法器和多路选择器(处理进位),延迟极低,常用于网络硬件。
场景三:模2运算(XOR)—— CRC校验的移位寄存器
例子:计算 1101 % 101(模2除法,生成多项式为101)
在硬件中,这是一个线性反馈移位寄存器(LFSR)。数据从左边依次串行输入:
【待补充 ……】
- 原理:每当最高位(Q1)移出时,它会与输入数据进行 XOR(异或)。如果是 1,就改变下一位的值;如果是 0,就原样移位。整个电路完全由异步/同步逻辑门组成,没有CPU参与。以太网的网卡芯片里,这个电路被重复了 32 次(CRC-32)并行计算。
🎯 总结:三种硬件电路的形态
- 通用除法器:像一台精密的移位机器,需要反复比较和减法。
- 特殊模数:像一个加法套娃,把高位切下来扔进低位累加。
- 模2除法:像一条带反馈的流水线,数据像流水一样穿过触发器,只有分叉的地方(XOR)才改变水流。
输入输出(IO)技术
I/O控制方式
- 程序控制(查询)方式:
CPU轮询- 方法简单,硬件开销小,但I/O能力不高,严重影响CPU的利用率。
- 程序中断方式:
外设主动告知- 与程序控制方式相比,中断方式因为CPU无需等待而提高了传输请求的响应速度。
- DMA方式:
中间加一个中介,解放CPU- 为了在主存与外设之间实现高速、批量数据交换而设置。DMA方式比程序控制方式与中断方式都高效。
- 通道方式
- 纯硬件方式,较快
- I/O处理机
- 纯硬件方式,最快
从上往下,通信效率越来越高,CPU参与程度越来越低
程序中断方式

- 图中各阶段的核心解释:
-
中断请求(INTR):外设在完成一个字节传输或需要 CPU 处理时,通过硬件引脚向 CPU 发出电信号。这个过程是异步的,CPU 随时可能收到。
-
中断响应:CPU 不会在一条指令执行到一半时强行中断。它会在当前指令执行完、取下一条指令之前,检查中断引脚。如果条件允许,才进入中断周期。
-
中断隐指令(硬件保护现场):这是由硬件电路自动完成的,不需要程序员写代码。硬件会自动把当前的程序计数器(PC) 和程序状态字(PSW) 压入系统堆栈,然后跳到中断向量表。
-
中断服务程序(ISR):由软件实现。你要在这里处理真正的业务(比如把键盘输入存到内存,或者读取传感器数据)。处理完后,必须显式地清除中断标志位,防止中断风暴。
-
恢复现场与返回:硬件或指令(如 IRET)会自动从堆栈中弹出之前的 PSW 和 PC,让 CPU 回到被打断的那条指令继续往下跑,仿佛什么都没发生过一样。
-
例题
计算机系统中常用的输入/输出控制方式有无条件传送、中断、程序查询和DMA方式等。当采用( )方式时,不需要CPU执行程序指令来传送数据
A. 中断
B. 程序查询
C. 无条件传送
D. DMA
答案
D. DMA
解析
题干关键点:不需要CPU执行程序指令来传送数据
- A 中断方式:外设发出中断后,CPU要执行中断服务程序里的指令完成数据读写,需要CPU指令。
- B 程序查询方式:CPU不断循环执行指令,查询外设状态、读写数据,全程依靠CPU执行指令。
- C 无条件传送:由CPU执行I/O指令传输数据,依然需要CPU指令。
- D DMA(直接存储器访问):DMA控制器接管总线,
外设与主存之间直接传输数据;数据传送阶段不需要CPU执行任何指令,CPU仅负责提前初始化DMA控制器,数据搬运由硬件直接完成。
✅ 核心考点:DMA 的本质是数据传输阶段无需CPU干预、不用CPU执行传送指令。
主存(内存)编址
存储单元个数 = 最大地址 - 最小地址 + 1
编址内容
-
按
字编址:存储体的存储单元是一个字,与硬件设计有关; x86 / ARM 计算位宽是 64bit,但其编址仍是按 8bit。 -
按
字节编址:存储体的存储单元是一个字节,行业约定 8bit -
总容量 = 存储单元个数 * 编址内容
-
总片数 = 总容量 / 单片容量
题目
内存按字节编址,利用\(\boldsymbol{8K \times 4bit}\)的存储器芯片构成\(\boldsymbol{84000H}\)到\(\boldsymbol{8FFFFH}\)的内存,共需()片。
A.6 B.8 C.12 D.24
解析
公式:\(\boldsymbol{总片数 = 总内存容量 \div 单个芯片容量}\)
1. 求总内存大小(按字节编址,一个地址=1字节)
地址区间:84000H ~ 8FFFFH
存储单元数量 = 末地址 − 首地址 + 1
2. 单片芯片容量
芯片:\(8K \times 4\mathrm{bit}\)
\(8K\times4\mathrm{bit}= 4\mathrm{KB}\)
注意:芯片数据位是4bit,要拼成8bit的字节,2片才能组成8KB内存
3. 计算总片数
答案:C
磁盘管理

题目1
假设某磁盘的每个磁道划分成11个物理块,每块存放1个逻辑记录。逻辑记录R0,R1……R9,R10存放在同一个磁道上,记录的存放顺序如下表所示:
| 物理块 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 逻辑记录 | R0 | R1 | R2 | R3 | R4 | R5 | R6 | R7 | R8 | R9 | R10 |
磁盘的旋转周期为33ms,磁头当前处在R0的开始处。若系统使用单缓冲区顺序处理这些记录,每个记录处理时间为3ms,则处理这11个记录的最长时间为( );若对信息存储进行优化分布后,处理11个记录的最少时间为 ( )
第一空选项
A.33ms B.336ms C.366ms D.376ms
第二空选项
A.33ms B.66ms C.86ms D.93ms
已知条件整理
- 磁道一共11块,旋转一圈总时间:33ms
- 读1块的时间 = \(33/11 = \boldsymbol{3ms}\)
- 单缓冲区:读完一块,才能开始处理;处理期间磁盘继续旋转
- 磁头起点:R0起始位置;顺序处理R0→R1→R2→…→R10
- 每条记录处理时间=3ms
核心原理:单缓冲区,读完记录放入缓冲区,CPU处理记录的同时,磁盘还在不停旋转。处理完当前记录后,磁头大概率已经转过下一个记录,必须等磁盘转完整圈,再次转到下一块,才能读取。
第一问:原始顺序存放,最长时间
① R0
- 读取R0:3ms
- 处理R0:3ms
读完R0开始处理,处理的3ms内磁盘继续旋转,磁头已经滑过R1。
想要读到R1,必须等磁盘转完整圈(33ms)才能再次来到R1。
② R1 ~ R10(一共10条记录)
- R0读取3ms,处理3ms;读完R0,磁头位置:R0结束,经过3ms处理,磁盘向前移动1块。
- R0读取:3ms,处理3ms。
- R0处理完毕,磁头已经到达R2起始。要读R1,需要等待
10块的旋转时间:- \(10\times3=30\mathrm{ms}\),然后读R1(3ms),处理R1(3ms)。
- R1~R9(9条):每条等待30ms +读3ms +处理3ms
- R10:等待30ms,读3ms,处理3ms
计算总时间
\(T = (3+3)+10\times(30+3+3) = 6+360 = \boldsymbol{366ms}\)
✅ 第一空答案:C(366ms)
解释:读完R0,处理3ms,磁盘转过1块(R1),磁头落在R2。要拿到R1,需要等磁盘再转10块(30ms)回到R1。R1~R10每一条都需要等待30ms旋转时间。
第二问:优化分布,最少时间
优化分布:调整记录在磁道上物理块位置,处理完当前记录时,磁头刚好到达下一条记录起始位置,消除多余旋转等待。
- 读取R0:3ms,处理R0:3ms
读R0用3ms,处理R0的3ms,磁盘正好转过1块,下一个物理块正好放R1。
这样:读完、处理完Ri,磁头正好对准Ri+1,不需要额外等待。
每条记录:读3ms + 处理3ms。
前10条R0~R9:每条6ms;
最后R10:读取3ms,处理3ms。
- 思路:优化分布,磁头起点R0
- R0:读3ms,处理3ms(6ms)
- R1~R10:读完上一条,磁头刚好到下一块,不需要旋转等待,每条读3+处理3
- 优化排布:R0,R1,R2...R10间隔放置,处理完上一个,磁头刚好到下一个。
- 总时间 = 11×(3+3) = 66。选 B。
考点小结
- 磁盘单缓冲区:读取和处理不能并行;读取时磁盘旋转,处理时磁盘继续旋转。
- 普通顺序存放:处理完一条,磁盘已经转过下一块,要等几乎一整圈才能读到下一条,旋转延迟大。
- 优化分布(交错分布):调整物理块位置,处理完当前记录,磁头刚好到下一条记录,消除大部分旋转等待,大幅缩短总时间。
磁盘寻道调度4种算法
1. FCFS 先来先服务(最简单)
规则:按照请求到达的先后顺序依次访问,不看距离。
优点:公平,实现简单
缺点:寻道距离不可控,容易产生饥饿、寻道时间很长
例子:当前15,请求顺序 12,19,23,19,12,28 → 访问顺序就是:12→19→23→19→12→28
2. SSTF 最短寻道时间优先(Shortest Seek Time First,刚才这道题)
规则:每次选距离当前磁头柱面最近的请求。
✅ 同柱面多个请求可以一起连续处理
优点:平均寻道距离短,效率高
缺点:会饥饿;离磁头远的请求长期得不到服务
做题要点:算 |当前柱面 - 请求柱面|,挑差值最小的
3. SCAN 电梯算法(扫描算法)
规则:磁头沿着一个固定方向移动(比如从小柱面→大柱面),沿途遇到请求就处理;走到尽头之后,反向掉头,继续扫描。
像电梯:一路往上接人,到顶楼再往下
优点:不会饥饿,寻道性能比较稳定
缺点:两端请求等待时间长
⚠️ 做题一定要先看题目给定【初始移动方向】!
常考坑:题目没说方向,默认往增大方向走
4. C-SCAN 循环扫描算法
规则:单向扫描。只沿着一个方向(从小→大)处理请求;到达最大柱面之后,直接跳回最小的请求位置,重新开始单向扫描,不回头
理解:只往一个方向接单,到顶直接瞬移回起点重新扫,不是电梯来回走
优点:所有请求的等待时间更加均匀
缺点:掉头跳转那一段没有处理请求,有浪费
快速对比表
| 算法 | 核心规则 | 是否饥饿 | 特点 |
|---|---|---|---|
| FCFS | 按到达顺序 | ❌不会饥饿 | 最简单,性能差 |
| SSTF | 每次选最近柱面 | ✅容易饥饿 | 平均寻道短,高频考题 |
| SCAN(电梯) | 固定方向走,到头反向 | ❌不易饥饿 | 来回扫描 |
| C-SCAN(循环电梯) | 单向扫描,到头直接跳回起点 | ❌不易饥饿 | 单向循环,等待更均匀 |
通用做题步骤(套模板)
- 提取:初始磁头位置、请求的全部柱面号
- 看清题目用哪一种算法,看清SCAN的初始移动方向
- 同柱面的请求可以连续处理,不用重复移动磁臂
- 求总寻道长度:把每一步移动的柱面差值相加(绝对值相加)
高频易错点
- 磁头号、扇区号 不参与寻道调度! 寻道只看柱面
- SSTF 没有固定方向,每次就近;SCAN是强制方向优先
- C-SCAN折返的时候,折返的那一段距离不算寻道长度(有的教材算,看题目说明)
- 区分:寻道时间(磁臂移动)、旋转延迟、传输时间,调度算法只管【寻道】
题目1
假设磁盘臂位于15号柱面上,进程的请求序列如下表表示,如果采用最短移臂调度算法(SSTF),那么系统的响应序列应为()。
| 请求序列 | 柱面号 | 磁头号 | 扇区号 |
|---|---|---|---|
| ① | 12 | 8 | 9 |
| ② | 19 | 6 | 5 |
| ③ | 23 | 9 | 6 |
| ④ | 19 | 10 | 5 |
| ⑤ | 12 | 8 | 4 |
| ⑥ | 28 | 3 | 10 |
A:①②③④⑤⑥ B:⑤①②④③⑥ C:②③④⑤①⑥ D:④②③⑤①⑥
知识点
最短移臂调度 SSTF(Shortest Seek Time First)
优先选择离当前磁头所在柱面距离最近的请求;
✅ 只看柱面号!同一个柱面的多个请求,不需要移动磁臂,可以连续处理。
磁头号、扇区号不影响移臂调度。
解题步骤
初始位置:柱面15
所有请求对应的柱面:
①:12,②:19,③:23,④:19,⑤:12,⑥:28
-
当前柱面=15
计算各个请求柱面与15的距离:- 12:|15-12|=3
- 19:|15-19|=4
最近的是柱面12,对应请求 ⑤、①(同柱面12,先处理这两个,顺序⑤①)
移动到柱面12
-
当前柱面=12
剩余请求:②(19)、③(23)、④(19)、⑥(28)
距离:|12-19|=7;19最近,请求②、④(同柱面19,顺序②④)移动到柱面19
-
当前柱面=19
剩余请求:③(23)、⑥(28)
|19-23|=4,23更近 → 处理③移动到柱面23
-
当前柱面=23
仅剩⑥(28),处理⑥
最终响应序列
⑤ → ① → ② → ④ → ③ → ⑥
✅ 答案:B
易错提醒
- SSTF只比较柱面号,磁头号、扇区号和磁臂移动无关;
- 同一柱面上的多个I/O请求,磁臂不需要移动,可以连续处理;
- 磁道/柱面移动距离 = 两个柱面号差值的绝对值。
浙公网安备 33010602011771号