tabla sgt mip lenguaje instrucciones carga assembler almacenamiento memory operating-system mips computer-architecture tlb

memory - sgt - Prevención de ejecución de memoria MIPS



sgt mips (2)

Investigo un poco con la arquitectura MIPS y me preguntaba cómo se implementan los sistemas operativos con las instrucciones limitadas y la protección de memoria que ofrece mips. Me pregunto específicamente cómo un sistema operativo evitará que se ejecuten ciertos rangos de direcciones. Por ejemplo, ¿cómo podría un sistema operativo limitar la PC para operar en un rango particular? En otras palabras, ¿evitar algo como ejecutar desde la memoria asignada dinámicamente?

Lo primero que se me viene a la mente es con los TLB, pero los TLB solo ofrecen protección de escritura en memoria (y no se ejecutan).

No veo muy bien cómo podría ser manejado por el SO, porque eso implicaría que cada instrucción daría como resultado una excepción y luego MUCHOS ciclos se grabarían simplemente comprobando si la PC estaba en un rango de direcciones razonable.

Si alguien sabe, ¿cómo se hace típicamente? ¿Se maneja de alguna manera por el hardware durante la inicialización (por ejemplo, se le asigna un rango de direcciones y se aplica una excepción si está fuera de rango?)


Esto de hecho se hace con TLB. No Execute Bits (NX bits) se hizo popular hace solo unos años, por lo que los procesadores MIPS anteriores no lo admiten. La última versión de la arquitectura MIPS (Versión 3) y la Extensión específica de la aplicación SmartMIPS lo admiten como una función opcional bajo el nombre de XI (Inhibición de ejecución) .

Si tienes un chip sin esta función no tienes suerte. Como Alex ya dijo, no hay una manera simple de emular esta característica.


La mayoría de las comprobaciones de protección se realizan en hardware, por la propia CPU y no requieren mucha participación del lado del sistema operativo.

El sistema operativo configura algunas tablas especiales (tablas de páginas o descriptores de segmentos o algo así) donde los rangos de memoria tienen permisos de lectura, escritura, ejecución y usuario / núcleo asociados que la CPU luego almacena en caché internamente.

Luego, la CPU de cada instrucción verifica si los accesos a la memoria cumplen o no con los permisos establecidos por el sistema operativo y si todo está bien, continúa. Si hay un intento de violar esos permisos, la CPU genera una excepción (una forma de interrupción similar a las externas a los dispositivos de E / S de la CPU) que maneja el sistema operativo. En la mayoría de los casos, el sistema operativo simplemente finaliza la aplicación ofensiva cuando recibe dicha excepción.

En algunos otros casos, trata de manejarlos y hacer que el código aparentemente roto funcione. Uno de estos casos es el soporte para memoria virtual en disco. El sistema operativo marca una región como no presente / inaccesible cuando no está respaldada por la memoria física y sus datos están en algún lugar del disco. Cuando la aplicación intenta usar esa región, el sistema operativo detecta una excepción de la instrucción que intenta acceder a esta región de memoria, respalda la región con memoria física, la rellena con datos del disco, la marca como presente / accesible y reinicia el instrucción que ha causado la excepción. Cuando el sistema operativo tiene poca memoria, puede descargar datos de ciertos rangos al disco, marcar esos rangos como no representados / inaccesibles nuevamente y reclamar la memoria de esas regiones para otros fines.

También puede haber códigos específicos codificados por los rangos de memoria de la CPU inaccesibles para el software que se ejecuta fuera del núcleo del sistema operativo y la CPU puede hacer una verificación aquí también.

Este parece ser el caso para MIPS (de "Application Note 235 - Migración de MIPS a ARM") :

3.4.2 Protección de memoria MIPS ofrece protección de memoria solo en la medida descrita anteriormente, es decir, direcciones en los 2GB superiores del espacio de direcciones no están permitidas cuando está en modo de usuario. No es posible un régimen de protección de grano más fino.

Este documento enumera "MEM - error de página en obtención de datos, acceso a la memoria desalineada, violación de protección de memoria" entre las demás excepciones de MIPS.

Si una versión particular de la CPU MIPS no tiene más controles de protección detallados, solo pueden ser emulados por el sistema operativo y con un costo significativo. El sistema operativo necesitaría ejecutar instrucciones de código por instrucción o traducirlo a un código casi equivalente con direcciones insertadas y verificaciones de acceso y ejecutarlo en lugar del código original.