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

计算机组成原理—— 外围设备(十三)

记住,伟大的成就往往诞生于无数次尝试和失败之后。每一次跌倒,都是为了让你学会如何更加坚定地站立;每一次迷茫,都是为了让你找到内心真正的方向。即使前路漫漫,即使困难重重,心中的火焰也不应熄灭。它代表着你的热情、你的勇气以及对未来的无限希望。

无论世界如何变化,请保持那份最初的纯真与好奇。让每一个小小的进步成为通向伟大目标的阶梯,用每一次的努力编织成通往梦想的道路。在这个过程中,你会发现最强大的力量来源于自己内心的坚持与不懈追求。

因此,勇敢地迎接每一个挑战,积极面对生活中的每一次起伏。相信自己,你可以超越任何界限,实现心中所愿。因为你不仅仅是在为自己的梦想奋斗,更是在用自己的行动诠释着生命的意义。未来充满了无限可能,而你正是那个能够开启这些可能性的人。

所以,请继续怀揣着希望前行,用你的行动证明给世界看,你是独一无二的存在,拥有改变世界的力量。在你追求梦想的路上,每一步都将绽放出属于你的光芒,照亮你前进的方向,也激励着周围的人去追寻他们自己的星辰大海。未来正等待着你去书写,而你就是那支描绘辉煌篇章的笔。

计算机组成原理资源网

https://www.wenjingketang.com/这里面有ppt课后习题及答案,需要的可以自行下载

目录

8.1 外围设备概述

8.1.1 什么是外围设备

8.1.2 外围设备的分类和功能

8.2 磁盘存储设备详解

8.2.1 磁记录原理与记录方式

1. 磁记录物理原理

2. 常见磁记录方式

3. 编码示例(RLL(2,7))

8.2.2 磁盘的基本组成和分类

1. 机械结构组成

2. 分类标准

8.2.3 硬磁盘驱动器和控制器

1. HDD硬件架构

2. 控制器核心功能

8.2.4 磁盘上信息的分布

1. 物理结构参数

2. 低级格式化示例

8.2.5 磁盘存储器的技术指标

1. 关键性能指标

2. 可靠性指标

8.2.6 磁盘阵列(RAID)

1. RAID级别对比

2. Linux下RAID5配置示例

扩展1:磁头飞行高度控制技术(空气轴承原理)

1. 空气轴承工作原理

2. 飞行高度控制技术

扩展2:叠瓦式(SMR) vs 垂直记录(PMR)对比

1. 结构对比示意图

2. 性能对比表

扩展3:振动补偿系统原理

1. 系统组成框图

2. 振动补偿算法伪代码

扩展4:ZBR(区域位记录)详细算法

1. ZBR分区原理

**2. 分区配置示例代码

扩展5:纠错码数学推导(以Reed-Solomon码为例)

1. 伽罗华域(GF)基础

2. RS编码过程

扩展6:RAID重构过程状态机分析

1. 状态转移图

2. 重构过程伪代码

扩展7:Facebook冷存储架构设计案例

1. 架构拓扑图

2. 关键设计参数

3. 纠删码存储示例


8.1 外围设备概述

8.1.1 什么是外围设备

外围设备(Peripheral Devices)是计算机系统中除中央处理器(CPU)和内存外,所有与主机进行数据交换的硬件设备。它们通过接口与主板连接,扩展计算机的功能边界。

核心特征

  • 非核心计算组件
  • 需通过标准接口(USB/PCIe/SATA等)连接
  • 具有独立电源需求(部分设备)

8.1.2 外围设备的分类和功能

按功能分类的完整体系:

类别功能描述典型设备示例
输入设备将外部信息转换为数字信号键盘、扫描仪、麦克风
输出设备将数字信号转换为人类可感知形式显示器、打印机、扬声器
存储设备持久化数据存储HDD、SSD、光盘驱动器
通信设备实现系统间数据交换网卡、调制解调器、蓝牙适配器
混合设备综合多种功能触摸屏(输入+输出)、多功能打印机

8.2 磁盘存储设备详解

