¿Cómo se comunica la cpu con los periféricos?


Asumo que la cpu tiene acceso directo a la BIOS y RAM de la placa base.(corrígeme si me equivoco)

Pero cómo se comunica la cpu con otro hardware como discos duros, tarjetas de expansión, periféricos, otros BIOS, etc.?

Sé sobre el sistema operativo y sus controladores, pero son software, están en RAM. ¿Cómo se comunica la cpu con todo este hardware a nivel de hardware? ¿No se limita solo a la BIOS y la RAM de la placa base?

Author: Paul Sonier, 2011-07-28

3 answers

En arquitecturas más antiguas, los periféricos se accedían a través de un mecanismo separado para acceder a la memoria con instrucciones especiales de E/S. En x86, había (y todavía son!) "in "and" out " instructions for transferring bytes between the CPU and a peripheral. Los periféricos recibieron direcciones, por ejemplo 0x80 para el teclado. Simplificando mucho, hacer " in 0x80 "leería un byte del controlador de teclado al registro de CPU"AL".

En arquitecturas modernas, se accede a los periféricos de forma similar camino a la memoria: a través de direcciones de memoria mapeadas en un bus. No deberías pensar en un autobús como una forma de acceder a la memoria. Es más una forma de abordar periféricos individuales, de los cuales la memoria (RAM / DDR) es solo un tipo. Por ejemplo, es posible que tenga 2 GB de RAM en direcciones 0x00000000..0x7fffffff. Después de eso es posible que tenga una tarjeta gráfica en 0x80000000..0x80001fff. El controlador de bus (PCIe o lo que sea) sabe qué rangos de direcciones van a qué periférico.

La memoria es generalmente especial en que puede ser en caché, por lo que las lecturas/escrituras individuales en memoria tienden a no traducirse directamente a lecturas/escrituras individuales en los chips de RAM. Los periféricos están marcados como especiales-los accesos de CPU deben salir al periférico exactamente como está escrito en su programa.

El idioma con el que se habla con los periféricos es más o menos ad-hoc dependiendo del dispositivo. El tema general es que el periférico está mapeado en algún lugar de la memoria (por ejemplo, 0x80000000 para unos pocos KB como anteriormente), con bits individuales de estado y acciones controlado por diferentes palabras (generalmente 32 o 64 bits). Un ejemplo mítico de un puerto serie en 0x80000000:

  • Escriba la palabra 'A' de 32 bits a 0x80000000, poniendo en cola el carácter 'A' en su salida FIFO.
  • Escriba la palabra de 32 bits 0x1 a 0x80000004, que le dice al puerto serie que envíe su cola.

De nuevo, totalmente hecho solo por ejemplo, pero un puerto serie real (uart) no es tan diferente.

El problema es que en realidad no ver cualquiera de los sobre el diseño de memoria en un sistema operativo moderno, debido a la memoria virtual. Las direcciones anteriores se referirían como" direcciones de memoria física " (o direcciones de bus), las direcciones reales que salen al bus. En su lugar, la CPU ve las direcciones de memoria virtual. Los periféricos individuales deberán asignarse al espacio de direcciones virtual. Esto es un poco complicado de explicar y probablemente lo mejor en otra pregunta, pero el punto es que es poco probable que acceda a un periférico por su dirección física real en un sistema operativo moderno.

 35
Author: John Ripley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-28 00:57:13

La respuesta aceptada es correcta, por supuesto, pero tal vez DrStrangeLove pretendía abordar otra cosa o, al menos, la pregunta acomoda otras respuestas. De hecho, cuando alguien pregunta "¿Cómo se comunican los periféricos con la CPU a nivel de hardware?", Creo que la respuesta debería mencionar el papel de los módulos de E/S (como los adaptadores de E/S que todo el mundo conoce). Esto es importante enfatizar porque parte de la lógica requerida para hablar con los dispositivos de E/S está incrustada dentro del Módulos de E/S, disminuyendo la necesidad de atención de la CPU al realizar operaciones de E / S. Esto suena relevante para mí en el contexto de la pregunta porque pregunta sobre los aspectos de hardware de las operaciones de E/S, y los adaptadores son piezas de hardware que abstraen las intrínsecas de los dispositivos de E/S, ocultando sus complejidades de la CPU (y del sistema operativo también). Por ejemplo, los adaptadores de disco ocultan los aspectos de geometría de los discos, liberando a la CPU de ejecutar la lógica necesaria para girar placas, localizar un cilindro y esperar a que el sector correcto para pasar por debajo de las cabezas de lectura / escritura. Razonamientos similares se aplican a otros dispositivos como adaptadores de video, tarjetas de red, etc. En pocas palabras, sin los módulos de E/S, las tareas de E / S abrumarían a la CPU. Para citar a Stallings:

