¿El UHCI USB se basa en sondeo o se controla mediante interrupciones?

3

He tenido una discusión con algunos colegas sobre si el USB se basa en el sondeo o se controla mediante interrupciones. Algunos reclaman que los teclados USB implican una sobrecarga mayor que, por ejemplo, los teclados PS / 2 debido al requisito de que el CPU principal sondeara el primero. Ahora, con las velocidades de CPU típicas de hoy, probablemente sea una pequeña cantidad de tiempo de CPU empleado en ambos casos, pero aún es interesante saberlo.

He intentado averiguarlo yo mismo. Sospecho que la respuesta podría depender de la interfaz del controlador de host USB. Miré específicamente a UHCI, que es uno de los estándares originales y es bastante fácil de entender ( ftp: / /ftp.netbsd.org/pub/NetBSD/misc/blymn/uhci11d.pdf ). Según mi lectura de esto, parece que podría argumentarse en ambos sentidos si los dispositivos USB están basados en sondeo o no.

Así que aquí hay algunos datos que he recopilado al leer las especificaciones de UHCI:

1) Es cierto que un dispositivo USB (al menos antes de USB 3.0, que es lo que se aplica a la mayoría de los teclados) no puede enviar una interrupción de forma activa. Solo pueden responder a una consulta si hay una interrupción pendiente. Por lo tanto, esta consulta debe enviarse periódicamente.

Hasta ahora, el punto 1 sugiere que de hecho se basa en encuestas. Pero luego tenemos:

2) No es la CPU la que envía las consultas, sino el controlador del host.

3) Sin embargo, la CPU principal tiene que programar el controlador host, al establecer un calendario detallado de lo que sucede en cada ms.

4) El controlador de host UHCI puede enviar interrupciones a la CPU principal para avisarle de las transferencias completadas. Por lo tanto, la CPU principal no necesita sondear para completar las transferencias.

Así que ahora podría parecer (y esto es lo que algunos colegas argumentaron) que, desde el punto de vista de la CPU principal, el USB no se basa en el sondeo de todos modos. Es el controlador del host el que periódicamente sondea y luego entrega las interrupciones a la CPU principal. Esto no sería tan malo, porque el controlador del host no tiene otros trabajos, por lo que no es un problema que esté realizando esta encuesta.

Pero desafortunadamente no creo que este sea realmente el caso después de todo, porque:

5) De acuerdo con mi lectura de UHCI, no hay forma de que la CPU principal pueda configurar un controlador UHCI y un teclado USB de tal manera que una vez que esté configurada, la CPU principal no tendrá que seguir trabajando hasta que algo suceda, por ejemplo. el usuario presiona una tecla y el teclado establece una interrupción pendiente que se entrega al controlador del host y finalmente al host como se especificó anteriormente. De acuerdo con mi lectura, la CPU principal tiene que "trabajar" continuamente para mantenerla en funcionamiento. Hay como lo veo dos razones para esto:

  • Los descriptores de transferencia tienen un bit de Interrupción al finalizar que se puede configurar, de modo que la CPU principal se interrumpe al finalizar la transferencia. Hasta ahora todo bien, pero desafortunadamente no hay manera de diferenciar entre respuestas positivas y negativas para interrumpir consultas, por lo que esto significa que la CPU principal se interrumpirá cada vez que se pregunte a un dispositivo sobre el estado de la interrupción, sin importar si tiene una interrupción pendiente o no. .
  • El horario no puede ser reutilizado. Cada descriptor de transferencia tiene un bit ACTIVO que debe configurarse en 1 para que el controlador host lo ejecute. El controlador del host lo establece en 0 después de que se haya ejecutado. Como resultado, la CPU principal deberá revisar periódicamente los descriptores de transferencia y volverlos a activar, para que se ejecuten de nuevo.

Entonces, aunque parece que UHCI tiene el potencial de entregar interrupciones "gratis" a la CPU principal, parece que los dos puntos anteriores lo arruinan y significa que incluso si la CPU principal no tiene que estar involucrada en el exterior El correcto sondeo del teclado, todavía tiene que reprogramar periódicamente el sondeo, incluso en el caso de que no haya eventos. Lo que significa que es una especie de participación en el sondeo.

Estoy realmente interesado si alguien pudiera validar estas observaciones, especialmente los dos puntos anteriores. ¡Puntos de bonificación si alguien puede señalar cómo OHCI, EHCI y XHCI difieren en estos aspectos!

Gracias de antemano.

    
pregunta Morty

0 respuestas

Lea otras preguntas en las etiquetas