El mapeo generalmente se realiza con hardware dedicado en silicio, generalmente bajo los auspicios de la CPU. Veamos tus cuatro frases muy rápido:
- asignación de memoria
- Mapeo IO
- Memoria asignada IO
- puerto mapeado IO
Mi instinto dice que su uso de mapeo de memoria y mapeo IO proviene de los espacios de memoria dual del sistema basado en x86: los 64K de IO Space que están esencialmente en desuso, y luego el espacio de memoria mucho más grande, que think se extiende a los exabytes ahora con máquinas de 64 bits.
EDITAR: agregaré este párrafo a mi respuesta, adivinando que lo que estás preguntando es más centrado en el microcontrolador (PIC, AVR, etc.). Lo mencioné un poco para responder a tu pregunta número cuatro. Los mapas / direcciones aquí son básicamente arreglados por los arquitectos de chips, y generalmente hay un decodificador de direcciones / unidad de administración de memoria (no en el sentido estricto de MMU) que envía datos al lugar correcto en el bus interno. I.E., si escribe en un registro de control UART, afecta a los flip-flops que son físicamente responsables de esos bits, si lee desde una dirección SRAM, devuelve los datos directamente de eso.
De cualquier manera, el mapeo es la misma tarea general: tome una dirección específica y déle un significado / ruta especial a algún lugar. Por ejemplo, en una plataforma x86, la dirección de espacio de E / S 0x3F8 apunta al registro para el puerto serie en el sistema. Cuando escribe o lee desde esta dirección (outb () / inb ()), está cambiando físicamente el estado de 8 bits (implementado probablemente como SRAM o flip-flops) que contienen datos en ese puerto serie.
Del mismo modo, para las E / S asignadas en memoria, es posible que tenga un dispositivo PCI que solicite cierta cantidad de memoria. Podría diseñar un dispositivo donde, si escribe un byte en una dirección específica, cambie el estado de 8 LED: 0x00, todos apagados, 0xFF, todos encendidos. Su MMU (unidad de gestión de memoria) es responsable de reconocer que la dirección de memoria que escribió también está destinada a algo en el bus PCI.
No voy a sumergirme en la memoria virtual aquí: en los sistemas operativos modernos, generalmente, solo el código del kernel / código privilegiado tiene la oportunidad de leer / escribir directamente desde las direcciones de la memoria física. Hay capas de infraestructura / abstracción integradas para controlar este acceso para las aplicaciones de usuario. Podría leer en las tablas de páginas, por ejemplo.
Entonces, volvamos a sus preguntas -
1) ¿Cómo se supone que debo visualizar el mapeo?
Solo eso - un mapeo. Es un mapa que le indica cómo ir desde su inicio (una dirección, por ejemplo, 0xE0000000) al destino (tal vez un dispositivo PCI, tal vez una ubicación específica en la RAM física).
2) ¿Se realiza el mapeo en la RAM?
No. RAM física: por ejemplo, en el nivel más bajo, un condensador individual que representa un solo bit en la DRAM es uno de los muchos destinos que también se pueden asignar. Cada una de las direcciones de memoria no corresponde necesariamente a un bit físico almacenado en algún lugar.
Si tiene un procesador que tiene una dirección externa / bus de datos (o algún otro bus paralelo grande), entonces las lecturas / escrituras se traducirán directamente al tráfico en esa interfaz; la mayoría de la gente en estos días usará SPI / I2C / Otros protocolos serie, pero no era raro tener grandes sistemas embebidos donde las SRAM paralelas se conectaran mediante una interfaz paralela de 8 o 16 bits (AD0-AD15).
3) Si es así, ¿no es la memoria en sí misma? ¿Cómo sabe el procesador al respecto?
En los sistemas x86, la mayor parte de la administración de bajo nivel del mapa de memoria del sistema, que tiene más de 20 años de legado, se realiza mediante el firmware de la BIOS y luego la inicialización del sistema operativo.
4) ¿Se realiza este mapeo cuando enciendo el Controlador o lo realiza la persona / compañía que fabricó el controlador?
Hay asignaciones fijas en silicio (muy cierto para microcontroladores integrados), donde puede leer detenidamente la hoja de datos y obtener direcciones fijas para registros de control, periféricos, etc. Los arquitectos del chip diseñaron un mapa de memoria que tenía sentido para ellos. y generalmente deja provisiones para diferentes modelos con diferentes periféricos / cantidades de memoria (es decir, un modelo de 32 KB y 64 KB del mismo chip puede tener todos sus registros / periféricos en las mismas ubicaciones, y solo la dirección de memoria para la RAM es diferente).
Para sistemas más sofisticados donde las cosas pueden moverse (como PCI plug and play), la asignación de direcciones de memoria es dinámica y se ejecuta mediante software.