当前位置: 首页 > ds >正文

软件设计师-软考知识复习(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
BA2
CA5
DB, C4

步骤2:绘制PERT图

        A(3)/     \B(2)   C(5)\     /D(4)

步骤3:计算时间参数(正向计算ES/EF)

  • 规则
    • 起始活动的 ES = 0。
    • 后续活动的 ES = 所有前置活动的 EF 的最大值。
    • EF = ES + 持续时间。

示例计算

活动ESEF
A03
B35
C38
Dmax(5,8)=812

步骤4:反向计算(LS/LF)

  • 规则
    • 最后一个活动的 LF = EF(项目总工期)。
    • 前置活动的 LF = 后续活动 LS 的最小值。
    • LS = LF - 持续时间。

示例计算

活动LFLS
D128
B86
C83
Amin(6,3)=30

步骤5:计算松弛时间

[
\text{Slack} = LS - ES \quad \text{或} \quad LF - EF
]

示例计算

活动Slack关键路径?
A0
B3
C0
D0

关键路径:A → C → D(总工期12天)。


3. PERT图的应用

(1) 关键路径分析

  • 关键路径上的活动不能延迟,否则整个项目延期。
  • 非关键路径活动(如B)可以延迟不超过Slack时间

(2) 时间优化

  • 缩短关键路径:通过并行任务、增加资源或优化方法。
  • 资源平衡:将资源从非关键活动调整到关键活动。

(3) 风险管理

  • 对关键路径上的任务重点监控,避免延误。

4. PERT vs. 甘特图

特性PERT图甘特图
用途分析任务依赖关系和关键路径可视化任务时间安排
优点适合复杂项目,优化时间直观显示任务进度
缺点绘制复杂难以显示任务依赖关系

5. 示例完整分析

项目:软件开发

活动描述前置活动时间(天)
A需求分析-5
B设计A7
C前端开发B10
D后端开发B12
E测试C, D5

PERT图

        A(5)|B(7)/   \C(10)  D(12)\   /E(5)

时间计算

活动ESEFLSLFSlack关键路径?
A05050
B5125120
C122214242
D122412240
E242924290

关键路径: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) 逐步选择最近的磁道
当前磁头位置剩余请求最近磁道移动距离移动顺序更新总移动距离
5055,58,39,18,90,160,150,38,18438|50-38|=12[50, 38]12
3855,58,39,18,90,160,150,18439|38-39|=1[50, 38, 39]13
3955,58,18,90,160,150,18418|39-18|=21[50, 38, 39, 18]34
1855,58,90,160,150,18455|18-55|=37[50, 38, 39, 18, 55]71
5558,90,160,150,18458|55-58|=3[50, 38, 39, 18, 55, 58]74
5890,160,150,18490|58-90|=32[50, 38, 39, 18, 55, 58, 90]106
90160,150,184150|90-150|=60[50, 38, 39, 18, 55, 58, 90, 150]166
150160,184160|150-160|=10[50, 38, 39, 18, 55, 58, 90, 150, 160]176
160184184|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. 对比其他算法(简要)

算法总移动距离特点
FCFS498按请求顺序服务,简单但效率低。
SSTF200高效,但可能饥饿。
SCAN230磁头往复移动,公平但平均响应时间较长。
C-SCAN322单向移动(如电梯),避免饥饿,适合高负载系统。

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,且加减运算复杂。

示例

  • +500000101
  • -510000101

3. 反码(Ones’ Complement)

  • 定义
    • 正数:与原码相同。
    • 负数:符号位不变,数值位按位取反。
  • 范围
    • 正数:00000000(+0)到 01111111(+127)
    • 负数:11111111(-0)到 10000000(-127)
  • 问题:仍存在 ±0,但加减运算稍简化。

示例

  • +500000101
  • -511111010

4. 补码(Two’s Complement)

  • 定义
    • 正数:与原码相同。
    • 负数:反码 + 1(符号位不变)。
  • 范围10000000(-128)到 01111111(+127)
  • 优点
    • 唯一表示 000000000)。
    • 加减运算可直接用硬件实现,无需处理符号位。

示例

  • +500000101
  • -5
    1. 原码:10000101
    2. 反码:11111010
    3. 补码:11111011(反码 + 1)

补码运算(加法)

  • 5 + (-3)
    • 500000101
    • -311111101(补码)
    • 相加:00000101 + 11111101 = 00000010(结果为 2,正确)

5. 移码(Excess-N)

  • 定义:用于浮点数的阶码,补码符号位取反(即补码 + 128)。
  • 范围00000000(-128)到 11111111(+127)
  • 作用:方便浮点数比较大小。

