¿Por qué solo se puede acceder al registro de identificación de tamaño de caché en CPU ARM desde modos privilegiados?

3

¿Hay alguna decisión lógica detrás de esto? A mi entender, solo expone la misma información que la instrucción CPUID de x86. ¿Por qué solo está disponible para EL1? ¿Es esto de alguna manera más seguro, o quizás es simplemente "por encima de la seguridad"?

    
pregunta Matt

2 respuestas

2

Es para admitir la abstracción de las tareas de nivel de privilegio de usuario del hardware en el que se ejecutan.

Un sistema operativo puede ejecutarse en un nivel de privilegio más alto y acceder a los datos de tamaño de caché junto con otros datos sobre el hardware en el que se está ejecutando. Es responsabilidad de dicho sistema operativo tratar con el hardware y abstraerlo de los programas a nivel de usuario.

En la medida de lo posible, las tareas / procesos a nivel de usuario no deben conocer la CPU en la que se ejecutan. Esto evita la escritura de software en modo de usuario que está 'sintonizado' al hardware particular en el que se encuentra. Es posible que dicho software no se ejecute correctamente en una CPU diferente, lo que reduce la reutilización y la portabilidad. Los detalles, como el tamaño del caché, están por debajo del nivel de interés de muchos programas.

El sistema operativo generalmente permite que las tareas / procesos del usuario obtengan datos de hardware que los diseñadores del sistema operativo o del sistema consideran relevantes o útiles a través de la API (llamadas de función al sistema operativo).

    
respondido por el TonyM
0

Esto es un poco de especulación, pero: las arquitecturas ARM siempre se han diseñado teniendo en cuenta el multiprocesamiento; Incluso el Cortex-M0 más bajo tiene una gran cantidad de automatización de hardware cuando se trata de cambio de contexto, por ejemplo. Ahora, Cortex-M0 normalmente viene sin un caché.

Es completamente creíble que cuando se ponen en caché, los diseñadores ya pensaron en la posibilidad de que una implementación de un fabricante de silicio quisiera ocultar partes del caché al software ejecutado por el usuario, por lo que hay un problema lógico con decirle software del país de usuario qué tan grande es el caché, porque ese tamaño podría no aplicarse a ellos. Especialmente en Cortex-R, eso tendría mucho sentido: es posible que desee mantener parte de los datos de "nivel de SO" en un caché de latencia determinista, de modo que oculte ese caché del otro contexto. (Tenga en cuenta que esto es particularmente fácil en ARM: hay diferentes modos de pila controlados por un solo bit de registro, y su controlador de caché podría simplemente depender de eso para decidir si está bien rechazar un caché o no).

    
respondido por el Marcus Müller

Lea otras preguntas en las etiquetas