DEP forzado por hardware en diferentes CPUs

6

¿Hay alguna diferencia en la forma en que se implementa el hardware DEP en las CPU de diferentes fabricantes (Intel, AMD, nVidia, Texas, ...)?

¿Hay diferencias significativas en el funcionamiento de DEP del hardware en x86 y ARM?

    
pregunta StupidOne 20.08.2012 - 18:31
fuente

1 respuesta

8

Las CPU compatibles con x86 tienen un nombre adecuado: son compatibles entre sí. Esto significa que el mismo código de SO funcionará en todos ellos. Por lo tanto, desde el punto de vista del código que se ejecuta en el procesador (que incluye el propio sistema operativo), las cosas no varían (mucho) según la marca. Las cosas cambian según la generación : los sistemas más nuevos tienen el bit NX , mientras que los sistemas más antiguos deben confiar en trucos con registros de segmentos o bailes TLB / caché complicados (consulte esta respuesta para más detalles).

El concepto central es el mismo para todas las CPU modernas: el espacio de direcciones se divide en páginas de tamaño fijo (o, si se admiten diferentes tamaños de página, sus longitudes son todas múltiples de una longitud atómica dada, normalmente 4 u 8 kB) . Los derechos de acceso se aplican en la granularidad de una página: una página completa es legible y / o escribible y / o ejecutable.

En cuanto al hardware, los detalles sobre la implementación de la MMU pueden variar bastante, pero dentro de un marco bastante genérico : los derechos de acceso para cada página se almacenan en tablas (la dirección de una tabla maestra que se registra en un registro de CPU específico) y se almacenan en caché en una estructura dedicada ( TLB ) para un acceso más rápido. Tras cada acceso a la memoria, los derechos para la página de destino se cargan desde el TLB (el TLB se llena desde la RAM si es necesario) y se compara con el tipo de acceso. La CPU es consciente de qué tipo de acceso a memoria está haciendo (ya sea ejecución de código o lectura de datos o escritura de datos). La falta de soporte de hardware para DEP en una MMU x86 más antigua es una omisión de los diseñadores de Intel de esa época (alrededor de 1982 para el 80386); probablemente guardó una capa de transistores en alguna parte. El venerable 68000 de 1979 no incluía una MMU pero era lo suficientemente inteligente como para anunciar el tipo de acceso en sus conectores para cada acceso, y distinguió la ejecución del código de las lecturas de datos.

En la CPU ARM, los mismos conceptos están vigentes (aún son derechos de acceso de página), pero el formato de tabla MMU es diferente del de x86.

    
respondido por el Thomas Pornin 20.08.2012 - 19:25
fuente

Lea otras preguntas en las etiquetas