Componentes HW involucrados en E / S

0

Comenzando con la CPU, o con el conjunto de chips que lo acompaña (por ejemplo, Intel PCH), ¿cuáles son los diversos componentes HW involucrados en la traducción de una lectura / escritura al disco, y cuál es su función?

Específicamente, estoy confundido sobre los roles de los siguientes:

  1. Controlador de host
  2. Controlador de dispositivo
  3. Adaptador de bus host

Por lo que yo puedo decir:

  1. Controlador de host: circuitería que existe en la placa base. Incluye una interfaz de nivel de registro para que los controladores interactúen. Responsable de traducir las solicitudes de sus registros en acciones: lectura / escritura en dispositivos conectados directamente. Por ejemplo, USB. También puede contener capacidad de DMA.
  2. Controlador de dispositivo: igual que el controlador de host, pero existe en el dispositivo externo, como un controlador de disco en un HDD.

  3. Adaptador de bus host: traduce un protocolo de bus externo a uno interno. Transparente al software. Por ejemplo, un controlador que desea leer / escribir en registros en un controlador de disco HDD externo HDD conectado a través de SATA o Infiniband.

Entonces, ¿cómo funcionaría un dispositivo como un teclado externo conectado a través de USB? En el nivel SW, los controladores todavía parecen estar comunicándose con registros específicos; Sin embargo, hay 2 controladores en juego.

kay
fuente
Recomiendo leer sobre Abstracción y los poderes mágicos que puede aportar a la mesa. Usando la abstracción, no debemos preocuparnos por cómo está conectado el concentrador raíz USB, solo nos enfocamos en tratar con el dispositivo USB, o incluso solo con el hecho de que es " un teclado " (en este nivel, no incluso importa que esté conectado a través de USB).
Attie
@Attie Pero a veces quieres saber cómo funcionan las cosas.
kay
¡Por supuesto! - ¡No estoy sugiriendo que no lo investiges, sino que te ayudo a darte cosas relacionadas para leer! :-)
Attie

Respuestas:

1

El controlador de host , el adaptador de bus de host o incluso el adaptador de host son solo nombres diferentes para lo mismo (consulte Wikipedia ): una pieza de hardware que conecta el bus entre el host (su PC) y el dispositivo (su disco duro externo) al bus interno (PCIe) del host.

Entonces, para un disco duro a través de SATA:

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

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

El controlador host puede existir en la placa base o como una tarjeta separada. La PC puede leer / escribir en los registros del controlador host, o hacer DMA, y los controladores host los traducen en acciones en el bus SATA (o traducen acciones en el bus SATA en valores de registro correspondientes o acciones DMA).

En este sentido, no existe algo así como un "adaptador de bus host" que sea transparente para el software, aunque, por supuesto, es posible diseñar algún dispositivo que emule a otro dispositivo (por ejemplo, una memoria USB emula un disco duro, usando el mismo protocolo que sería usado para un disco duro).

La imagen es la misma para un teclado conectado a través de USB:

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

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

Aunque aquí el controlador del dispositivo USB se integrará en un solo chip con el controlador integrado del teclado, y el bus es interno y no lo verá al abrir el teclado.

La pila de software en general es más complicada de lo que usted describe; existen otros protocolos o incluso pilas de protocolos sobre el protocolo del bus en sí, por ejemplo, el mencionado protocolo de "almacenamiento USB" (que es similar a SCSI) sobre el protocolo USB básico, o el protocolo "USB HID" para el teclado sobre el protocolo USB básico .

dirkt
fuente
Específicamente para Intel, ¿no es la noción de un "puente sur" un concepto anticuado? Mirando las hojas de datos, parece que muchos controladores están integrados en la PCH. Ya que menciona Wikipedia, se puede conciliar el párrafo que compara explícitamente controlador de disco vs HBA ?
kay
Usé "puente sur" porque es un término ampliamente conocido, llámalo como quieras. Es la parte donde se encuentra el controlador raíz PCIe, o cualquier bus interno que tenga su PC. El "controlador de disco" proviene de un momento en que no había bus adicional (o no algo que llamaría "bus") entre esta pieza de hardware y el disco. Eso evolucionó lentamente en un bus real (y los buses evolucionan lentamente en algo que funciona más como una red con paquetes (PCIe, USB 3.0)), por lo que esa parte todavía se llamaba "controlador de disco".
dirkt
Al final, todo esto son nombres, realmente no importa lo que llames una pieza de hardware, aunque algunas personas tienen fuertes sentimientos sobre el "nombre correcto" y editarán artículos de Wikipedia hasta que sean completamente confusos. En mi humilde opinión los nombres no son importantes, el hardware sí lo es.
dirkt
Estoy de acuerdo con el nombre, una vez que sepa cómo funciona el hardware. Antes de eso, al intentar aprender / encontrar información, los nombres pueden ayudar :). OK, ¿diría entonces que para la mayoría de las clases de dispositivos IO, el diagrama que dibujó es suficiente? Es decir, 2 controladores, y un bus externo compartido? ¿Este modelo mental se aplica a SATA, USB, tarjetas de red, etc.?
kay
El diagrama está centrado en el bus : tiene algún tipo de bus y un controlador / adaptador de bus / como quiera llamarlo en ambos extremos. Básicamente, todo lo que puede conectar a través de dicho bus (o red) sigue este patrón: RS232, I2C, SDI, USB, IDE, PATA, SATA, 802.3 Ethernet, 802.11 WLAN, IEEE 1901 PowerLAN ... El hardware real posiblemente tendrá varios buses. (un chip I2C en un dispositivo USB), o ser accesible de manera diferente (por ejemplo, GPIO). Es un patrón útil, pero no completo. Sugiero mirar ejemplos concretos (hojas de datos de Google) para obtener un mejor modelo mental.
dirkt
1

Esta pregunta solo:

¿Cómo funcionaría entonces un dispositivo como un teclado externo conectado a través de USB?

Cuando el dispositivo está enchufado, Windows envía un mensaje, por favor identifique su autocomando, y todos los dispositivos USB deben responderlo.

Windows consulta sus bases de datos internas para buscar un controlador y configurar el dispositivo. Entonces el conductor se hace cargo de la responsabilidad.

Incluso un simple teclado USB arroja mucha información. Aviso: tiene un número de bus y un número de dispositivo en ese bus para identificar dónde está conectado.

Entonces tiene un número de identificación único. Los primeros 4 indican qué fabricante produjo el dispositivo seguido de un número de dispositivo único de ese fabricante.

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)
cybernard
fuente