Un módulo de E/S funciona para permitir que el procesador vea una amplia gama de dispositivos de una manera sencilla. Hay un espectro de capacidades eso puede ser proporcionado. El módulo de E / S puede ocultar los detalles calendario, los formatos, y la electromecánica de un dispositivo externo para que el procesador puede funcionar en términos de simples comandos de lectura y escritura, y posiblemente abrir y cerrar comandos de archivo. En su forma más simple, la E / S el módulo todavía puede dejar gran parte del trabajo de controlar un dispositivo (e. g., rebobinar una cinta) visible para el procesador. Un módulo de E/S que asume la mayor parte de la carga de procesamiento detallada, presentando un alto nivel interfaz al procesador, se refiere generalmente como E / S canal o procesador de E/S. Un módulo de E/S que es bastante primitivo y requiere el control detallado generalmente se conoce como un controlador de E/S o dispositivo controlador. Los controladores de E/S se ven comúnmente en microordenadores, mientras que los canales de E / S se utilizan en los mainframes.

Además, como John Ripley dijo correctamente, hay un espacio de E/S que se mapea de la misma manera que la RAM. De hecho, los periféricos podrían mapearse directamente en el espacio de direcciones de memoria (que es conocido como MMIO , E/S mapeadas en memoria), o en un espacio de dirección separado (PMIO , E/S mapeadas por puertos, que también se llama "E/S aisladas" porque, a diferencia de MMIO, las direcciones de E/S están completamente separadas de las de la memoria RAM del equipo. Es por eso que tienes que usar las instrucciones in y out para comunicarte con dispositivos que usan PMIO).

Por lo anterior, MMIO y PMIO tratan los dispositivos de E/S como posiciones de memoria , que es la esencia de cómo el hardware se ocupa de las operaciones de E/S, pero vale la pena mencionar algunos detalles más aquí para obtener la rica carga conceptual involucrada en E/S. Dado que cada adaptador tiene un rango de direcciones limitado, debemos entender que tales posiciones de memoria funcionan como búferes de datos, lo que significa que solo tiene unos pocos bytes ("bloques de datos") para comunicarse con el dispositivo a la vez. Por esta razón, es común que la CPU NO use directamente los datos que lee desde esas posiciones de memoria: primero, los datos se leen desde Dispositivo de E / S a través de la dirección correspondiente, a continuación, estos datos se almacenan en la RAM y solo entonces la CPU puede usarlo. Para obtener eso, piense en un archivo binario grande que la CPU debe ejecutar: el adaptador de disco tiene un búfer limitado limitado por su espacio de direccionamiento de E / S (nota: no me refiero a los búferes internos del adaptador, sino a su espacio de direcciones visto por la CPU), por lo que el adaptador lee algunos datos del disco y advierte a la CPU cuando el búfer se llena interrumpe lo que sea que esté haciendo, lee el búfer, copia el contenido del búfer en la RAM y señala al adaptador que puede continuar trayendo más datos del disco. Este ciclo se repite hasta que el archivo binario esté completamente cargado en la RAM. A partir de ese momento, la operación de lectura se declara terminada y el archivo finalmente se puede ejecutar.

Este ciclo se llama E/S conducidas por interrupciones y ocurre totalmente en hardware( con algún soporte de SO para manejar las interrupciones), pero por favor tenga en cuenta que hay otras dos opciones para realizar operaciones de E/S. También es posible emplear el llamado PIO (Programmable I/O) donde en lugar de usar el mecanismo de interrupción, la CPU agrupa continuamente el controlador a través de un bucle hasta que se recopila toda la información requerida, bloque por bloque (cuando se recupera el último bloque, el bucle termina). Tanto la E/S impulsada por interrupciones como el PIO desperdician tiempo de CPU (particularmente este último) y han sido reemplazados hace mucho tiempo por el Acceso Directo a la Memoria (DMA), que permite que el dispositivo de E/S escriba (o lea) sus datos directamente a (o desde) la RAM según las instrucciones de la CPU. Debido a su naturaleza de agrupación, creo que PIO está completamente implementado en el software, pero podría estar equivocado en este punto. Tengo que señalar que, aunque DMA hizo que PIO y E/S impulsadas por interrupciones fueran obsoletas, no estoy seguro de que ambos estuvieran prohibidos en los arquitectos modernos.

 2
Author: Humberto Fioravante Ferro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-30 18:06:27

Eso depende de lo que quieras decir con "acceso directo". Un núcleo de CPU se comunica con la memoria principal (RAM) a través de un bus . (El núcleo puede tener acceso más directo a cantidades relativamente pequeñas de memoria (caché o registros), pero ese es un problema diferente.) La CPU también se comunica con periféricos a través de buses. Algunos tipos de buses de los que puede haber oído hablar son universal serial bus (USB; normalmente para dispositivos externos), PCI, front-side bus (un tipo de bus que conecta núcleos de CPU y memoria principal), o Serial - ATA (SATA; a menudo utilizado para dispositivos como discos duros).

ETA: Mencioné que en mi comentario a continuación que los controladores de dispositivo manejan la comunicación a nivel de hardware entre la CPU y el periférico. La mecánica real de la comunicación puede implicar el uso de porciones específicas del espacio de direcciones para transferir datos (E/S mapeadas en memoria), de modo que leer físicamente o escribir en un dispositivo parezca acceder a la memoria ordinaria. El controlador del dispositivo también se ocupa de cómo responderá una CPU a interrumpe desde un dispositivo.

 0
Author: Asher L.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-28 00:12:43