Appearance
concepts/io/ —— I/O 子系统底层原理
数据怎么在内存和外设之间流动?CPU 要不要亲自搬每一个字节?外设怎么挂到系统总线上?FPGA 加速卡怎么跟主机通信?CPU 怎么告诉 DMA 引擎去干活?中断控制器怎么把外设信号变成 CPU 能处理的中断? 一次 read()+write() 背后到底发生了什么?这是 9 篇 I/O 基础主题簇。
- dma.md —— DMA(直接内存访问):数据搬运不需要 CPU 亲自 memcpy,DMA 控制器/引擎代替 CPU 完成外设↔内存的数据传输,CPU 只需发号施令然后去做别的事。覆盖 DMA 原理、总线控制权、与中断的关系、为何服务器访问 FPGA 使用 DMA、SG-DMA 等变体。
- dma-8237.md —— Intel 8237 DMA 控制器详解:所有现代 DMA 引擎的"祖宗"。硬件架构(4通道/仲裁器/引脚)、四种工作模式(单次/块/按需/级联)、寄存器逐位拆解(命令/模式/状态)、完整编程步骤、总线时序(S0~S4状态)、页面寄存器机制(16bit→20bit地址)、三个汇编级demo(内存间拷贝/软盘读扇区/主从片级联)、与传统DMA的10维度对比。
- dma-cpu-interaction.md —— CPU 如何与 DMA 控制器交互:从发起请求到数据传输完成的完整过程。CPU 和 DMA 引擎不是"发包/响应"模型,而是"共享内存 + 门铃"——描述符队列、Head/Tail 指针无锁协作、PCIe TLP 级别的完整交互序列、IOMMU 的角色。
- dma-multi-channel.md —— DMA 多通道架构:每个通道是否独立、能否并行传输?从硬件 FSM→总线仲裁器→时分复用,讲清"FSM 并行 vs 总线并行"两层的本质区别;含双通道并发仲裁完整时序图、五种工程价值(数据流隔离/方向并发/独立中断/LLI 穿插/驱动解耦)、单端口 vs 多端口两种极端场景对比、FPGA AXI-DMA/XDMA 全双工分析。
- 8259.md —— Intel 8259A 中断控制器详解:所有现代中断控制器的"祖宗"。每片管 8 条 IRQ、两片级联凑出 15 条——硬件架构(IRR/ISR/IMR 三寄存器协作)、全部 7 个寄存器逐位拆解(ICW1-4 初始化序列、OCW1-3 操作命令)、固定优先级链与嵌套机制、两个 INTA 周期详细握手时序、主从级联 EOI 顺序陷阱、SFNM 特殊全嵌套、到 APIC 的六宗罪进化路线、8259 在 Linux 的 7 大遗产生命力(IRQ 编号/EOI/IMR/向量机制/Virtual Wire 模式)。
- pcie/ —— PCIe 主题索引:按时间线四阶段组织——①链路训练→②固件枚举→③内核建树→④BAR激活+驱动。含推荐阅读路径、按场景查阅指南、跨主题关联。[子文档:pcie.md(物理基础)、pcie-link-training.md(LTSSM)、pcie-firmware-enum.md(固件枚举)、pcie-pre-enumeration.md(RC/BDF/BAR机制)、pcie-enumeration.md(内核枚举与路由)、pcie-bar-activation.md(BAR激活与驱动probe)]
- fpga-communication.md —— Linux 与 FPGA 通信方式:从
/dev/mem到 VFIO,系统化梳理六种通信方式(MMIO/UIO/DMA/VFIO/专用驱动),原理、代码示例、性能对比和选型建议。 - io-addressing.md —— I/O 编址(PMIO vs MMIO):CPU 怎么"找到"外设寄存器?两种编址方式的全景对比——端口映射 I/O(x86 IN/OUT 指令、独立 64KB I/O 空间、M/IO# 引脚)vs 内存映射 I/O(BAR 分配、普通 mov 访问)。核心问题:一条
mov [BAR], val如何穿过 Store Buffer、缓存层级、Root Complex 最终变成 PCIe TLP 包?含端到端时序图、Posted vs Non-Posted 延迟对比、为什么 MMIO 读比写慢几个数量级。8259/8237/LAPIC/现代 PCIe 设备的编址实例速查表。 - read-write-process.md —— read+write 整体过程:从用户态调用到数据落盘/发网的完整链路(syscall→VFS→page cache→块层→驱动→DMA),含完整时序图、模式切换/上下文切换分析、栈变化、特权级切换硬件细节、数据流走向与内存带宽消耗。
- cpp-io-separation.md —— C++ I/O 设计的"分离"思想:从标准库到高性能框架,系统论述缓冲/设备、格式化/传输、同步/异步、协议/传输四层关注点分离,含 streambuf 架构图、异步时序图、反例与工程收益表。
配套:系统调用机制见 ../process/syscall.md,系统调用深入细节(段/特权级/同一线程切换)见 ../process/syscall-details.md,上下文切换见 ../process/context-switch.md,中断控制器进化(8259A→APIC→xAPIC→x2APIC→MSI-X)见 ../process/irq-affinity.md §二,中断处理流程见 ../process/interrupts.md,零拷贝中的 SG-DMA 见 ../network/zero-copy.md,网卡收包见 ../process/interrupts.md 的 NAPI 部分。