¿Qué significa exactamente cuando alguien dice “mapeo de memoria”, “Mapeo IO”, “IO mapeado en memoria” y “IO mapeado en puerto”?

5

Todas estas palabras se vuelven un poco confusas para mí ya que soy un novato. Entiendo que, básicamente, un microcontrolador es un procesador + memoria para almacenar datos (RAM) + memoria de datos O desde donde se ejecutan las instrucciones (ROM / Flash) + Periféricos.

  1. ¿Cómo se supone que debo visualizar el mapeo?
  2. ¿Se realizó el mapeo en la RAM?
  3. Si es así, ¿no es la memoria misma? ¿Cómo lo sabe el procesador?
  4. ¿Se realiza este mapeo cuando enciendo el Controlador o lo realiza la persona / Compañía que fabricó el controlador?

si es realmente una pregunta estúpida o amplia, házmelo saber. Intentaría limitarme.

    
pregunta MaNyYaCk

4 respuestas

6

Creo que estos términos se usan principalmente con microprocesadores, en lugar de microcontroladores.

Los dispositivos de E / S "mapeados en memoria" simplemente aparecen como ubicaciones de memoria normales, y pueden leerse o escribirse con cualquier instrucción que pueda leer o escribir en la memoria de datos normal. Cualquier microprocesador puede utilizar la E / S asignada en memoria.

Algunos microprocesadores (Intel 8085 y familiares) tienen un espacio de direcciones separado para el uso de dispositivos de E / S, que no forma parte del espacio de memoria normal, y un número limitado de instrucciones para leer o escribir en ese espacio de direcciones. Los dispositivos de E / S que usan este espacio serían "IO Mapped".

    
respondido por el Peter Bennett
6

Nadie parece haber dicho esto directamente, así que lo haré; básicamente significa que los dos tipos de mapeo tienen diferentes líneas de control. Considere la arquitectura Z80, que es muy querida (al menos por mí, heh), que tiene IO y memoria independientes.

Ambos tipos de mapeo usan la misma dirección (16 líneas) y el bus de datos (8 líneas). Para indicar a la lógica externa si está dirigiendo la memoria o IO, el procesador tiene dos pines; uno se llama MREQ y el otro es IORQ. Cuando el procesador baja el MREQ, la lógica externa se configura para reconocer que se trata de una dirección de memoria en el bus de direcciones y conecta la memoria al bus de datos después de decodificar el bus de direcciones, para lecturas o escrituras de datos (que están controladas por el RD). (lectura) y pines WR (escritura), uno de los cuales se agotará para la operación de lectura o escritura.

Si el procesador baja el IORQ, su lógica externa lo reconoce como una solicitud de IO y conecta algún dispositivo externo al bus de datos, después de descodificar el bus de direcciones. La memoria permanece desconectada. En la práctica, la mayoría de los chips de memoria decodifican la dirección y se conectan / desconectan mediante la lógica de control interno.

Si el procesador baja tanto MREQ como IORQ al mismo tiempo, se rompe. Tirar a la basura. Lo que se baja depende de instrucciones distintas en el conjunto de instrucciones utilizado por el programador.

Entonces, todo depende de si hay líneas de control en el procesador para distinguir más de un modo para los buses. La ventaja es que puede usar todo el espacio de direcciones para la memoria y aún así tener un medio para conectarse a dispositivos externos, que son libres de usar muchas ubicaciones de direcciones para facilitar la interconexión, ya que hay 64k de ellos disponibles (con 16 bits). autobús).

Una curiosidad curiosa con el Z80 es que su especificación afirma que solo usa 8 bits del bus de direcciones para IO, controlado por el registro C, pero que de hecho codifica los 16, usando el par BC (en la entrada y salida instrucciones). Lo que es bueno.

    
respondido por el Ian Bland
2

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.

    
respondido por el Krunal Desai
0

Este es un ejercicio interesante. Déjame ofrecer mi variante.

1) ¿Cómo se supone que debo visualizar el mapeo? , como un mapa de una calle, con unidades de almacenamiento (¡la memoria almacena datos!), donde cada unidad tiene una dirección de calle única. La memoria se puede organizar en "páginas". Esto es como el mismo mapa de calles con el mismo rango de direcciones, solo en una ciudad diferente con un código postal diferente (selector de página).

2) ¿Se realiza el mapeo en la RAM? : no está seguro de qué quiere decir "en el RAM", pero el mapeo se realiza por medio de una unidad lógica especial llamada "decodificador de direcciones" . Es como una oficina postal. La CPU lanza un número (dirección de almacenamiento), y el decodificador "abre" la "unidad de almacenamiento" correspondiente. La CPU puede almacenar algunos datos o puede recuperar datos almacenados.

3) Si es así, ¿no es la memoria en sí misma? - no, vea (2) más arriba. Alguien ("descodificador de direcciones") debe mirar el número (dirección solicitada), buscar el mapa y abrir la ubicación de almacenamiento adecuada ("puerta") para una operación de lectura / escritura.

3a) ¿Cómo lo sabe el procesador? , no lo sabe. El controlador de memoria solo entrega los datos de acuerdo con el "mapa". Pero el programador de software debe saber qué área está asignada y qué "unidad de almacenamiento" debe usar.

4) ¿Se realiza este mapeo cuando enciendo el Controlador o lo realiza la persona / compañía que lo fabricó? , depende. Los microcontroladores más pequeños tienen el mapa codificado en hardware. Los procesadores más grandes con memoria instalable por el usuario (como DIMM en PC) deben determinar las particularidades de las memorias instaladas y configurar el controlador de memoria (establecer rangos de decodificador de dirección y otros parámetros como tiempo de acceso, etc.) durante la inicialización por BIOS.

Tenga en cuenta que las memorias suelen entenderse como unidades de almacenamiento internas y, por lo general, no están expuestas al mundo externo (periférico). Los dispositivos periféricos interactúan con los procesadores internos a través de algunos registros de E / S dedicados, o GPIO: registros de entrada y salida de propósito general. Algunas arquitecturas de procesador tienen estos GPIO asignados en el mismo mapa de direcciones, a una "subdivisión" remota separada. Algunas arquitecturas tienen un espacio de E / S dedicado y tienen instrucciones de E / S dedicadas. La selección de diferentes GPIO sigue la misma idea: el decodificador de direcciones selecciona "puertas" predefinidas.

Hay otros espacios, como "espacio de configuración", que pueden tener un modo de acceso restringido especial. También se puede asignar en el espacio de direcciones de memoria.

    
respondido por el Ale..chenski

Lea otras preguntas en las etiquetas