示例

  • +5 的补码:00000101 → 移码:10000101(补码 + 10000000
  • -5 的补码:11111011 → 移码:01111011

6. 四种编码对比

十进制原码反码补码移码
+500000101000001010000010110000101
-510000101111110101111101101111011
+000000000000000000000000010000000
-010000000111111110000000010000000
-128无法表示无法表示1000000000000000

7. 关键总结

  1. 原码:直观但运算复杂,存在 ±0。
  2. 反码:改进原码的运算,但仍存在 ±0。
  3. 补码:统一 ±0,直接支持加减运算,是计算机存储整数的标准方式。
  4. 移码:用于浮点数阶码,便于比较大小。

补码的重要性

  • 计算机中所有整数运算均基于补码。
  • 溢出处理:结果超出范围时,高位丢弃(如 8 位补码中 127 + 1 = -128)。

通过理解这些编码,可以深入掌握计算机如何存储和运算数值!


数据传输方式详解:程序查询、中断与DMA

在计算机系统中,CPU与外部设备(如磁盘、键盘、网络等)之间的数据传输是核心功能之一。根据效率、复杂度和硬件成本的不同,主要采用三种方式:程序查询方式中断方式DMA方式。下面详细分析它们的特点、优缺点及适用场景。

1. 程序查询方式(Polling)

(1) 基本概念

CPU 主动轮询(Poll)I/O设备的状态寄存器,检查设备是否准备好传输数据。
分为两种子模式:

  • 无条件传送:假设设备始终就绪,直接读写(如LED控制)。
  • 程序查询:CPU循环检查设备状态,直到就绪才传输。

(2) 工作流程

  1. CPU读取设备状态寄存器。
  2. 若设备未就绪(Busy),返回步骤1。
  3. 若设备就绪(Ready),传输数据。

(3) 优缺点

优点缺点
硬件简单,成本低CPU利用率极低(忙于轮询,无法执行其他任务)
适合低速设备(如键盘、传感器)实时性差,响应延迟高

(4) 适用场景

  • 简单嵌入式系统。
  • 对实时性要求不高的设备(如温度传感器)。

2. 中断方式(Interrupt-Driven I/O)

(1) 基本概念

设备通过中断信号主动通知CPU数据已就绪,CPU暂停当前任务,转去处理I/O请求,完成后恢复原任务。

(2) 工作流程

  1. CPU启动I/O设备,继续执行其他任务。
  2. 设备就绪后,向CPU发送中断请求(IRQ)。
  3. CPU保存当前上下文(寄存器状态),执行**中断服务程序(ISR)**完成数据传输。
  4. 恢复原任务继续执行。

(3) 优缺点

优点缺点
CPU无需轮询,利用率高每次中断需保存/恢复上下文,开销较大
实时性好,响应速度快高频中断可能导致CPU过载(如高速网卡)

(4) 适用场景

  • 中低速设备(鼠标、打印机)。
  • 需要快速响应的场景(如键盘输入)。

3. DMA方式(Direct Memory Access)

(1) 基本概念

DMA控制器(DMAC)直接在设备和内存之间传输数据,无需CPU参与。CPU仅需初始化传输参数(如内存地址、数据量),完成后通过中断通知CPU。

(2) 工作流程

  1. CPU配置DMA控制器(源地址、目标地址、数据长度)。
  2. DMA控制器接管总线,直接与设备交互,完成批量数据传输。
  3. 传输结束后,DMA向CPU发送中断通知。

(3) 优缺点

优点缺点
彻底解放CPU,效率最高硬件复杂,成本高(需独立DMA控制器)
适合高速大批量数据传输(如磁盘、视频采集)可能引发总线竞争(需总线仲裁机制)

(4) 适用场景

  • 高速设备(SSD、显卡、网络接口卡)。
  • 需要高吞吐量的场景(如视频流处理)。

4. 三种方式对比

特性程序查询中断方式DMA方式
CPU参与度全程参与(轮询)中断处理阶段参与仅初始化和结束参与
硬件复杂度最低中等最高(需DMA控制器)
效率最低中等最高
实时性极好
适用设备低速设备(传感器)中速设备(打印机)高速设备(磁盘、网卡)

5. 关键结论

  1. 程序查询:简单但低效,适合低成本嵌入式系统。
  2. 中断方式:平衡效率与实时性,适合大多数通用设备。
  3. 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. 关键结论

  1. 可靠性 关注“少出故障”,可用性 关注“随时能用”,可维护性 关注“快速修复”。
  2. MTTF 和 MTTR 是核心参数
    • 增加 MTTF → 提升可靠性和可用性。
    • 减少 MTTR → 提升可用性和可维护性。
  3. “5个9”高可用性(99.999%) 要求年均故障时间 ≤ 5.26 分钟,需结合冗余和自动化运维实现。
http://www.xdnf.cn/news/3150.html

相关文章:

  • 边缘计算服务器
  • C++类和对象(2)关于类的默认成员函数
  • python初学
  • 【论文_序列转换模型架构_20230802v7】Attention Is All You Need 【Transformer】
  • Android第五次面试总结之网络篇(修)
  • 经典算法 最长单调递增子序列
  • Stable Diffusion基础配置
  • 使用 v-print 实现 Vue 项目中的打印功能
  • rust 全栈应用框架dioxus
  • 深入解析常见排序算法及其 C# 实现
  • 系统思考培训助力总经理
  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年4月29日第67弹
  • RISE with SAP 的合同及许可解析
  • 【电子对抗训练革命】新一代便携式雷达模拟器技术解密
  • Spring事务开发经验 回滚和不回滚?
  • ADS1299模拟前端(AFE)代替芯片——LHE7909
  • C事件驱动网络库​​libevent的http详解
  • Java实现使用EasyExcel按模板导出文件
  • 【Unity】使用LitJson保存和读取数据的例子
  • SQL注入
  • Leetcode 3533. Concatenated Divisibility
  • 【C到Java的深度跃迁:从指针到对象,从过程到生态】第四模块·Java特性专精 —— 第十七章 IO流:超越FILE*的维度战争
  • SpringBoot之SpringAl实现AI应用-快速搭建
  • LeetCode -160.相交链表
  • “假读“操作在I2C接收流程中的原因
  • DECAP CELL
  • Qt入门——什么是Qt?
  • 【Linux】第十三章 访问Linux文件系统
  • React:封装一个编辑文章的组件
  • python如何流模式输出