¿Cómo manejan los sistemas integrados el direccionamiento de la memoria virtual y física?

Me refiero a la página de Wikipedia sobre memoria virtual , el último párrafo en la sección Uso:

Los sistemas integrados y otros sistemas informáticos de propósito especial que requieren tiempos de respuesta muy rápidos y/o muy consistentes pueden optar por no utilizar la memoria virtual debido a la disminución del determinismo; Los sistemas de memoria virtual desencadenan trampas impredecibles que pueden producir retrasos no deseados e impredecibles en respuesta a la entrada, especialmente si la trampa requiere que los datos se lean en la memoria principal desde la memoria secundaria. El hardware para traducir direcciones virtuales a direcciones físicas generalmente requiere un área de chip significativa para implementar, y no todos los chips utilizados en sistemas integrados incluyen ese hardware, que es otra razón por la que algunos de esos sistemas no usan memoria virtual.

Sin embargo, por ejemplo, en CodeWarrior IDE (usado con MCU NXP) o STM32 Cube IDE (usado con MCU STM32), podemos ver monitores de memoria de memoria virtual, como este:

ingrese la descripción de la imagen aquí

¿Cómo manejan los microcontroladores el direccionamiento de memoria y la traducción de direcciones de memoria? ¿Qué es esta "área de chip significativa"?

Esa captura de pantalla dice "memoria", no "memoria virtual".
No hay "Memoria virtual" en su ejemplo, y creo que le resultará difícil encontrar un ejemplo de un microcontrolador que admita memoria virtual.
Sí, estudie los beneficios y características únicos que ofrece la memoria virtual y luego considere qué aplicaciones integradas requieren al menos una. Los que sí lo hacen, por lo general incluirán un kernel de algún tipo para administrarlo, que a menudo se encuentra como parte de un entorno de sistema operativo. Ninguna de mis aplicaciones integradas ha requerido ni siquiera una característica y la mayoría ha requerido específicamente que no use un sistema de memoria virtual. Pero ninguno de ellos ha requerido Linux o freeBSD, y escribí mi propio sistema operativo cuando la aplicación se beneficia de los hilos. Sin embargo, no detiene a otros.
No cometa el error de pensar que "sistema integrado" implica un microcontrolador. Los sistemas integrados más sofisticados pueden usar lo que es esencialmente una computadora de placa única que ejecuta un sistema operativo completo como Linux. Habiendo dicho eso, los microcontroladores recientes pueden tener una gestión de memoria sofisticada, como buses de datos e instrucciones separados con almacenamiento en caché. Esto no es lo mismo que la memoria virtual, pero las consecuencias pueden ser similares.

Respuestas (2)

El hardware para traducir direcciones virtuales a direcciones físicas generalmente requiere un área de chip significativa para implementar, y no todos los chips utilizados en sistemas integrados incluyen ese hardware, que es otra razón por la que algunos de esos sistemas no usan memoria virtual.

Esto se llama "MMU". Para ser claros, no está separado, si está presente, será parte del mismo troquel que el microcontrolador.

Generalmente, los sistemas Cortex-M no tienen MMU y Cortex-A sí.

Gracias Señor. ¿Y los sistemas Cortex-M (ya que no tienen MMU) tienen algún otro chip especial para traducir direcciones? ¿O no usan direccionamiento virtual en absoluto?
No creo que tengan otra traducción de direcciones.
El direccionamiento virtual requiere una MMU para asignar la memoria real al espacio de direcciones virtuales. Cortex M no utiliza direcciones virtuales ni direccionamiento. Todos los periféricos y la memoria tienen direcciones fijas.

El área significativa proviene de las tablas de páginas: esta es una matriz de direcciones, es decir, una porción significativa de memoria, que forma una tabla de búsqueda donde el HW (la MMU) busca la dirección física asignada a una dirección virtual (y se queja si la virtual la dirección no está asignada). Estas tablas de páginas son la mayor parte del área de MMU.

La queja se conoce como "falla de página" y es manejada por el sistema operativo que obtiene el contenido de la memoria virtual del disco en una página libre de memoria física. Esto puede implicar liberar algo de memoria física primero. Por lo general, implica encontrar la página más antigua ("usada menos recientemente" o LRU), guardarla en el disco, marcar su entrada en la tabla del buscapersonas como no asignada y luego marcar la nueva entrada en la tabla del buscapersonas con la dirección física recién liberada antes de cargar los nuevos datos.

Los pequeños sistemas integrados no tienen esta traducción; la dirección "virtual" ES la dirección física.

(¡A menudo no tienen un sistema operativo, ni tampoco un disco!)