计算机组成原理—— 外围设备(十三)
记住,伟大的成就往往诞生于无数次尝试和失败之后。每一次跌倒,都是为了让你学会如何更加坚定地站立;每一次迷茫,都是为了让你找到内心真正的方向。即使前路漫漫,即使困难重重,心中的火焰也不应熄灭。它代表着你的热情、你的勇气以及对未来的无限希望。
无论世界如何变化,请保持那份最初的纯真与好奇。让每一个小小的进步成为通向伟大目标的阶梯,用每一次的努力编织成通往梦想的道路。在这个过程中,你会发现最强大的力量来源于自己内心的坚持与不懈追求。
因此,勇敢地迎接每一个挑战,积极面对生活中的每一次起伏。相信自己,你可以超越任何界限,实现心中所愿。因为你不仅仅是在为自己的梦想奋斗,更是在用自己的行动诠释着生命的意义。未来充满了无限可能,而你正是那个能够开启这些可能性的人。
所以,请继续怀揣着希望前行,用你的行动证明给世界看,你是独一无二的存在,拥有改变世界的力量。在你追求梦想的路上,每一步都将绽放出属于你的光芒,照亮你前进的方向,也激励着周围的人去追寻他们自己的星辰大海。未来正等待着你去书写,而你就是那支描绘辉煌篇章的笔。
计算机组成原理资源网
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) |
| 数据传输率 | (转速×字节/磁道)/60 | 250MB/s(SATA III) |
| IOPS | 1000/(寻道+旋转+传输时间) | 150-200(随机读) |
2. 可靠性指标
- MTBF(平均无故障时间):1,000,000小时↑
- 年故障率(AFR):0.5%-2%
- UBER(不可恢复误码率):<10^-15
8.2.6 磁盘阵列(RAID)
1. RAID级别对比
| 级别 | 冗余性 | 最少盘数 | 利用率 | 典型应用场景 |
|---|---|---|---|---|
| RAID0 | 无 | 2 | 100% | 视频编辑临时存储 |
| RAID1 | 镜像 | 2 | 50% | 系统盘 |
| RAID5 | 分布式校验 | 3 | (n-1)/n | 数据库存储 |
| RAID6 | 双校验 | 4 | (n-2)/n | 归档存储 |
| RAID10 | 镜像+条带 | 4 | 50% | 金融交易系统 |
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_heightheater_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. 性能对比表
| 特性 | SMR | PMR |
|---|---|---|
| 存储密度 | 提高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 = 0for 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 Trueelse:state = "FAILED"return Falseexcept 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 RSCodeccodec = 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个为校验块 }
相关文章:
计算机组成原理—— 外围设备(十三)
记住,伟大的成就往往诞生于无数次尝试和失败之后。每一次跌倒,都是为了让你学会如何更加坚定地站立;每一次迷茫,都是为了让你找到内心真正的方向。即使前路漫漫,即使困难重重,心中的火焰也不应熄灭。它代表…...
面试题之Vuex,sessionStorage,localStorage的区别
Vuex、localStorage 和 sessionStorage 都是用于存储数据的技术,但它们在存储范围、存储方式、应用场景等方面存在显著区别。以下是它们的详细对比: 1. 存储范围 Vuex: 是 Vue.js 的状态管理库,用于存储全局状态。 数据存储在内…...
window中git bash使用conda命令
window系统的终端cmd和linux不一样,运行不了.sh文件,为了在window中模仿linux,可以使用gui bash模拟linux的终端。为了在gui bash中使用python环境,由于python环境是在anaconda中创建的,所以需要在gui bash使用conda命…...
象棋掉落动画(局部旋转动画技巧)
1.被撞击阶段:根据被撞击速度,合理设置被撞距离 2.倒地阶段:象棋倒地的同时稍微前移 3.滚地阶段:象棋滚地后停止,在最后5帧内稍微回转一下。这里启用“PRS参数”的旋转来制作局部旋转动画...
Pycharm 2024在解释器提供的python控制台中运行py文件
2024版的界面发生了变化, run with python console搬到了这里:...
课题推荐:高空长航无人机多源信息高精度融合导航技术研究
高空长航无人机多源信息高精度融合导航技术的研究,具有重要的理论意义与应用价值。通过深入研究多源信息融合技术,可以有效提升无人机在高空复杂环境下的导航能力,为无人机的广泛应用提供强有力的技术支持。希望该课题能够得到重视和支持&…...
《DeepSeek训练算法:开启高效学习的新大门》
在人工智能的浪潮中,大语言模型的发展日新月异。DeepSeek作为其中的佼佼者,凭借其独特的训练算法和高效的学习能力,吸引了众多目光。今天,就让我们深入探究DeepSeek训练算法的独特之处,以及它是如何保证模型实现高效学…...
promise用法总结以及手写promise
JavaScript中的 Promise 是用于处理异步操作的对象,它代表了一个异步操作的最终完成(或失败)及其结果值。Promise 是异步编程的一种更简洁和更可读的方式,避免了回调地狱的问题。 Promise 的基本概念 一个 Promise 是一个表示异步…...
春招项目=图床+ k8s 控制台(唬人专用)
1. 春招伊始 马上要春招了,一个大气的项目(冲击波项目)直观重要,虽然大家都说基础很重要,但是一个足够新颖的项目完全可以把你的简历添加一个足够闪亮的点。 这就不得不推荐下我的 k8s 图床了,去年折腾快…...
Android 11.0 系统settings添加ab分区ota升级功能实现二
1.概述 在11.0的系统rom定制化开发中,在进行系统ota升级的功能中,在10.0以前都是使用系统 RecoverySystem的接口实现升级的,现在可以实现AB分区模式来进行ota升级的,但是 必须需要系统支持ab分区升级的模式才可以的,接下来分析下看怎么样进行ota升级功能实现 2.系统sett…...
【Spring+MyBatis】_图书管理系统(上篇)
目录 1. MyBatis与MySQL配置 1.1 创建数据库及数据表 1.2 配置MyBatis与数据库 1.2.1 增加MyBatis与MySQL相关依赖 1.2.2 配置application.yml文件 1.3 增加数据表对应实体类 2. 功能1:用户登录 2.1 约定前后端交互接口 2.2 后端接口 2.3 前端页面 2.4 单…...
什么是3D视觉无序抓取?
3D视觉无序抓取是一种结合三维视觉技术、机器人控制与智能算法的工业自动化解决方案,旨在实现机器人对散乱、无序堆放的物体进行自主识别、定位和抓取的操作。其核心是通过3D视觉系统获取物体的三维空间信息,结合路径规划与避障算法,引导机械臂完成高精度抓取任务,无需依赖…...
【Java】理解字符串拼接与数值运算的优先级
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: Java 文章目录 💯前言💯代码分析1. 第一句输出2. 第二句输出3. 第三句输出 💯关键概念与深入分析1. 字符串拼接的优先级2. 运算符的优先级与结合性3. 字符串拼接与数值运算的结合 &…...
[250217] x-cmd 发布 v0.5.3:新增 DeepSeek AI 模型支持及飞书/钉钉群机器人 Webhook 管理
目录 X-CMD 发布 v0.5.3📃Changelog🧩 deepseek🧩 feishu|dingtalk📦 x-cmd✅ 升级指南 X-CMD 发布 v0.5.3 📃Changelog 🧩 deepseek 新增 deepseek 模块,用户可通过 deepseek 直接请求使用 …...
渗透利器:Burp Suite 联动 XRAY 图形化工具.(主动扫描+被动扫描)
Burp Suite 联动 XRAY 图形化工具.(主动扫描被动扫描) Burp Suite 和 Xray 联合使用,能够将 Burp 的强大流量拦截与修改功能,与 Xray 的高效漏洞检测能力相结合,实现更全面、高效的网络安全测试,同时提升漏…...
Linux、Docker与Redis核心知识点与常用命令速查手册
Linux、Docker与Redis核心知识点与常用命令速查手册 一、Linux基础核心 1. 核心概念 文件系统:采用树形结构,根目录为/权限机制:rwx(读/写/执行)权限,用户分为owner/group/others软件包管理: …...
DeepSeek HuggingFace 70B Llama 版本 (DeepSeek-R1-Distill-Llama-70B)
简简单单 Online zuozuo :本心、输入输出、结果 文章目录 DeepSeek HuggingFace 70B Llama 版本 (DeepSeek-R1-Distill-Llama-70B)前言vllm 方式在本地部署 DeepSeek-R1-Distill 模型SGLang 方式在本地部署 DeepSeek-R1-Distill 模型DeepSeek-R1 相关的 Models,以及 Huggin…...
Playwright入门之---命令
运行和调试测试 使用 Playwright,您可以运行单个测试、一组测试或所有测试。可以使用--project标志在一个或多个浏览器上运行测试。默认情况下,测试并行运行,并以无头方式运行,这意味着在运行测试时不会打开任何浏览器窗口&#…...
Java基于 SpringBoot+Vue的微信小程序跑腿平台V2.0(附源码,文档)
博主介绍:✌Java徐师兄、7年大厂程序员经历。全网粉丝13w、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不…...
Fastapi + vue3 自动化测试平台(5)-- 封装树形结构列表生成器
使用FastAPI封装树形结构生成函数:高效处理层级数据 在Web开发中,树形结构是一种常见的数据组织形式,常用于菜单、分类、组织结构等场景。本文将介绍如何使用FastAPI封装一个通用的树形结构生成函数,支持动态选择字段,…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
实战设计模式之模板方法模式
概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...
算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...