8.2.1 磁记录原理与记录方式
1. 磁记录物理原理
  • 基本原理:利用磁性材料的剩磁特性存储二进制数据(0/1)
  • 关键组件
    • 磁头:实现电信号→磁场→磁化翻转
    • 磁介质:如钴基合金盘片,划分磁道和扇区
  • 写入过程:电流通过磁头线圈产生磁场,磁化盘片表面
  • 读取过程:磁头感应磁化方向变化,转化为电信号
2. 常见磁记录方式
记录方式编码规则优点缺点
归零制(RZ)正脉冲表1,负脉冲表0,脉冲后归零简单低密度,高误码
不归零制(NRZ)电平翻转表1,保持表0密度高时钟同步困难
调频制(FM)每位起始处跳变,中间跳变表1时钟同步方便效率低
改进调频制(MFM)仅当连续0时插入同步跳变密度提升25%复杂度增加
游程长度受限码(RLL)限制连续0的数量,提升密度高密度,高效编码复杂
3. 编码示例(RLL(2,7))
# RLL(2,7)编码表片段示例
encoding_table = {
    '00': '1010',
    '01': '1000',
    '10': '0010',
    '11': '0000'
}


8.2.2 磁盘的基本组成和分类
1. 机械结构组成
+-----------------------+
| 主轴电机 → 旋转盘片    |
| 磁头臂 → 音圈电机控制  |
| 空气过滤系统           |
| 接口电路板(PCB)        |
+-----------------------+

2. 分类标准
分类维度类型
介质类型硬盘(HDD)、软盘(Floppy)、磁带
可移动性固定盘、可换盘
接口类型SATA III (6Gbps), SAS (12Gbps), NVMe(SSD专用)
应用场景企业级(15K RPM)、桌面级(7.2K RPM)、监控专用

8.2.3 硬磁盘驱动器和控制器
1. HDD硬件架构
            +------------+
            | 主机接口   |
            | (SATA/SAS)|
            +-----+------+
                  |
            +-----v------+
            | 控制器     |
            | (ARM SoC) |
            +-----+------+
                  |
            +-----v------+     +-----------------+
            | 缓存芯片   <-----> 读写缓冲 (256MB) |
            +-----+------+     +-----------------+
                  |
            +-----v-------------------+
            | 前置放大器/读写通道     |
            +-----+-------------------+
                  |
            +-----v-------------------+
            | 磁头堆栈组件 (HSA)      |
            +-------------------------+

2. 控制器核心功能
  • 坏道管理:G-LIST(增长缺陷表)和P-LIST(原始缺陷表)
  • 命令队列:NCQ(Native Command Queuing)优化IO顺序
  • 纠错编码:Reed-Solomon码处理扇区错误

8.2.4 磁盘上信息的分布
1. 物理结构参数
          +------------------------+
          | 柱面 (Cylinder)        |
          |  → 磁道 (Track)        |
          |    → 扇区 (Sector)     |
          |       → 512/4K字节      |
          +------------------------+

2. 低级格式化示例
// 模拟磁盘低级格式化过程
struct DiskGeometry {
    int cylinders;
    int heads;
    int sectors_per_track;
};

void low_level_format(struct DiskGeometry dg) {
    for (int cyl = 0; cyl < dg.cylinders; cyl++) {
        for (int head = 0; head < dg.heads; head++) {
            for (int sec = 0; sec < dg.sectors_per_track; sec++) {
                write_sector(cyl, head, sec, BLANK_DATA);
            }
        }
    }
}


8.2.5 磁盘存储器的技术指标
1. 关键性能指标
指标计算公式典型值
平均寻道时间机械运动时间3-15ms
旋转延迟0.5*(60/RPM)2ms(15K RPM)
数据传输率(转速×字节/磁道)/60250MB/s(SATA III)
IOPS1000/(寻道+旋转+传输时间)150-200(随机读)
2. 可靠性指标
  • MTBF(平均无故障时间):1,000,000小时↑
  • 年故障率(AFR):0.5%-2%
  • UBER(不可恢复误码率):<10^-15

