I/O 中涉及的硬件组件

I/O 中涉及的硬件组件

从 CPU 或其附带的芯片组(例如 Intel PCH)开始,将读/写转换为磁盘涉及哪些硬件组件,它们的作用是什么?

具体来说,我对以下角色感到困惑:

  1. 主控制器
  2. 设备控制器
  3. 主机总线适配器

据我所知:

  1. 主机控制器:主板上的电路。包括驱动程序与之交互的寄存器级接口。负责将来自其寄存器的请求转换为操作:直接读取/写入连接的设备。例如,USB。也可能包含 DMA 功能。
  2. 设备控制器:与主机控制器相同,但存在于外部设备上,例如 HDD 上的磁盘控制器。

  3. 主机总线适配器:将外部总线协议转换为内部协议。对软件透明。例如,想要读取/写入通过 SATA 或 Infiniband 连接的外部 HDD 磁盘控制器 HDD 上的寄存器的驱动程序。

那么,通过 USB 连接的外部键盘等设备将如何工作?在软件级别,驱动程序似乎仍在与特定寄存器通信;但是,有 2 个控制器在起作用。

答案1

主控制器主机总线适配器甚至主机适配器只是同一事物的不同名称(参见维基百科):连接主机(您的 PC)和设备(您的外部硬盘)之间的总线和主机的内部总线(PCIe)的硬件。

因此,对于通过 SATA 的硬盘:

<--------- PC --------->         <------ Harddisk ------>

PC south-      SATA host          SATA device       Device
bridge    ---- controller ....... controller   ---- SoC
           ^^               ^^                  ^^
        PCIe-Bus          SATA-Bus        Some kind of bus

主机控制器可以存在于主板上,也可以作为单独的卡。PC 可以读取/写入主机控制器的寄存器,或执行 DMA,主机控制器将这些转换为 SATA 总线上的操作(或将 SATA 总线上的操作转换为相应的寄存器值或 DMA 操作)。

从这个意义上讲,像“主机总线适配器”这样对软件透明的东西并不存在,尽管当然可以设计一些模拟另一个设备的设备(例如,USB 棒模拟硬盘,使用与硬盘相同的协议)。

对于通过 USB 连接的键盘,图片相同:

<--------- PC --------->         <------ Keyboard ------>

PC south-      USB host           USB device       Device
bridge    ---- controller ....... controller   ---- SoC
           ^^               ^^                  ^^
        PCIe-Bus          USB-Bus          Internal bus

虽然这里 USB 设备控制器将与键盘嵌入式控制器集成在单个芯片上,并且总线是内部的,打开键盘时不会看到它。

通常,软件堆栈比您描述的更复杂;在总线协议本身之上还有其他协议甚至协议栈,例如,在基本 USB 协议之上提到的“USB 存储”协议(类似于 SCSI),或在基本 USB 协议之上用于键盘的“USB HID”协议。

答案2

仅限此问题:

那么,通过 USB 连接的外部键盘等设备如何工作?

当设备插入时,Windows 会发出“请确认您的身份”命令,并且要求所有 USB 设备对其做出响应。

Windows 查询其内部数据库以查找驱动程序并配置设备。然后驱动程序接管责任。

即使是一个简单的 USB 键盘也会转储大量信息。注意:它有一个总线号,以及该总线上的设备号,用于识别它连接的位置。

然后它有一个唯一的 ID 号。前 4 位表示哪个制造商生产了该设备,后面是该制造商的唯一设备编号。

Bus 008 Device 003: ID 03f0:0024 Hewlett-Packard KU-0316 Keyboard
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0         8
  idVendor           0x03f0 Hewlett-Packard
  idProduct          0x0024 KU-0316 Keyboard
  bcdDevice            3.00
  iManufacturer           1 CHICONY
  iProduct                2 HP Basic USB Keyboard
  iSerial                 0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           34
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      1 Keyboard
      iInterface              0
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.10
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      65
         Report Descriptors:
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval              10
Device Status:     0x0000
  (Bus Powered)

相关内容