¿La falta de MMU hace alguna diferencia para las aplicaciones?

3

Linux genérico no se puede ejecutar en Cortex M3 porque Cortex M3 no tiene MMU . De acuerdo, hay versiones especiales de Linux que pueden ejecutarse allí.

El problema es que no entiendo cómo afecta esto al software de la aplicación.

Supongamos que tengo alguna aplicación, cualquier aplicación de usuario, como ejemplo, descomprimidor ZIP. Lo tengo en formato fuente y puedo compilarlo para ARM.

¿Se ejecutará en Cortex M3 que no tiene MMU? ¿Cómo puedo saber si la falta de MMU afectará algún programa dado?

    
pregunta sharptooth

3 respuestas

5

Hay varias cosas que te da una MMU:

Protección de la memoria: en un entorno de multitarea, esto evita que un programa defectuoso afecte a otro programa. Por ejemplo, si el programa con errores intenta escribir en una ubicación de memoria utilizando un puntero sin inicializar, podría sobrescribir el código o los datos del buen programa. La protección de la memoria evita esto poniendo restricciones en la memoria a la que puede acceder cada programa.

Traducción de memoria: La MMU realiza una "traducción de dirección de memoria lógica a física". La memoria normalmente se divide en bloques o páginas. A veces, especialmente después de que un sistema multitarea ha estado funcionando durante un tiempo, las páginas de la memoria física se pueden mezclar en trozos discontinuos. La MMU puede reorganizar estas páginas para crear trozos de memoria virtual que son contiguos. Piense en esto como desfragmentar un disco duro, pero con memoria y sin el tiempo de copia / movimiento de datos.

Memoria virtual: Los sistemas operativos más sofisticados permiten la memoria virtual, donde la cantidad aparente de La RAM en un sistema es más grande de lo que está físicamente instalado. La memoria extra generalmente se encuentra en el disco duro. Cuando un programa intenta acceder a una página de memoria que no se encuentra físicamente en la memoria principal, la MMU informa al sistema operativo. El sistema operativo carga esa página de "memoria" en la memoria principal. Si la memoria principal está llena, otra página de la memoria principal se transfiere al disco duro para dejar espacio. La MMU y el sistema operativo hacen esto bastante rápido, y de una manera que el programa que hace el acceso a la memoria ni siquiera sabe que está sucediendo. Esto era más importante en los días en que la memoria era pequeña y costosa, pero todavía se usa hoy en día para casi todos los sistemas operativos principales.

Las MMU son las más importantes para los sistemas multitarea. Para sistemas de tareas individuales y muchas aplicaciones integradas, el valor de una MMU es cuestionable.

    
respondido por el user3624
3

Cuando no hay una MMU, la parte del sistema operativo que carga los programas de la aplicación en la memoria debe poder "reubicar" el código de la aplicación para que se ejecute en la región de la memoria asignada. El compilador utilizado para la aplicación (o más específicamente, el enlazador) debe producir un archivo que el cargador del sistema operativo pueda entender para lograr esto.

Raramente se requieren cambios en el código fuente de la aplicación. Sin embargo, tenga en cuenta que los sistemas que no tienen MMU tampoco tienen memoria virtual, por lo que la aplicación y sus datos tendrán que encajar en la memoria física disponible, junto con el sistema operativo y otras aplicaciones que desee. tener corriendo simultáneamente.

    
respondido por el Dave Tweed
0

Según tengo entendido, debe compilar sus aplicaciones contra la arquitectura y el sistema operativo dados .

En el ejemplo de uCLinux, necesitaría un compilador compatible (como el que CodeSorcery ofrece aquí ) y entonces tendría que compilar las aplicaciones deseadas dirigidas a uCLinux y ARMv7-M. Mi sospecha es que al apuntar a uCLinux específicamente, está apuntando al código de administración de memoria inherente a uCLinux que le permite ejecutarse en microcontroladores / microprocesadores sin MMU.

    
respondido por el Toby Lawrence

Lea otras preguntas en las etiquetas