软件设计师-软考知识复习(2)
PERT图详解
PERT(Program Evaluation and Review Technique,计划评审技术)是一种用于项目管理的图形化工具,主要用于分析任务的时间安排、识别关键路径和优化资源分配。它特别适用于复杂项目,其中任务之间存在依赖关系,且时间估算具有一定的不确定性。
1. PERT图的核心概念
(1) 基本组成
- 活动(Activity):项目中需要完成的具体任务,用**箭头(→)**表示,并标注持续时间。
- 事件(Event):活动的开始或结束点,用**节点(○)**表示,通常编号(如1, 2, 3…)。
- 路径(Path):从开始到结束的一系列连续活动。
- 关键路径(Critical Path):所有路径中耗时最长的路径,决定了项目的最短完成时间。
(2) 时间参数
参数 | 含义 | 计算公式 |
---|---|---|
ES(Earliest Start) | 活动可以开始的最早时间 | 前置活动的最大EF |
EF(Earliest Finish) | 活动可以完成的最早时间 | ES + 活动持续时间 |
LS(Latest Start) | 活动必须开始的最晚时间 | LF - 活动持续时间 |
LF(Latest Finish) | 活动必须完成的最晚时间 | 后续活动的最小LS |
Slack(松弛时间) | 活动可延迟的时间 | LS - ES 或 LF - EF |
2. PERT图的绘制步骤
步骤1:列出所有活动及依赖关系
例如:
活动 | 前置活动 | 持续时间(天) |
---|---|---|
A | - | 3 |
B | A | 2 |
C | A | 5 |
D | B, C | 4 |
步骤2:绘制PERT图
A(3)/ \B(2) C(5)\ /D(4)
步骤3:计算时间参数(正向计算ES/EF)
- 规则:
- 起始活动的 ES = 0。
- 后续活动的 ES = 所有前置活动的 EF 的最大值。
- EF = ES + 持续时间。
示例计算:
活动 | ES | EF |
---|---|---|
A | 0 | 3 |
B | 3 | 5 |
C | 3 | 8 |
D | max(5,8)=8 | 12 |
步骤4:反向计算(LS/LF)
- 规则:
- 最后一个活动的 LF = EF(项目总工期)。
- 前置活动的 LF = 后续活动 LS 的最小值。
- LS = LF - 持续时间。
示例计算:
活动 | LF | LS |
---|---|---|
D | 12 | 8 |
B | 8 | 6 |
C | 8 | 3 |
A | min(6,3)=3 | 0 |
步骤5:计算松弛时间
[
\text{Slack} = LS - ES \quad \text{或} \quad LF - EF
]
示例计算:
活动 | Slack | 关键路径? |
---|---|---|
A | 0 | 是 |
B | 3 | 否 |
C | 0 | 是 |
D | 0 | 是 |
关键路径:A → C → D(总工期12天)。
3. PERT图的应用
(1) 关键路径分析
- 关键路径上的活动不能延迟,否则整个项目延期。
- 非关键路径活动(如B)可以延迟不超过Slack时间。
(2) 时间优化
- 缩短关键路径:通过并行任务、增加资源或优化方法。
- 资源平衡:将资源从非关键活动调整到关键活动。
(3) 风险管理
- 对关键路径上的任务重点监控,避免延误。
4. PERT vs. 甘特图
特性 | PERT图 | 甘特图 |
---|---|---|
用途 | 分析任务依赖关系和关键路径 | 可视化任务时间安排 |
优点 | 适合复杂项目,优化时间 | 直观显示任务进度 |
缺点 | 绘制复杂 | 难以显示任务依赖关系 |
5. 示例完整分析
项目:软件开发
活动 | 描述 | 前置活动 | 时间(天) |
---|---|---|---|
A | 需求分析 | - | 5 |
B | 设计 | A | 7 |
C | 前端开发 | B | 10 |
D | 后端开发 | B | 12 |
E | 测试 | C, D | 5 |
PERT图:
A(5)|B(7)/ \C(10) D(12)\ /E(5)
时间计算:
活动 | ES | EF | LS | LF | Slack | 关键路径? |
---|---|---|---|---|---|---|
A | 0 | 5 | 0 | 5 | 0 | 是 |
B | 5 | 12 | 5 | 12 | 0 | 是 |
C | 12 | 22 | 14 | 24 | 2 | 否 |
D | 12 | 24 | 12 | 24 | 0 | 是 |
E | 24 | 29 | 24 | 29 | 0 | 是 |
关键路径:A → B → D → E(总工期29天)。
磁盘调度:最短移臂优先算法(SSTF)详解
问题描述
假设磁盘磁头初始位置在 50,给定一组磁道请求序列:
[55, 58, 39, 18, 90, 160, 150, 38, 184]
使用 最短寻道时间优先(SSTF)算法,计算磁头移动顺序和总移动距离(时间)。
1. SSTF算法原理
- 核心思想:优先服务离当前磁头位置最近的磁道请求,减少寻道时间。
- 特点:
- 比先来先服务(FCFS)更高效,但可能导致饥饿(某些请求长期得不到服务)。
- 时间复杂度:每次选择最近请求需遍历所有未处理请求,平均为 (O(n^2))。
2. 计算步骤
(1) 初始化
- 当前磁头位置:50
- 剩余请求序列:
[55, 58, 39, 18, 90, 160, 150, 38, 184]
- 移动顺序:
[50]
(初始位置) - 总移动距离:0
(2) 逐步选择最近的磁道
当前磁头位置 | 剩余请求 | 最近磁道 | 移动距离 | 移动顺序更新 | 总移动距离 |
---|---|---|---|---|---|
50 | 55,58,39,18,90,160,150,38,184 | 38 | |50-38|=12 | [50, 38] | 12 |
38 | 55,58,39,18,90,160,150,184 | 39 | |38-39|=1 | [50, 38, 39] | 13 |
39 | 55,58,18,90,160,150,184 | 18 | |39-18|=21 | [50, 38, 39, 18] | 34 |
18 | 55,58,90,160,150,184 | 55 | |18-55|=37 | [50, 38, 39, 18, 55] | 71 |
55 | 58,90,160,150,184 | 58 | |55-58|=3 | [50, 38, 39, 18, 55, 58] | 74 |
58 | 90,160,150,184 | 90 | |58-90|=32 | [50, 38, 39, 18, 55, 58, 90] | 106 |
90 | 160,150,184 | 150 | |90-150|=60 | [50, 38, 39, 18, 55, 58, 90, 150] | 166 |
150 | 160,184 | 160 | |150-160|=10 | [50, 38, 39, 18, 55, 58, 90, 150, 160] | 176 |
160 | 184 | 184 | |160-184|=24 | [50, 38, 39, 18, 55, 58, 90, 150, 160, 184] | 200 |
(3) 最终结果
- 移动顺序:
[50, 38, 39, 18, 55, 58, 90, 150, 160, 184]
- 总移动距离:200(单位:磁道数,通常与时间成正比)
3. 对比其他算法(简要)
算法 | 总移动距离 | 特点 |
---|---|---|
FCFS | 498 | 按请求顺序服务,简单但效率低。 |
SSTF | 200 | 高效,但可能饥饿。 |
SCAN | 230 | 磁头往复移动,公平但平均响应时间较长。 |
C-SCAN | 322 | 单向移动(如电梯),避免饥饿,适合高负载系统。 |
4. 关键结论
- SSTF的优化效果:本例中,SSTF(200)比FCFS(498)减少 59.8% 的磁头移动。
- 适用场景:适合I/O负载不高的系统,但对实时性要求高的任务需谨慎(可能饥饿)。
通过SSTF算法,可以显著降低磁盘寻道时间,提升系统性能!
原码、反码、补码、移码详解及运算
1. 基本概念
在计算机中,数值的存储和运算通常使用 补码,但理解原码、反码和移码是基础。以下以 8位二进制 为例说明。
2. 原码(Sign-Magnitude)
- 定义:最高位表示符号(
0
为正,1
为负),其余位表示数值绝对值。 - 范围:
- 正数:
00000000
(+0)到01111111
(+127) - 负数:
10000000
(-0)到11111111
(-127)
- 正数:
- 问题:存在 +0 和 -0,且加减运算复杂。
示例:
+5
:00000101
-5
:10000101
3. 反码(Ones’ Complement)
- 定义:
- 正数:与原码相同。
- 负数:符号位不变,数值位按位取反。
- 范围:
- 正数:
00000000
(+0)到01111111
(+127) - 负数:
11111111
(-0)到10000000
(-127)
- 正数:
- 问题:仍存在 ±0,但加减运算稍简化。
示例:
+5
:00000101
-5
:11111010
4. 补码(Two’s Complement)
- 定义:
- 正数:与原码相同。
- 负数:反码 + 1(符号位不变)。
- 范围:
10000000
(-128)到01111111
(+127) - 优点:
- 唯一表示 0(
00000000
)。 - 加减运算可直接用硬件实现,无需处理符号位。
- 唯一表示 0(
示例:
+5
:00000101
-5
:- 原码:
10000101
- 反码:
11111010
- 补码:
11111011
(反码 + 1)
- 原码:
补码运算(加法):
5 + (-3)
:5
:00000101
-3
:11111101
(补码)- 相加:
00000101 + 11111101 = 00000010
(结果为2
,正确)
5. 移码(Excess-N)
- 定义:用于浮点数的阶码,补码符号位取反(即补码 + 128)。
- 范围:
00000000
(-128)到11111111
(+127) - 作用:方便浮点数比较大小。
示例:
+5
的补码:00000101
→ 移码:10000101
(补码 +10000000
)-5
的补码:11111011
→ 移码:01111011
6. 四种编码对比
十进制 | 原码 | 反码 | 补码 | 移码 |
---|---|---|---|---|
+5 | 00000101 | 00000101 | 00000101 | 10000101 |
-5 | 10000101 | 11111010 | 11111011 | 01111011 |
+0 | 00000000 | 00000000 | 00000000 | 10000000 |
-0 | 10000000 | 11111111 | 00000000 | 10000000 |
-128 | 无法表示 | 无法表示 | 10000000 | 00000000 |
7. 关键总结
- 原码:直观但运算复杂,存在 ±0。
- 反码:改进原码的运算,但仍存在 ±0。
- 补码:统一 ±0,直接支持加减运算,是计算机存储整数的标准方式。
- 移码:用于浮点数阶码,便于比较大小。
补码的重要性:
- 计算机中所有整数运算均基于补码。
- 溢出处理:结果超出范围时,高位丢弃(如 8 位补码中
127 + 1 = -128
)。
通过理解这些编码,可以深入掌握计算机如何存储和运算数值!
数据传输方式详解:程序查询、中断与DMA
在计算机系统中,CPU与外部设备(如磁盘、键盘、网络等)之间的数据传输是核心功能之一。根据效率、复杂度和硬件成本的不同,主要采用三种方式:程序查询方式、中断方式和DMA方式。下面详细分析它们的特点、优缺点及适用场景。
1. 程序查询方式(Polling)
(1) 基本概念
CPU 主动轮询(Poll)I/O设备的状态寄存器,检查设备是否准备好传输数据。
分为两种子模式:
- 无条件传送:假设设备始终就绪,直接读写(如LED控制)。
- 程序查询:CPU循环检查设备状态,直到就绪才传输。
(2) 工作流程
- CPU读取设备状态寄存器。
- 若设备未就绪(Busy),返回步骤1。
- 若设备就绪(Ready),传输数据。
(3) 优缺点
优点 | 缺点 |
---|---|
硬件简单,成本低 | CPU利用率极低(忙于轮询,无法执行其他任务) |
适合低速设备(如键盘、传感器) | 实时性差,响应延迟高 |
(4) 适用场景
- 简单嵌入式系统。
- 对实时性要求不高的设备(如温度传感器)。
2. 中断方式(Interrupt-Driven I/O)
(1) 基本概念
设备通过中断信号主动通知CPU数据已就绪,CPU暂停当前任务,转去处理I/O请求,完成后恢复原任务。
(2) 工作流程
- CPU启动I/O设备,继续执行其他任务。
- 设备就绪后,向CPU发送中断请求(IRQ)。
- CPU保存当前上下文(寄存器状态),执行**中断服务程序(ISR)**完成数据传输。
- 恢复原任务继续执行。
(3) 优缺点
优点 | 缺点 |
---|---|
CPU无需轮询,利用率高 | 每次中断需保存/恢复上下文,开销较大 |
实时性好,响应速度快 | 高频中断可能导致CPU过载(如高速网卡) |
(4) 适用场景
- 中低速设备(鼠标、打印机)。
- 需要快速响应的场景(如键盘输入)。
3. DMA方式(Direct Memory Access)
(1) 基本概念
DMA控制器(DMAC)直接在设备和内存之间传输数据,无需CPU参与。CPU仅需初始化传输参数(如内存地址、数据量),完成后通过中断通知CPU。
(2) 工作流程
- CPU配置DMA控制器(源地址、目标地址、数据长度)。
- DMA控制器接管总线,直接与设备交互,完成批量数据传输。
- 传输结束后,DMA向CPU发送中断通知。
(3) 优缺点
优点 | 缺点 |
---|---|
彻底解放CPU,效率最高 | 硬件复杂,成本高(需独立DMA控制器) |
适合高速大批量数据传输(如磁盘、视频采集) | 可能引发总线竞争(需总线仲裁机制) |
(4) 适用场景
- 高速设备(SSD、显卡、网络接口卡)。
- 需要高吞吐量的场景(如视频流处理)。
4. 三种方式对比
特性 | 程序查询 | 中断方式 | DMA方式 |
---|---|---|---|
CPU参与度 | 全程参与(轮询) | 中断处理阶段参与 | 仅初始化和结束参与 |
硬件复杂度 | 最低 | 中等 | 最高(需DMA控制器) |
效率 | 最低 | 中等 | 最高 |
实时性 | 差 | 好 | 极好 |
适用设备 | 低速设备(传感器) | 中速设备(打印机) | 高速设备(磁盘、网卡) |
5. 关键结论
- 程序查询:简单但低效,适合低成本嵌入式系统。
- 中断方式:平衡效率与实时性,适合大多数通用设备。
- DMA:高性能场景的终极方案,但需硬件支持。
现代计算机的典型架构:
- 低速设备(如键盘)→ 中断驱动
- 高速设备(如NVMe SSD)→ DMA + 中断通知
- 超低功耗场景(如传感器)→ 程序查询
可靠性(Reliability)、可用性(Availability)、可维护性(Maintainability)详解
在计算机系统、网络工程和硬件设计中,可靠性(R)、可用性(A)、可维护性(M) 是衡量系统稳定性和服务质量的核心指标。它们通常基于以下关键时间参数计算:
- MTTF(Mean Time To Failure):平均无故障时间(系统正常运行的平均时间)。
- MTBF(Mean Time Between Failures):平均故障间隔时间(包含修复时间)。
- MTTR(Mean Time To Repair):平均修复时间(系统从故障到恢复的时间)。
1. 可靠性(Reliability)
定义
系统在规定时间内无故障运行的概率,反映系统的持久性。
公式
{可靠性} = MTTF / (1 + MTTF)
- MTTF 越大,可靠性越高(趋近于1)。
- 若 MTTF → ∞,可靠性 → 1(永不故障)。
示例
-
某服务器 MTTF = 1000 小时:
{可靠性} = 1000 / (1 + 1000) => (99.9%)
2. 可用性(Availability)
定义
系统在任意时刻可用的概率,综合考虑了故障和修复时间。
公式
{可用性} = MTBF / (MTBF + MTTR)
- MTBF = MTTF + MTTR(即两次故障之间的总时间)。
- 提高可用性的方法:
- 增加 MTTF(更可靠的硬件)。
- 减少 MTTR(快速修复或冗余设计)。
示例
-
某云服务 MTTF = 720 小时,MTTR = 1 小时:
{可用性} = \frac{720}{720 + 1} \approx 0.9986 \quad (99.86%)
-
“5个9” 高可用性(99.999%)要求:
MTTR <= MTTF / 99999 (如 MTTF=10^5小时,则 MTTR <= 1小时)
]
3. 可维护性(Maintainability)
定义
系统故障后快速恢复的能力,反映维修效率。
公式
{可维护性} = 1 / (1 + MTTR)
- MTTR 越小,可维护性越高(趋近于1)。
- 若 MTTR → 0,可维护性 → 1(瞬间修复)。
示例
-
某设备 MTTR = 2 小时:
{可维护性} = 1 / (1 + 2) => (33.3%)
-
通过自动化运维将 MTTR 降至 0.1 小时:
{可维护性} = 1 / (1 + 0.1) => (90.9%)
4. 三者的关系
指标 | 依赖参数 | 优化方向 | 典型应用场景 |
---|---|---|---|
可靠性 ® | MTTF | 使用高可靠性硬件、容错设计 | 航天系统、金融交易系统 |
可用性 (A) | MTTF + MTTR | 冗余架构、快速故障转移 | 云计算平台、在线服务 |
可维护性 (M) | MTTR | 自动化监控、模块化设计 | 工业设备、数据中心 |
协同优化
- 高可用性 需要同时提升 可靠性(减少故障)和 可维护性(快速修复)。
- 冗余设计(如RAID、集群)可提高 MTTF 并降低 MTTR。
5. 关键结论
- 可靠性 关注“少出故障”,可用性 关注“随时能用”,可维护性 关注“快速修复”。
- MTTF 和 MTTR 是核心参数:
- 增加 MTTF → 提升可靠性和可用性。
- 减少 MTTR → 提升可用性和可维护性。
- “5个9”高可用性(99.999%) 要求年均故障时间 ≤ 5.26 分钟,需结合冗余和自动化运维实现。