8.2.6 磁盘阵列(RAID)
1. RAID级别对比
级别冗余性最少盘数利用率典型应用场景
RAID02100%视频编辑临时存储
RAID1镜像250%系统盘
RAID5分布式校验3(n-1)/n数据库存储
RAID6双校验4(n-2)/n归档存储
RAID10镜像+条带450%金融交易系统
2. Linux下RAID5配置示例
# 使用mdadm创建RAID5
mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sd[abc]1 --spare-devices=1 /dev/sdd1

# 查看RAID状态
mdadm --detail /dev/md0

# 输出示例:
#          Version : 1.2
#    Creation Time : Wed Aug 21 10:17:14 2024
#       Raid Level : raid5
#       Array Size : 209584128 (199.88 GiB 214.60 GB)
#    Used Dev Size : 104792064 (99.94 GiB 107.30 GB)


:以上为精简核心内容,下面是扩展知识:

扩展1:磁头飞行高度控制技术(空气轴承原理)

1. 空气轴承工作原理

其中:

  • hh:磁头与盘面间隙(典型值1-3nm)
  • pp:气膜压力
  • μμ:空气粘度
  • UU:盘面线速度(~20m/s)
2. 飞行高度控制技术
  • 热膨胀调节
    # 磁头加热器控制算法示例
    def adjust_flying_height(current_height, target=2.5e-9):
        error = target - current_height
        heater_power = PID_controller(error)  # PID控制输出
        apply_thermal_expansion(heater_power)  # 通过加热改变磁头形状
        return new_height
    

  • 关键技术参数
    参数典型值
    飞行高度1-3 nm
    动态调节精度±0.1 nm
    响应时间<10 μs

扩展2:叠瓦式(SMR) vs 垂直记录(PMR)对比

1. 结构对比示意图
PMR结构:
+---+---+---+---+---+
|   |   |   |   |   | ← 独立磁道
+---+---+---+---+---+

SMR结构:
+-------------------+
|      磁道N        | ← 覆盖下层磁道N-1
+-------------------+

2. 性能对比表
特性SMRPMR
存储密度提高15-25%标准密度
随机写性能差(需缓存区重组)优秀
适用场景冷数据/顺序写入通用存储
典型容量20TB+18TB
写放大率2-5倍1倍
管理复杂度需要专用主机支持即插即用

扩展3:振动补偿系统原理

1. 系统组成框图
+---------------------+
| 加速度传感器        | → 检测振动信号
+----------+----------+
           |
+----------v----------+
| 自适应滤波算法      | → 消除机械共振频率
+----------+----------+
           |
+----------v----------+
| 音圈电机(VCM)       | → 动态调整磁头位置
+---------------------+

2. 振动补偿算法伪代码
class VibrationCompensator:
    def __init__(self):
        self.buffer = CircularBuffer(size=100)  # 存储振动历史数据
        self.filter = KalmanFilter()           # 卡尔曼滤波器
    
    def update(self, acceleration):
        # 1. 数据预处理
        filtered = self.filter.apply(acceleration)
        
        # 2. 补偿量计算
        compensation = 0
        for i in range(self.buffer.size):
            weight = 0.5**(i+1)  # 指数衰减权重
            compensation += self.buffer[i] * weight
        
        # 3. 驱动VCM执行补偿
        adjust_head_position(compensation)
        
        # 更新缓冲区
        self.buffer.push(filtered)


扩展4:ZBR(区域位记录)详细算法

1. ZBR分区原理

数据密度公式:D(r)=B/2πr⋅s(其中:r=半径,s=扇区数,B=每扇区字节数)数据密度公式:D(r)=2πr⋅sB​(其中:r=半径,s=扇区数,B=每扇区字节数)

**2. 分区配置示例代码
// 典型ZBR分区表
struct ZBR_Zone {
    int start_sector;
    int end_sector;
    int sectors_per_track; // 外圈扇区数多于内圈
    int bit_density;       // bits/inch
};

struct ZBR_Zone zones[] = {
    {0, 10000, 250, 2_800_000},   // 外圈区域
    {10001, 20000, 200, 2_200_000},
    {20001, 30000, 180, 1_900_000}, // 内圈区域
};


