彻底理解I/O架构

       一个系统要能正确工作,必须要有数据通道(data paths)的机制,软件和硬件系统都概莫能外。对于计算机系统而言,必须要有data paths的机制来确保CPU, RAM和I/O设备之间的信息数据能正确的流动。这些data paths,通常被称为总线(BUS),是计算机内部主要的通信通道。

      为什么英文总线叫bus呢?我们知道:公共汽车BUS会在每个站台上停靠并让乘客搭乘。总线也有类似的功能,它会在每个挂接在它身上的设备停靠或收集(pick up)设备的信息。因为这种功能的类似 性,所以总线英文为bus.

       计算机内部一般有系统总线来连接内部所有的硬件设备。一个典型的系统总线是PCI((Peripheral Component Interconnect)总线。其他类型的用得较多的总线还有ISA,EISA, MCA, SCSI, 和USB。一个计算机有多个不同类型的总线,这些总线由桥(bridge)链接起来。有以下两种高速总线处理到达或出自内存芯片的数据传输:

    (1)前端总线FSB:连接CPU和RAM控制器;

    (2)后端总线:连接CPU和外部硬件设备CACHE.

     主机桥(HostBridge,俗称北桥)连接系统总线和前端总线。

     连接I/O设备和CPU的数据通道可统称为I/O总线。外设是为了用来适配一个外设总线而存在的, 并且大部分流行的 I/O 总线成型在个人计算机上。可见,总线的类型影响到I/O设备的内部设计同时影响到Linux内核对它的处理方式。

PC的通用I/O架构如下所示:

      接下来,我将按照从上而下的顺序(即I/O controller--> I/O Interface--->I/O Port)对该图进行点评。

       设备控制器(         I/O Controller)的作用有以下两个:

     (1)解析从I/O Interface接收到的高层次命令,并通过发送时序正确的电信号给I/O设备,I/O设备则根据这些信号去执行相应的动作。

    (2)正确的解析和翻译来自I/O设备的电信号并通过I/O Interface修改相应的I/O 状态寄存器值。(I/O状态寄存器是I/O PORT的一种。)

       I/O Interface是一种硬件电路,插入在I/O Port和相应的设备控制器之间。它充当一个解释器的功能,把I/O Port里的值解析为对应设备的命令或数据。相应的,它也会读取设备的状态值,并更新I/O port里的值。

       有两种类型的interface:

       (1)定制化接口。常用的有键盘接口,图形接口,磁盘接口,总线鼠标接口,网络接口等。

       (2)通用接口。常见的有串口,并口,PCMCIA(如硬盘、网卡等)接口,SCSI接口,USB接口等。

为了统一起见,设备的I/O Port也被结构化为一系列专用寄存器:

     (1)控制寄存器;

     (2)状态寄存器;

     (3)输入寄存器;

     (4)输出寄存器。

    示意图如下:

      对于CPU而言,如果它要发数据到某个设备,其实是发到对应的接口(I/O Interface),接口电路里有多个寄存器(也称为端口,即“I/O PORT”),访问设备实际上是读写这些寄存器,所有的信息会由接口转给它的设备。一般来说,CPU会根据需要向设备控制寄存器写入需要执行的命令,并会从设备状态寄存器读取设备的内部状态。CPU也会从输入寄存器获取(Featch or pull)字节数据,或向输出寄存器以推送的方式写入(Push)字节数据。

      一个外部设备要想接入系统,就用自己的接口和总线上的某个匹配接口对接。通常会有多个外设,每个外设的接口电路中,又会有多个端口,每个端口都需要一个地址,为他们标识一个具体的地址值,是系统必须解决的事,与此同时,你还有个内存条,可能是512M或1G或更大的金士顿、现代DDR2之类,他们的每一个地址也都需要分配一个标识值,另外,很多外设有自己的内存、缓冲区,就像你的内存条一样,你同样需要为它们分配内存……你的CPU可能需要和它们的每一个字节都打交道,所以:别指望偷懒,它们的每一寸土地都要规划好!

      为了规划好I/O端口,有两种编址方式:独立编址和统一编址。

       (1)统一编址:

           外设接口中的IO寄存器(即IO端口)与主存单元一样看待,每个端口占用一个存储单元的地址,将主存的一部分划出来用作IO地址空间,如,在 PDP-11中,把最高的4K主存作为IO设备寄存器地址。端口占用了存储器的地址空间,使存储量容量减小。统一编址也称为“I/O内存”方式,外设寄存器位于“内存空间”(很多外设有自己的内存、缓冲区,外设的寄存器和内存统称“I/O空间”)。

        (2)独立编址(单独编址):

            IO地址与存储地址分开独立编址,I/0端口地址不占用存储空间的地址范围,这样,在系统中就存在了另一种与存储地址无关的IO地址,CPU也必须具有专用与输入输出操作的IO指令(IN、OUT等)和控制逻辑。独立编址下,地址总线上过来一个地址,设备不知道是给IO端口的、还是给存储器的,于是处理器通过MEMR/MEMW和IOR/IOW两组控制信号来实现对I/O端口和存储器的不同寻址。如,intel 80x86就采用单独编址,CPU内存和I/O是一起编址的,就是说内存一部分的地址和I/O地址是重叠的。独立编址也称为“I/O端口”方式,外设寄存器位于“I/O(地址)空间”。

I/O寄存器和I/O端口(I/O Port)这两个术语经常被关联使用,但它们所指的内容略有不同,尽管在某些上下文中可能互相替代使用。

I/O寄存器是外设或其接口卡上的物理电路的一部分,它们用于控制外设的操作、监控外设的状态或传输数据。这些寄存器可以分为控制寄存器、状态寄存器和数据寄存器等。当CPU需要与外设通信时,它会读取或写入这些寄存器的值。

I/O端口则是一个更广义的概念,指的是CPU能够直接访问的外设寄存器的地址集合。换句话说,I/O端口可以视为是I/O寄存器在系统中的逻辑位置标识。当CPU想要与外设交互时,它会通过指定的I/O端口地址来访问对应的I/O寄存器。

因此,可以说I/O寄存器是实际存储数据和控制信息的硬件单元,而I/O端口则是指这些寄存器在系统总线上的访问点或者说是它们的地址。在讨论硬件接口和系统架构时,明确区分这两个概念有助于理解数据是如何在CPU和外设之间流动的。

I/O(输入/输出)总线是计算机系统中的关键组件,它们负责在中央处理器(CPU)、内存、外设之间传输数据、地址和控制信号。随着时间发展,不同的I/O总线标准被设计出来以满足不断提升的性能和扩展需求。以下是一些历史上和当前常用的I/O总线:

  1. ISA (Industry Standard Architecture): 早期个人计算机的总线标准,支持8位和16位数据传输。

  2. EISA (Extended Industry Standard Architecture): 作为ISA的扩展,提供了32位数据传输能力,增强了性能和兼容性。

  3. MCA (Micro Channel Architecture): IBM开发的一种高性能总线,主要用于IBM PS/2系列计算机,但并未得到广泛应用。

  4. VESA Local Bus (VLB): 一种在PCI出现前用于提高图形卡性能的总线,特别是在486时代很流行。

  5. PCI (Peripheral Component Interconnect): 1990年代中期开始普及,支持32位和64位数据传输,成为个人电脑上最普遍的I/O总线。

  6. AGP (Accelerated Graphics Port): 专门设计用于图形加速卡,提供更快的直接访问系统内存的能力,是PCI的一个分支,专为图形处理优化。

  7. PCI Express (PCIe): 当前主流的高速I/O总线,采用点对点连接,支持多种通道配置(x1, x4, x8, x16等),广泛应用于显卡、固态硬盘、网络适配器等设备。

  8. USB (Universal Serial Bus): 通用串行总线,用于连接各种外部设备,如鼠标、键盘、打印机、移动存储等,经历了USB 1.0/1.1、2.0、3.0/3.1、USB4等多个版本。

  9. IEEE 1394 (FireWire): 高速接口标准,适用于音视频设备,如DV摄像机,但市场占有率不如USB。

  10. SATA (Serial Advanced Technology Attachment): 用于硬盘驱动器和光驱的串行接口,替代了旧有的并行ATA(PATA)接口。

  11. SAS (Serial Attached SCSI): 面向企业级存储系统的高速接口,兼容SATA设备,提供更高的性能和可靠性。

  12. Thunderbolt: 英特尔开发的高速双向I/O技术,结合了PCI Express和DisplayPort协议,支持高速数据传输和视频输出。

  13. SPI (Serial Peripheral Interface)I²C (Inter-Integrated Circuit): 这些是嵌入式系统中常用的低速同步串行通信总线,适用于传感器、EEPROM等简单设备的连接。

这些总线标准随着技术进步不断演进,以适应不同应用场景对速度、功耗、灵活性的需求。

在视频显示领域,有几种关键的I/O(输入/输出)总线用于连接显示设备和计算机或其他视频源。以下是与视频显示相关的几个重要I/O总线:

  1. VGA (Video Graphics Array): 虽然古老,但在某些场景下仍有应用,VGA是一种模拟信号接口,用于连接显示器和显卡。它主要传输红、绿、蓝三色信号以及同步信号。

  2. DVI (Digital Visual Interface): 一种数字视频接口,支持模拟和数字信号传输。DVI分为多种类型,包括DVI-A(仅模拟)、DVI-D(仅数字)和DVI-I(集成数字和模拟)。它被广泛用于连接显示器和图形卡,提供比VGA更清晰的画质。

  3. HDMI (High-Definition Multimedia Interface): 高清多媒体接口,是一种全数字化视频和音频接口技术,广泛应用于消费电子设备,如电视、投影仪、游戏机和蓝光播放器等。HDMI支持高分辨率视频和多声道音频传输。

  4. DisplayPort: 由VESA推出的一种高清数字显示接口标准,主要设计用于电脑和显示器之间的连接,支持更高的分辨率、刷新率以及多流传输。DisplayPort还可以通过适配器转换为HDMI或DVI信号。

  5. Thunderbolt: 特别是Thunderbolt 3及后续版本,除了高速数据传输外,还集成了DisplayPort视频输出功能,能够通过单个接口支持4K甚至8K分辨率的显示输出,以及菊花链连接多个设备。

  6. LVDS (Low-Voltage Differential Signaling): 低压差分信号,常用于笔记本电脑和其他便携式设备内部的显示屏连接,因为它能有效降低电磁干扰并节省电力。

  7. MIPI DSI (Display Serial Interface): 在移动设备中广泛应用,如智能手机和平板电脑,MIPI DSI是一种高速、低功耗的显示接口,专为移动应用设计,支持显示控制器与显示屏之间的数据传输。

这些总线标准在不同的应用场景中各有优势,从传统的桌面显示到现代的高清视频传输,以及移动设备的内部显示连接,覆盖了广泛的视频显示需求。

 本文力求通俗易懂,主要参考书籍: Understanding the Linux Kernel

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值