ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

I/O 设备分类与 I/O 控制器:硬件如何与 CPU 对话

I/O 设备分类与 I/O 控制器:硬件如何与 CPU 对话 引言你敲击键盘字符出现点击保存数据写入磁盘。CPU 并不是直接跟键盘或磁盘说话的——中间隔着 I/O 控制器和 UNIX 提供的统一文件接口。本文拆解 I/O 设备分类体系与控制器的硬件架构并为有工程背景的读者揭示底层设计在真实系统中的痕迹。核心要点I/O 设备按使用特性人机交互/存储/网络、传输速率低/中/高和信息交换单位块/字符三个维度分类 [共识]块设备可寻址、以块为单位传输字符设备不可寻址、以字符为单位、常采用中断驱动——408 选择题核心辨析点 [引用王道 5.1_1]I/O 控制器通过数据寄存器、控制寄存器、状态寄存器经 CPU 接口、I/O 逻辑、设备接口三大模块充当翻译官 [引用王道 5.1_2]内存映像 I/O 将寄存器编址纳入内存地址空间、复用访存指令寄存器独立编址需专用 I/O 指令什么是 I/O 设备——UNIX 的一切皆文件哲学I/O 设备Input/Output Device将数据输入计算机或接收计算机的输出属于裸机Bare Machine的组成部分。UNIX 将其抽象为特殊文件Special File——操作键盘等同于读文件Read向显示器输出等同于写文件Write用户态程序无需关心设备的具体型号或协议 [经验]。需要记牢一对定义Write写 向外部设备写出数据CPU → 设备Read读 从外部设备读入数据设备 → CPU。方向判断的视角始终是 CPU [引用王道 5.1_1]。鼠标、键盘属于输入型显示器属于输出型移动硬盘可输入可输出。常见混淆I/O 设备是物理硬件键盘机械轴体、磁盘磁头设备驱动程序Device Driver是内核中的软件。前者在硬件层后者在软件层——分清这一点学习 I/O 软件层次结构时才不会概念错位 [共识]。I/O 设备的三种分类维度——怎么给设备贴标签同一块键盘从不同角度可贴上不同标签。三个分类维度反映的是操作系统设计者管理设备的真实决策逻辑。按使用特性人机交互类鼠标、键盘、打印机速率较低存储设备移动硬盘、光盘以块传输追求高吞吐网络通信设备网卡、调制解调器关注延迟与可靠性 [共识]。这种分类影响调度策略——不会用磁盘的电梯算法去管键盘。按传输速率低速几个 ~ 几百 B/s如键盘中速数千 ~ 上万 B/s如打印机高速数千 B/s ~ 千兆 B/s如磁盘、网卡。速率量级决定 I/O 控制方式低速用程序直接控制高速需要 DMA直接存储器访问Direct Memory Access。按信息交换单位——408 考研最重要的分类维度 [共识]。块设备Block Device以块为单位可寻址CPU 可随机访问任意块磁盘即典型。字符设备Character Device以字符为单位不可寻址常采用中断驱动如键盘、串口。块设备 vs 字符设备——408 考研必考辨析对比维度块设备字符设备寻址能力可寻址随机读写任一块不可寻址顺序访问传输单位以块为单位512B、4KB以字符/字节为单位传输速率较高较低典型控制方式常采用 DMA常采用中断驱动注意两个分类维度不互斥。磁盘从信息交换单位看是块设备从使用特性看是存储设备。不要误以为块设备的本质是按块传输——本质是可寻址。I/O 控制器的硬件构成——CPU 的翻译官CPU 读得懂寄存器里的 0 和 1但读不懂键盘的物理行程和磁头偏转角度。因此 CPU 无法直接控制 I/O 设备的机械部件需要 I/O 控制器I/O Controller又称 Device Controller作为中介。I/O 设备由机械部件磁头臂、按键弹簧等物理机构和电子部件I/O 控制器——主板扩充槽上的印刷电路板组成。控制器内部三个逻辑模块CPU 与控制器接口Host Interface通过数据线、地址线、控制线与 CPU 相连。I/O 逻辑I/O Logic负责地址译码判断访问哪个寄存器和命令识别将 I/O 指令转为设备控制信号)。控制器与设备接口Device Interface一个控制器可通过多接口连多个设备。例如一块 SATA 控制器挂载多块硬盘——408 考点“一个 I/O 控制器可能对应多个设备” 。I/O 控制器的寄存器寄存器是控制器中 CPU 直接访问的存储单元数据寄存器Data Register暂存 CPU 与设备间的数据。输入时设备放入、CPU 读取输出时 CPU 写入、设备取走 。控制寄存器Control Register存放 CPU 的命令和参数。如读磁盘第 100 扇区——命令码和扇区号写入此寄存器。状态寄存器Status Register记录设备状态。典型约定 1空闲Idle0忙碌Busy。CPU 发命令前须先读它。地址译码非严格意义的寄存器是 I/O 逻辑功能——将地址信号译码以定位目标寄存器。各控制/状态寄存器可有多个实例对应不同设备 。分设四种的原因数据双向暂存命令 CPU 单向下发状态设备单向上报——方向时序不同合并会导致读写冲突 。内存映像 I/O vs 寄存器独立编址——两种寄存器寻址方案CPU 如何定位控制器中的寄存器两种方案。内存映像 I/OMemory-Mapped I/O将寄存器地址映射到内存地址空间。CPU 用普通访存指令如MOV即可操作控制器。优点是简化了指令可以采用对内存进行操作的指令来对控制器进行操作。代价是寄存器挤占内存地址空间。寄存器独立编址Port-Mapped I/O寄存器使用独立地址空间。CPU 需专用 I/O 指令如 x86IN/OUT指令要指明寄存器地址和控制器编号 。优点是不占内存地址空间代价是指令集复杂度增加。两种方案的工程权衡对比维度内存映像 I/O寄存器独立编址指令复杂度低复用访存指令高需专用 I/O 指令地址空间利用率寄存器挤占内存地址独立空间互不干扰硬件成本需地址区分逻辑需额外 I/O 指令译码电路典型架构ARM、MIPSx86IN/OUT 指令工程中两种方案并存 [经验]。Linux 通过/proc/iomem暴露内存映像 I/O 的地址映射/proc/ioports暴露独立编址的端口范围——可直观看到两类编址的共存。考点串联——从硬件到软件的全景视角I/O 设备分类和控制器属于硬件层。往上是本系列第二篇的四种 I/O 控制方式程序直接控制、中断驱动、DMA、通道控制再往上是第三篇I/O 软件层次结构中断处理程序→设备驱动→设备独立性软件→用户层 I/O。之前讲的系统调用与中断机制是前置知识——用户态通过系统调用进内核内核通过中断获知 I/O 完成。本章后续还覆盖SPOOLing 技术第四篇独占设备虚拟化为共享和设备分配与缓冲区管理第五篇设备争用与速率匹配。FAQQ1: 块设备和字符设备的根本区别是什么最容易混淆的点在哪根本区别是寻址能力。块设备每个数据块有独立地址、可随机访问字符设备不可寻址、按字符流顺序进出。最易混淆把块设备等同于按块传输——本质是可寻址。Q2: I/O 控制器为什么需要四类不同的寄存器数据、命令、状态是三类方向不同、时序不同的信息。数据双向流动命令 CPU 单向下发状态设备单向上报。合并会导致读写冲突分设是清晰的职责分离。Q3: 内存映像 I/O 用得更多还是寄存器独立编址两者并存。x86 保留独立编址IN/OUT现代设备越来越多用内存映像 I/OPCIe BAR 机制。ARM 从设计之初仅支持内存映像 I/O。取决于 CPU 架构哲学与兼容性约束。Q4: 状态寄存器的 1/0 含义是统一标准吗没有强制国际标准。主流约定 1空闲、0忙碌特定设备可能有相反定义。驱动必须知道具体控制器的寄存器定义——这正是驱动必须针对具体硬件编写的原因。总结I/O 设备的三维分类体系和 I/O 控制器的寄存器架构构成了操作系统 I/O 管理的硬件基础。理解这些不是为了背诵而是为后续掌握为什么不同设备适用不同控制方式——硬件特性决定了软件方案的选择空间。延伸阅读Linux Kernel Documentation: Memory-Mapped I/O本系列第二篇四种 I/O 控制方式程序直接控制 / 中断驱动 / DMA / 通道控制—— 即将发布本系列第三篇I/O 软件层次结构 —— 即将发布本系列第四篇SPOOLing 技术 —— 即将发布本系列第五篇设备分配与缓冲区管理 —— 即将发布
返回列表