扩展5:纠错码数学推导(以Reed-Solomon码为例)

1. 伽罗华域(GF)基础

2. RS编码过程


扩展6:RAID重构过程状态机分析

1. 状态转移图
[正常] --检测到磁盘故障--> [降级]
[降级] --插入新磁盘--> [重构中]
[重构中] --完成校验--> [正常]
          --超时/错误--> [失败]

2. 重构过程伪代码
def raid_rebuild(raid_array, new_disk):
    state = "PREPARING"
    try:
        state = "READ_PARITY"
        parity_data = calculate_parity(raid_array.healthy_disks)
        
        state = "WRITE_DATA"
        for stripe in raid_array.stripes:
            rebuild_data = xor_operation(parity_data, stripe.healthy_blocks)
            new_disk.write(stripe.position, rebuild_data)
        
        state = "VERIFY"
        if verify_integrity(new_disk):
            state = "NORMAL"
            return True
        else:
            state = "FAILED"
            return False
    except Exception as e:
        log_error(f"重构失败于状态 {state}: {str(e)}")
        state = "FAILED"
        return False


扩展7:Facebook冷存储架构设计案例

1. 架构拓扑图
+----------------+      +----------------+
| Web服务器       |      | 热存储集群      |
| (处理元数据)    |<---->| (SSD, RAID10)  |
+----------------+      +----------------+
        ↓
+----------------+      +----------------+
| 编码代理        |----->| 冷存储集群      |
| (Erasure Coding)|      | (SMR HDD, RS(10,16))
+----------------+      +----------------+

2. 关键设计参数
参数规格
编码方案Reed-Solomon(10,16)
存储密度80PB/机架
功耗比0.7W/TB
数据完整性99.9999999999% (12个9)
访问延迟分钟级
3. 纠删码存储示例
# RS(10,16)编码示例
from reedsolo import RSCodec

codec = RSCodec(6)  # 可纠正6个错误
data = b"Facebook_Cold_Data_123"
encoded = codec.encode(data)

# 模拟存储节点分布
storage_nodes = {
    'node01': encoded[0:5],
    'node02': encoded[5:10],
    'node03': encoded[10:15],
    'node04': encoded[15:20],
    'node05': encoded[20:25],
    'node06': encoded[25:30]  # 最后6个为校验块
}


相关文章:

  • 配置Open-R1,评测第三方蒸馏模型的性能2
  • 2025百度快排技术分析:模拟点击与发包算法的背后原理
  • 一个简单的ubuntu/开发板初始化脚本
  • Redis 09章——哨兵(sentinel)
  • HTML元素
  • MATLAB中lookBehindBoundary函数用法
  • 滑动窗口——优先队列写法
  • 分享一个解梦 Chrome 扩展 —— 周公 AI 解梦
  • sql盲注脚本
  • 【数据结构入门 65 题】目录
  • 字符串(典型算法思想)—— OJ例题算法解析思路
  • Anaconda3 介绍和安装
  • 静默安装OGG for MySQL微服务版本,高效开展数据同步和迁移
  • FreeRTOS第5篇:事件的“广播站”——事件组与事件标志
  • 2025寒假天梯赛训练5
  • 如何通过 prometheus-operator 实现服务发现
  • Serverless(无服务器架构)和 FaaS(函数即服务)是什么?全方位解析
  • 搭建一个经典的LeNet5神经网络
  • Ubuntu安装docker:docker-desktop : 依赖: docker-ce-cli 但无法安装它、无法定位软件包 docker-ce-cli
  • (arxiv2411) CARE Transformer
  • 多地再发网约车从业及投资风险提示:避免盲目花费大笔资金“购车”入行
  • 欧洲理事会前主席米歇尔受聘中欧国际工商学院特聘教授,上海市市长龚正会见
  • 竞彩湃|霍芬海姆看到保级曙光,AC米兰专注于意大利杯
  • 视频丨雄姿英发!中国仪仗队步入莫斯科红场
  • 中国海警依法驱离日非法进入我钓鱼岛领海船只
  • 胖东来发布和田玉、翡翠退货说明:不扣手续费等任何费用