Saltar al contenido

¿Las CPU de varios núcleos comparten la MMU y las tablas de páginas?

Solución:

Eche un vistazo a este esquema. Esta es una vista de alto nivel de todo lo que hay en un solo núcleo en una CPU Corei7. La imagen ha sido tomada de Computer Systems: A Programmer’s Perspective, Bryant y Hallaron. Puede tener acceso a los diagramas aquí, sección 9.21.

Sistemas informáticos: la perspectiva de un programador, 2 / E (CS: APP2e) Randal E. Bryant y David R. O'Hallaron, Universidad Carnegie Mellon

TL; DR: hay una MMU separada por CPU, pero una MMU generalmente tiene varios NIVELES de tablas de páginas y estas pueden ser compartidas.

Por ejemplo, en un ARM el nivel superior (PGD o el nombre del directorio global de la página utilizado en Linux) cubre 1 MB de espacio de direcciones. En sistemas simples, puede mapear en secciones de 1 MB. Sin embargo, esto normalmente apunta a una tabla de segundo nivel (PTE o entrada de tabla de páginas).

Una forma de implementar múltiples CPU de manera eficiente es tener un nivel superior separado PGD por CPU. El código del sistema operativo y los datos serán consistentes entre los núcleos. Cada núcleo tendrá su propio TLB y caché L1; Las cachés L2 / L3 pueden ser compartidas o no. El mantenimiento de las cachés de datos / códigos depende de si son VIVT o VIPT, pero ese es un problema secundario y no debería afectar el uso de MMU y multi-core.

los proceso o la porción de usuario de las tablas de la página del segundo nivel sigue siendo la misma por proceso; de lo contrario, tendrían memoria diferente o necesitaría sincronizar tablas redundantes. Los núcleos individuales pueden tener diferentes conjuntos de tablas de página de segundo nivel (puntero de tabla de página de nivel superior diferente) cuando ejecutan procesos diferentes. Si es multiproceso y se ejecuta en dos CPU, entonces la tabla de nivel superior puede contener las mismas entradas de la tabla de página de segundo nivel para el proceso. De hecho, toda la tabla de páginas de nivel superior puede ser idéntica (pero con memoria diferente) cuando dos CPU ejecutan el mismo proceso. Si los datos locales de subprocesos se implementan con una MMU, una sola entrada podría diferir. Sin embargo, los datos locales de subprocesos generalmente se implementan de otras maneras debido a TLB y problemas de caché (vaciado / coherencia).

La siguiente imagen puede ayudar. Las entradas de CPU, PGD y PTE en el diagrama son una especie de punteros.

MMU de varias CPU

los Linea discontinua es la única diferencia entre ejecutar diferentes procesos y los mismos procesos (caso de subprocesos múltiples) con la MMU; es una alternativa a la línea continua que va desde la CPU2 PGD al proceso B PTE o la tabla de páginas de segundo nivel. El kernel es siempre una aplicación de CPU multiproceso.

Cuando se traduce una dirección virtual, diferentes partes de bits se indexan en cada tabla. Si una dirección virtual no está en el TLB, entonces la CPU debe hacer un recorrido por la tabla (y buscar una memoria de tabla diferente). Entonces, una sola lectura de una memoria de proceso daría como resultado tres accesos a la memoria (si el TLB no estuviera presente).

El permiso de acceso del código / datos del kernel es obviamente diferente. De hecho, probablemente habrá otros problemas como la memoria del dispositivo, etc. Sin embargo, creo que el diagrama debería dejar en claro cómo la MMU se las arregla para mantener igual la memoria de subprocesos múltiples.

Es muy posible que una entrada en la tabla del segundo nivel sea diferente por hilo. Sin embargo, esto incurriría en un costo al cambiar subprocesos en la misma CPU, por lo que normalmente se mapean los datos de todos los ‘locales de subprocesos’ y se usa alguna otra forma de seleccionar los datos. Normalmente, los datos locales del hilo se encuentran a través de un puntero o registro de índice (especial por CPU) que se mapea / apunta a datos dentro del ‘proceso’ o la memoria del usuario. Los ‘datos locales de subprocesos’ no están aislados de otros subprocesos, por lo que si tiene una sobrescritura de memoria en un subproceso, podría eliminar los datos de otros subprocesos.

Perdón por la respuesta anterior. Eliminó la respuesta.

TI PandaBoard se ejecuta en el procesador OMAP4430 Dual Cortex A9. Tiene una MMU por núcleo. Tiene 2 MMU para 2 núcleos.

http://forums.arm.com/index.php?/topic/15240-omap4430-panda-board-armcortex-a9-mp-core-mmu/

El hilo anterior proporciona la información.

Además, más información sobre ARM v7

Cada núcleo tiene las siguientes características:

  1. CPU ARM v7 a 600 MHz
  2. 32 KB de instrucción L1 CACHE con verificación de paridad
  3. 32 KB de CACHE de datos L1 con verificación de paridad
  4. FPU integrado para operaciones de punto flotante escalar de precisión de datos simples y dobles
  5. Unidad de gestión de memoria (MMU)
  6. Compatibilidad con conjuntos de instrucciones ARM, Thumb2 y Thumb2-EE
  7. Extensión de seguridad TrustZone ©
  8. Programe el componente Trace Macrocell y CoreSight © para depuración de software
  9. Interfaz JTAG
  10. Interfaz AMBA © 3 AXI de 64 bits
  11. Temporizador de 32 bits con preescalador de 8 bits
  12. Perro guardián interno (también funciona como temporizador)

La configuración de doble núcleo se completa con un conjunto común de componentes:

  1. Unidad de control de Snoop (SCU) para administrar la comunicación entre procesos, caché-2-caché y transferencia de memoria del sistema, coherencia de caché
  2. Unidad de control de interrupciones genérico (GIC) configurada para admitir 128 fuentes de interrupciones independientes con prioridad configurable por software y enrutamiento entre los dos núcleos
  3. Temporizador global de 64 bits con preescalador de 8 bits
  4. Puerto de coherencia del acelerador asíncrono (ACP)
  5. Soporte de paridad para detectar fallas de la memoria interna durante el tiempo de ejecución
  6. 512 KB de caché L2 asociativo unificado de 8 vías con soporte para verificación de paridad y ECC
  7. Controlador de caché L2 basado en PL310 IP lanzado por ARM
  8. Interfaz dual AMBA 3 AXI de 64 bits con posible filtrado en el segundo para usar un solo puerto para el acceso a la memoria DDR

Aunque todos estos son para ARM, proporcionará una idea general.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *