2012-01-24 12 views
8

¿Existe una guía decente que explique cómo utilizar las tablas TLB (Translation Lookaside Buffers) en un núcleo ARM1176JZF-S?ARM11 Uso de la traducción Lookaside Buffer (TLB)?

Después de revisar la documentación técnica de esa plataforma ARM, todavía no tengo idea de qué es una TLB o qué aspecto tiene. Por lo que yo entiendo, cada entrada de TLB asigna una página virtual a una página física, lo que permite reasignar y controlar los permisos de memoria.

Aparte de eso, no tengo absolutamente ninguna pista sobre cómo usarlos.

  • ¿Qué estructura tiene una entrada TLB? ¿Cómo creo nuevas entradas?
  • ¿Cómo manejo VM en los cambios de contexto para subprocesos de espacio de usuario? ¿Cómo me aseguro de que esos subprocesos solo puedan acceder a páginas específicas asignadas a sus procesos principales (hacer cumplir la protección de memoria)? ¿Guardo el estado de TLB para cada contexto?
  • ¿Por qué hay dos TLB? ¿Para qué puedo usar MicroTLB si solo puede tener 10 entradas? Sin duda, necesito más de 10.
  • Dice que una de las partes del TLB principal es "una matriz totalmente asociativa de ocho elementos, que se puede bloquear". ¿Que es eso? ¿Solo consigo tener 8 entradas para el TLB Principal?

Gracias de antemano. Estaré muy contento si alguien proporciona una explicación de lo que son los TLB. Actualmente estoy trabajando en un mapeador de memoria para mi kernel, y casi me encuentro en un callejón sin salida.

+0

¿Está escribiendo su propio sistema operativo? Si está utilizando un sistema operativo existente, ellos se encargarán de estos detalles por usted. Es posible que necesite configurar 1-2 TLB a mano durante el arranque, pero luego el núcleo del sistema operativo se encargará de ello. – gravitron

+0

@gravitron Estoy portando un kernel existente (Darwin) a la plataforma ARM. El kernel se basa en un conjunto de funciones HAL que resumen todas las interacciones con la plataforma (administración de memoria física, cambios de contexto, cachés, excepciones, etc.) –

+0

Una respuesta simple es que ** TLB ** es a ** MMU ** la tabla de páginas como ** memoria caché ** es ** memoria **; Es decir. el ** TLB ** es un caché ** MMU **. micro-TLB -> Caché L1, etc. Curiosamente, el comportamiento VIVT/PIPT, etc. de la caché probablemente afectará el funcionamiento de la TLB como se describe en * ninjalj *. –

Respuesta

15

El manual de referencia técnica para ARM1176JZF-S parece ser DDI 0301. Ese documento contiene todos los detalles específicos para ese núcleo de ARM específico.

Todavía no tengo ni idea de qué es un TLB o qué aspecto tiene. Por lo que yo entiendo, cada entrada de TLB asigna una página virtual a una página física, lo que permite reasignar y controlar los permisos de memoria.

Un TLB es un caché de la tabla de páginas. Algunos procesadores permiten el acceso directo a la TLB, mientras que no saben nada sobre las tablas de páginas (por ejemplo, MIPS), mientras que otros conocen las tablas de páginas, y usan TLB internamente que el programador en su mayoría no ve (por ejemplo, x86). En este caso, el TLB es administrado por hardware, y el programador del sistema solo debe preocuparse por hacer que los registros TTB (base de la tabla de traducción) apunten a la tabla de páginas e invalidar el TLB en lugares apropiados.

¿Qué estructura tiene una entrada TLB? ¿Cómo creo nuevas entradas?

Hecho por hardware. En una falla de TLB, la MMU camina por la tabla de páginas y llena el TLB desde allí.

¿Cómo manejo VM en los cambios de contexto para subprocesos de espacio de usuario?

Algunas plataformas tienen TLB que simplemente asignan direcciones virtuales a direcciones físicas (por ejemplo, x86). En estas plataformas, debe realizar un lavado completo de TLB en cada cambio de contexto. El mapa de otras plataformas (MIPS, este núcleo ARM específico) (ASID, dirección virtual) se empareja con las direcciones físicas. Un ASID es un identificador específico de la aplicación, es decir: un identificador para un proceso. La MMU utiliza un registro para saber qué ASID utilizar (creo que es el registro de ID de contexto en este caso). Dado que puede haber más procesos que ASID, en ocasiones puede necesitar reciclar un ASID (asignándolo a un proceso diferente) y realizar un lavado de TLB (para eso es válida la operación Invalidar TLB por ASID).

¿Por qué hay dos TLB? ¿Para qué puedo usar MicroTLB si solo puede tener 10 entradas? Sin duda, necesito más de 10.

Esto es exactamente por la misma razón que tiene pequeños cachés de nivel 1 separados para las instrucciones y los datos. Debido a que son cachés, no necesita necesita más de 10 (aunque tener más podría mejorar el rendimiento).

Dice que una de las partes del TLB principal es "una matriz totalmente asociativa de ocho elementos, que se puede bloquear". ¿Que es eso? ¿Solo consigo tener 8 entradas para el TLB Principal?

Algunas páginas de memoria (por ejemplo, algunas partes del kernel) se acceden con mucha frecuencia. Tiene sentido bloquearlos, para que no sean expulsados ​​del TLB. Además, en los sistemas en tiempo real, una falla de TLB o una falta de caché puede introducir cierta imprevisibilidad no deseada. Entonces, hay una opción para bloquear un número de entradas TLB. El TLB principal tiene más entradas, pero solo esas 8 son bloqueables.

+0

Excelente respuesta. Muchas gracias! –

+0

Gracias por los detalles qué ARM ACID ASID es. Parece similar a los dominios * anteriores * y * PID *. –

Cuestiones relacionadas