He estado usando Linux (Ubuntu). Para comunicarse con dispositivos IO, se utilizan direcciones de puerto IO. Por ejemplo, 0x378 es una dirección para un puerto paralelo.
¿Es una dirección de puerto IO una dirección RAM real? Si no es así, ¿dónde reside?
Volviendo a la raíz de la PC IBM que utilizaba el microprocesador 8088, se utilizaron salas de direcciones separadas para RAM e IO. El procesador 8088 admitía direcciones de 20 bits al acceder a la RAM, pero solo utilizaba direcciones de 16 bits para acceder a E / S. Hubo un pin adicional en el procesador para indicar si se aborda RAM o IO.
Este procedimiento se denomina E / S mapeadas de puertos y todavía lo utilizan los procesadores X64 reales.
Entonces la dirección 0x378 para el puerto paralelo no presenta una dirección en la RAM.
Significa que la dirección está integrada en el procesador? El procesador ya sabe que 0x378 es para puerto paralelo y no para otros dispositivos.
Usr1
Antes de conectar y usar, las tarjetas de E / S tenían una dirección estática (como LPT :) o podían configurarse mediante puentes o interruptores DIP (para configurar si la tarjeta funciona como COM1: o COM2 :). Al procesador no le importaba, era el BIOS quien esperaba encontrar el puerto paralelo bajo 0x378.
user3767013
1
Imaginemos que una CPU tiene solo 4 pines (bits) para direccionar dispositivos. Significa que puede seleccionar hasta 16 dispositivos, desde 0000 hasta 1111 .
Ahora piense que las direcciones RAM son de 0000 a 0111 ( 8 direcciones, RAM muy limitada), solo deja otros 8 (de 1000 a 1111 ) para otros dispositivos (disco duro, puerto serie, puerto USB, Ethernet, Wifi, etc.).
Lo mismo sucede a gran escala en las CPU reales, tienen un espacio para abordar todo el hardware limitado por pines físicos en la CPU. Cuando se inicia la CPU, el BIOS reconoce el hardware instalado y asigna espacio de direcciones para cada uno de ellos.
En sistemas más antiguos, como DOS y Windows 3.1, generalmente se establecía manualmente mediante archivos de configuración como autoexec.bat y config.sys o mediante dip-switches y puentes directamente en el hardware. Los sistemas modernos lo hacen dinámicamente a través de mecanismos como PCI y PCI Express .
Aunque los dispositivos modernos relacionados con PCI usan E / S mapeadas en memoria para acceder al hardware, los dispositivos heredados como LPT: o COM: todavía se accede con E / S mapeadas por puerto.
user3767013
1
Esto no depende del sistema operativo, sino de la CPU. Y la respuesta varía entre las familias de CPU.
En x86 (AMD / Intel), la respuesta es NO. El ejemplo de puerto que da es típico para PC x86, y puede ver a partir de la longitud (16 bits) que no es una dirección RAM de 32 o 64 bits. El x86 tiene instrucciones especiales para comunicarse con los puertos IO, y estas instrucciones IO saben que las direcciones IO son de 16 bits.
En los chips ARM, que puede encontrar en su teléfono, las direcciones de puerto IO están en el mismo rango de direcciones que la RAM (pero obviamente en diferentes direcciones). Un chip ARM usa el mismo tipo de instrucciones para leer los puertos IO y la memoria, por lo que en ambos casos necesita una dirección de 32 bits.
Imaginemos que una CPU tiene solo 4 pines (bits) para direccionar dispositivos. Significa que puede seleccionar hasta 16 dispositivos, desde 0000 hasta 1111 .
Ahora piense que las direcciones RAM son de 0000 a 0111 ( 8 direcciones, RAM muy limitada), solo deja otros 8 (de 1000 a 1111 ) para otros dispositivos (disco duro, puerto serie, puerto USB, Ethernet, Wifi, etc.).
Lo mismo sucede a gran escala en las CPU reales, tienen un espacio para abordar todo el hardware limitado por pines físicos en la CPU. Cuando se inicia la CPU, el BIOS reconoce el hardware instalado y asigna espacio de direcciones para cada uno de ellos.
En sistemas más antiguos, como DOS y Windows 3.1, generalmente se establecía manualmente mediante archivos de configuración como autoexec.bat y config.sys o mediante dip-switches y puentes directamente en el hardware. Los sistemas modernos lo hacen dinámicamente a través de mecanismos como PCI y PCI Express .
fuente
Esto no depende del sistema operativo, sino de la CPU. Y la respuesta varía entre las familias de CPU.
En x86 (AMD / Intel), la respuesta es NO. El ejemplo de puerto que da es típico para PC x86, y puede ver a partir de la longitud (16 bits) que no es una dirección RAM de 32 o 64 bits. El x86 tiene instrucciones especiales para comunicarse con los puertos IO, y estas instrucciones IO saben que las direcciones IO son de 16 bits.
En los chips ARM, que puede encontrar en su teléfono, las direcciones de puerto IO están en el mismo rango de direcciones que la RAM (pero obviamente en diferentes direcciones). Un chip ARM usa el mismo tipo de instrucciones para leer los puertos IO y la memoria, por lo que en ambos casos necesita una dirección de 32 bits.
fuente