Respuestas:
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.
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 .
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.