Memoria I I

5,547 views

Published on

Published in: Education, Technology
1 Comment
1 Like
Statistics
Notes
  • Gran trabajo, felicidades Ceciilia.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
5,547
On SlideShare
0
From Embeds
0
Number of Embeds
84
Actions
Shares
0
Downloads
195
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

Memoria I I

  1. 1. Sistemas de Memoria (II) Cecilia Hernández
  2. 2. Algunas preguntas Alternativas de diseño <ul><li>Cómo sabemos si está en cache? </li></ul><ul><li>Identificación del bloque </li></ul><ul><li>Dónde lo ponemos en cache? </li></ul><ul><li>U bicación del bloque </li></ul><ul><li>Qué ocurre si cache está llena y queremos traer algo nuevo? </li></ul><ul><li>Reemplazo del bloque </li></ul><ul><ul><li>Qué ocurre si queremos traer algo nuevo y el lugar donde queremos ponerlo ya está ocupado? estrategia de escritura </li></ul></ul>
  3. 3. Reemplazo de bloque <ul><li>Cache de traducción directa </li></ul><ul><ul><li>No hay elección: sólo una línea disponible </li></ul></ul><ul><li>Cache completamente asociativo </li></ul><ul><ul><li>Todas las líneas disponibles, elegir la mejor </li></ul></ul><ul><li>Cache asociativo por conjuntos </li></ul><ul><ul><li>Todas las líneas dentro del conjunto disponibles, elegir la mejor </li></ul></ul>
  4. 4. Elección de la línea a reemplazar <ul><li>Objetivo </li></ul><ul><ul><li>Reemplazar la línea que va a ser utilizada más lejos en el futuro </li></ul></ul><ul><li>Algoritmos de reemplazo </li></ul><ul><ul><li>Random: elegir línea al azar </li></ul></ul><ul><ul><li>LRU (least recently used): elegir línea menos recientemente utilizada </li></ul></ul>Asociatividad 2-way 4-way 8-way Ejemplo: Tasas de fallo medidas en un benchmark 1.12% 1.12% 1.13% 1.13% 1.17% 1.15% 256KB 1.5% 1.4% 1.7% 1.5% 2.0% 1.9% 64KB 5.0% 4.4% 5.3% 4.7% 5.7% 5.2% 16KB Random LRU Random LRU Random LRU Tamaño
  5. 5. Algunas preguntas Alternativas de diseño <ul><li>Cómo sabemos si está en cache? </li></ul><ul><li>Identificación del bloque </li></ul><ul><li>Dónde lo ponemos en cache? </li></ul><ul><li>U bicación del bloque </li></ul><ul><li>Qué ocurre si cache está llena y queremos traer algo nuevo? </li></ul><ul><li>Reemplazo del bloque </li></ul><ul><ul><li>Qué ocurre si queremos traer algo nuevo y el lugar donde queremos ponerlo ya está ocupado? estrategia de escritura </li></ul></ul>
  6. 6. Estrategia de escritura <ul><li>Escritura sincrónica (write-through) </li></ul><ul><ul><li>Escribir en el cache y en el nivel siguiente de la jerarquía </li></ul></ul><ul><li>Escritura asincrónica (write-back) </li></ul><ul><ul><li>Escribir sólo en el cache, escribir en nivel siguiente sólo al reemplazar el bloque </li></ul></ul><ul><ul><li>Requiere un bit de estado adicional en el cache para indicar que bloque ha sido modificado (bit M) </li></ul></ul><ul><li>Comparación </li></ul><ul><ul><li>WT </li></ul></ul><ul><ul><ul><li>Pro: fallo de lectura no produce escrituras </li></ul></ul></ul><ul><ul><ul><li>Con: alto costo de escritura a menos que se use un buffer </li></ul></ul></ul><ul><ul><ul><ul><li>Buffer siempre se usa para no esperar por DRAM </li></ul></ul></ul></ul><ul><ul><li>WB </li></ul></ul><ul><ul><ul><li>Pro: evitar escrituras múltiples del mismo bloque a DRAM </li></ul></ul></ul><ul><ul><ul><li>Con: Más complejo, fallo de lectura puede producir escritura </li></ul></ul></ul>
  7. 7. Buffer de escritura para write-through <ul><li>Buffer almacena escrituras pendientes </li></ul><ul><ul><li>Procesador escribe en buffer y cache </li></ul></ul><ul><ul><li>Controlador de memoria escribe contenidos del bloque a memoria </li></ul></ul><ul><li>Buffer de escritura es FIFO </li></ul><ul><ul><li>Número típico de entradas: 4-8 </li></ul></ul><ul><li>Nota: buffer de escritura puede producir conflicto RAW </li></ul><ul><ul><li>Fallo de lectura antes de que el buffer haya escrito en DRAM </li></ul></ul><ul><ul><li>Soluciones </li></ul></ul><ul><ul><ul><li>Esperar a buffer vacío antes de servir el fallo de lectura </li></ul></ul></ul><ul><ul><ul><li>Al servir fallo de lectura, verificar contenidos del buffer antes de ir a DRAM (búsqueda asociativa en buffer) </li></ul></ul></ul>CPU Cache Buffer de escritura DRAM
  8. 8. Política ante fallo de escritura <ul><li>¿Qué hacer si store produce un fallo? </li></ul><ul><ul><li>Traer bloque al cache (write-allocate) </li></ul></ul><ul><ul><ul><li>Evita fallo posterior si se lee del mismo bloque </li></ul></ul></ul><ul><ul><ul><li>Pero si no se lee, habríamos sacado del cache un bloque potencialmente importante </li></ul></ul></ul><ul><ul><li>Sólo escribir a DRAM (write-around) </li></ul></ul><ul><ul><ul><li>Ahorra espacio en el cache si el bloque escrito no se accesa de nuevo en un tiempo largo </li></ul></ul></ul>
  9. 9. Mejoras al desempeño <ul><li>¿Cómo mejorar el desempeño? </li></ul><ul><ul><li>Reducir tasa de fallos </li></ul></ul><ul><ul><li>Reducir penalidad de fallos </li></ul></ul><ul><ul><li>Reducir tiempo de acierto </li></ul></ul>Desempeño dado por Tiempo Promedio de Acceso a Memoria En inglés Average Memory Access Time AMAT = tasa de aciertos*tiempo de acierto + (1- tasa de fallos)*penalidad de fallo AMAT = (1 - tasa de fallos) * tiempo de acierto + tasa de fallos * penalidad de fallo
  10. 10. Mejoras al desempeño <ul><li>¿Cómo mejorar el desempeño? </li></ul><ul><ul><li>Reducir tasa de fallos </li></ul></ul><ul><ul><li>Reducir penalidad de fallos </li></ul></ul><ul><ul><li>Reducir tiempo de acierto </li></ul></ul>Desempeño dado por Tiempo Promedio de Acceso a Memoria En inglés Average Memory Access Time AMAT = tasa de aciertos*tiempo de acierto + (1- tasa de fallos)*penalidad de fallo AMAT = (1 - tasa de fallos ) * tiempo de acierto + tasa de fallos * penalidad de fallo
  11. 11. Reducir tasa de fallos (I) <ul><li>Explotar localidad espacial con bloques más grandes </li></ul><ul><ul><li>Pero incrementa penalidad de fallo </li></ul></ul><ul><ul><li>También incrementa fallos por conflicto (menos bloques) </li></ul></ul>Tamaño de bloque (bytes) Tasa de Fallos 0% 5% 10% 15% 20% 25% 16 32 64 128 256 1K 4K 16K 64K 256K
  12. 12. Reducir tasa de fallos (II) <ul><li>Aumentar asociatividad </li></ul><ul><ul><li>Regla 2:1 </li></ul></ul><ul><ul><ul><li>Tasa fallos cache directo tamaño N = tasa fallos cache APC de 2 vías tamaño N/2 </li></ul></ul></ul><ul><ul><li>Pero recordar que tiempo de acierto es mayor. </li></ul></ul>Conflict Cache Size (KB) Miss Rate per Type 0 0.02 0.04 0.06 0.08 0.1 0.12 0.14 1 2 4 8 16 32 64 128 1-way 2-way 4-way 8-way Capacity Compulsory
  13. 13. Reducir tasa de fallos (III) <ul><li>Cache de víctimas (victim cache) </li></ul><ul><ul><li>Pequeño buffer asociativo almacena bloques recientemente eliminados del cache </li></ul></ul><ul><ul><li>Reduce fallos por conflicto en cache directo manteniendo acceso rápido </li></ul></ul><ul><ul><li>Jouppi[1990]: cache de víctimas de 4 entradas elimina 20%-95% de fallos de conflicto en cache directo de 4KB </li></ul></ul><ul><ul><li>Utilizado en procesadores DEC Alpha y HP </li></ul></ul>Al siguiente nivel de jerarquía Datos Tags Tag + comp Tag + comp Tag + comp Tag + comp Línea datos Línea datos Línea datos Línea datos
  14. 14. Operación con Cache Víctima <ul><li>1. Acierto en L1, no se necesita accesar a cache víctima </li></ul><ul><li>2. Fallo en L1 por bloque en ubicación b, acierto en cache víctima en ubicación v, intercambiar contenido de b y v (toma un ciclo extra) </li></ul><ul><li>3. Fallo en L1, fallo en cache víctima, cargar bloque del siguiente nivel en jerarquía y ponerlo en L1, poner bloque que estaba en L1 en cache víctima, si cache víctima esta llena, reemplazar una de las entradas </li></ul><ul><li>Buffer víctima de 4 u 8 entradas para una cache mapeada directa funciona bien </li></ul>
  15. 15. Cache víctima Fallo en L1 Fallo CV CPU dirección b DRAM Cache CV (1) Fallo L1 (2) Fallo CV
  16. 16. Cache víctima Fallo en L1 Fallo CV CPU dirección b DRAM m Cache CV (3) Acierto DRAM Dato en bloque m
  17. 17. Cache víctima Fallo en L1 Fallo CV CPU dirección m DRAM m Cache CV (4) Copia bloque m En donde estaba b Y b en cache CV b
  18. 18. Cache víctima Fallo en L1, Acierto en CV CPU dirección b DRAM Cache CV Acierto En CV (2) Fallo en L1 (1) v
  19. 19. Reducir tasa de fallos (IV) <ul><li>Prefetch </li></ul><ul><ul><li>Traer bloques al cache antes de que el programa los requiera </li></ul></ul><ul><ul><li>Reduce fallos obligatorios (compulsory) </li></ul></ul><ul><ul><li>Útil cuando localidad espacial es muy buena (instrucciones y datos), pero requiere predicción de saltos </li></ul></ul><ul><ul><li>Cache de trazas (trace cache) </li></ul></ul><ul><ul><ul><li>Integrar prefetch y predicción: instrucciones en cache en orden de ejecución </li></ul></ul></ul><ul><ul><ul><li>Utilizado en arquitectura Netburst de Intel (Pentium 4) </li></ul></ul></ul><ul><ul><li>Acceso a datos (ayuda por software): Instrucciones “touch” </li></ul></ul><ul><ul><ul><li>Similar a load, pero indica al cache que dato se accesará pronto </li></ul></ul></ul><ul><ul><ul><li>Presentes en procesadores IBM Power PC </li></ul></ul></ul>
  20. 20. Mejoras al desempeño <ul><li>¿Cómo mejorar el desempeño? </li></ul><ul><ul><li>Reducir tasa de fallos </li></ul></ul><ul><ul><li>Reducir penalidad de fallos </li></ul></ul><ul><ul><li>Reducir tiempo de acierto </li></ul></ul>Desempeño dado por Tiempo Promedio de Acceso a Memoria En inglés Average Memory Access Time AMAT = tasa de aciertos*tiempo de acierto + (1- tasa de fallos)*penalidad de fallo AMAT = (1 - tasa de fallos) * tiempo de acierto + tasa de fallos * penalidad de fallo
  21. 21. Reducir penalidad de fallos (I) <ul><li>Mejorar desempeño de sistema de memoria principal (DRAM) </li></ul><ul><ul><li>Bus de acceso a memoria más rápido, más ancho </li></ul></ul><ul><ul><ul><li>Buses anchos tienen problemas de skew, preferible aumentar velocidad (ej. DDR, double-pumped Front Side Bus) </li></ul></ul></ul><ul><ul><ul><li>Pentium 4 utiliza un bus de 200MHz – 266MHz pero transfiere datos 4 veces por ciclo para un ancho de banda efectivo de 800MHz – 1066MHz (quad-pumped) </li></ul></ul></ul><ul><ul><li>Acceso por bloques entrelazado, paginado, sincrónico </li></ul></ul><ul><ul><ul><li>Usado en servidores (chipset intel Orion) por costo de implem. </li></ul></ul></ul><ul><li>En caso de fallo, traer al cache dato requerido primero, y resto del bloque después </li></ul><ul><ul><li>Latencia es alta de todas maneras </li></ul></ul><ul><ul><li>Útil sólo en bloques grandes </li></ul></ul><ul><ul><li>Localidad espacial: probablemente hay que esperar el siguiente dato de todas formas </li></ul></ul>
  22. 22. Reducir penalidad de fallo (II) <ul><li>Buffer de escritura </li></ul><ul><ul><li>Almacena escrituras a memoria pendientes </li></ul></ul><ul><ul><li>Fallo de lectura tiene prioridad sobre buffer de escritura para acceso a DRAM </li></ul></ul><ul><ul><li>Resolver conflictos RAW: buscar bloque en buffer de escritura antes de traer de DRAM </li></ul></ul><ul><li>Fallos sin bloqueo </li></ul><ul><ul><li>Permitir que procesador ejecute otras instrucciones mientras se resuelve el fallo </li></ul></ul><ul><ul><li>Ejecución desordenada de instrucciones </li></ul></ul><ul><ul><li>Útil en procesadores superescalares o multihebra </li></ul></ul><ul><ul><li>Problema: puede producirse otro fallo antes de resolver el primero </li></ul></ul><ul><ul><ul><li>Pentium 4 puede manejar hasta 4 fallos simultáneos </li></ul></ul></ul><ul><ul><ul><li>Múltiples bancos de memoria mejoran desempeño </li></ul></ul></ul>
  23. 23. Mejoras al desempeño <ul><li>¿Cómo mejorar el desempeño? </li></ul><ul><ul><li>Reducir tasa de fallos </li></ul></ul><ul><ul><li>Reducir penalidad de fallos </li></ul></ul><ul><ul><li>Reducir tiempo de acierto </li></ul></ul>Desempeño dado por Tiempo Promedio de Acceso a Memoria En inglés Average Memory Access Time AMAT = tasa de aciertos*tiempo de acierto + (1- tasa de fallos)*penalidad de fallo AMAT = (1 - tasa de fallos) * tiempo de acierto + tasa de fallos * penalidad de fallo
  24. 24. Reducir tiempo de acierto <ul><li>Parámetro crítico para L1 </li></ul><ul><li>Utilizar L1 directo + cache de víctimas o L2 </li></ul><ul><li>Segmentar (pipeline) acceso a L1 </li></ul><ul><ul><li>Etapa 1: determinar hit/miss </li></ul></ul><ul><ul><li>Etapa 2: transferir dato a CPU </li></ul></ul><ul><li>Tratar conflictos estructurales por acceso a L1 </li></ul><ul><ul><li>Cache unificado: Un cache L1 para datos e instrucciones </li></ul></ul><ul><ul><ul><li>Ventaja: mejor tasa de acierto </li></ul></ul></ul><ul><ul><ul><li>Desventaja: conflictos estructurales (stalls) </li></ul></ul></ul><ul><ul><li>Arquitectura Harvard: Dos cache L1 independientes para datos e instrucciones </li></ul></ul><ul><ul><ul><li>Ventaja: elimina conflictos estructurales </li></ul></ul></ul><ul><ul><ul><li>Desventaja: división del cache aumenta tasa de fallos </li></ul></ul></ul><ul><ul><li>Hoy procesadores comerciales utilizan arquitectura Harvard </li></ul></ul><ul><ul><li>Cache L2 típicamente unificado </li></ul></ul>
  25. 25. Arquitectura Harvard versus unificada <ul><li>Ejemplo </li></ul><ul><ul><li>Unificada: 32KB (tasa fallo 1.99%) </li></ul></ul><ul><ul><li>Harvard: 16KB inst (tasa fallo 0.64%), 16 KB datos (tasa fallo 6.47%) </li></ul></ul><ul><li>¿Cuál es mejor? Ignorar L2 </li></ul><ul><ul><li>Asumir 33% load/store, tpo. acierto: 1 ciclo, penalidad fallo: 50 ciclos </li></ul></ul>CPU I-Cache L1 CPU Cache L1 Unificada Cache L2 Unificada D-Cache L1 Cache L2 Unificada Unificada Arquitectura Harvard AMAT = [AMAT fetch + 0.33*AMAT datos ]/1.33 AMAT (Harvard) = [(0.9936*1 + 0.0064*50) + 0.33*(0.9353*1 + 0.0647*50)]/1.33 AMAT (Harvard) = 2.022 ciclos AMAT (Unificada) = [(0.9801*1 + 0.0199*50) + 0.33*(1 + 0.9801*1 + 0.0199*50)]/1.33 AMAT (Harvard) = 2.223 ciclos
  26. 26. Limitaciones de memoria principal <ul><li>Cache acorta brecha entre velocidad de CPU y memoria principal (DRAM) </li></ul><ul><ul><li>¿Cuáles son las limitaciones de la memoria principal? </li></ul></ul><ul><li>Tamaño </li></ul><ul><ul><li>Programas poseen espacio de direcciones de 32 o 64 bits (registros de direcciones) </li></ul></ul><ul><ul><li>Con 32 bits de direcciones, cada programa puede accesar 4GB de memoria </li></ul></ul><ul><ul><li>20 programas en ejecución (procesos): ¡80 GB de memoria principal! </li></ul></ul><ul><ul><li>DRAM demasiado cara, disco demasiado lento </li></ul></ul><ul><ul><li>Pero programas no utilizan realmente todo el espacio disponible </li></ul></ul><ul><li>Reubicación </li></ul><ul><ul><li>Procesos pueden residir en cualquier parte de la memoria </li></ul></ul><ul><ul><li>Pero programador/compilador no sabe dónde van a ejecutarse </li></ul></ul><ul><ul><li>¿Cómo determinar las direcciones de memoria? </li></ul></ul><ul><li>Protección </li></ul><ul><ul><li>Procesos podrían acceder a datos de otros programas en ejecución </li></ul></ul><ul><ul><li>O a datos del sistema operativo </li></ul></ul><ul><ul><li>Vulnerabilidad de seguridad </li></ul></ul><ul><li>Solución: memoria virtual </li></ul>
  27. 27. Memoria virtual <ul><li>Procesos generan direcciones de memoria virtuales </li></ul><ul><ul><li>Ej. lw $t4, 128($t7) #[$t7+128] es una dirección virtual </li></ul></ul><ul><li>Memoria principal (DRAM) actúa como cache del disco </li></ul><ul><li>Unidad de manejo de memoria ( MMU ) examina dirección virtual y determina si dato reside actualmente en DRAM </li></ul><ul><ul><li>Sí: MMU genera dirección real (dirección en DRAM) </li></ul></ul><ul><ul><li>No: MMU determina ubicación en disco del dato y provoca excepción </li></ul></ul><ul><li>MMU además provee protecciones </li></ul><ul><ul><li>Direcciones de memoria sólo para lectura, ejecución, sistema operativo </li></ul></ul><ul><ul><li>Espacios de memoria real separados para diferentes usuarios </li></ul></ul>
  28. 28. Memoria Virtual <ul><li>DRAM cache de disco </li></ul><ul><li>Espacio virtual y físico de direcciones </li></ul>Espacio físico de direcciones Espacio virtual de direcciones Disco Control Datapath Memoria Secundaria (Disco) Procesador Registros Memoria Principal (DRAM) Cache L2 Datos, Inst. ~1 ~10,000,000 Velocidad (ciclos): ~1-5 ~100 ~100- 1000 40-400G Tamaño (bytes): ~32K ~512M-4G Cache L1 Inst Cache L1 Datos ~5-12 ~32K
  29. 29. Ventajas de memoria virtual <ul><li>Traducción </li></ul><ul><ul><li>Memoria virtual lineal para cada proceso, páginas desordenadas en memoria principal </li></ul></ul><ul><ul><li>Facilita múltiples procesos concurrentes en ejecución </li></ul></ul><ul><ul><li>Procesos ocupan sólo una fracción del espacio virtual disponible (conjunto de trabajo: working set) </li></ul></ul><ul><li>Protección </li></ul><ul><ul><li>Un proceso no puede corromper el espacio de memoria de otro </li></ul></ul><ul><ul><li>Asignar roles distintos a diferentes páginas (código, datos, sistema operativo) </li></ul></ul><ul><ul><li>Protección de datos del sistema operativo </li></ul></ul><ul><li>Compartir datos entre procesos </li></ul><ul><ul><li>Direcciones virtuales de dos procesos pueden ser traducidas al mismo marco de página en memoria física. </li></ul></ul>
  30. 30. Memoria virtual versus cache <ul><li>Nomenclatura </li></ul><ul><ul><li>Cache: bloque o línea; MV: página, marcos de página </li></ul></ul><ul><li>Principal diferencia: penalidad de fallo </li></ul><ul><ul><li>Cache: tpo. acceso DRAM: ~100ns (~100 ciclos) </li></ul></ul><ul><ul><li>MV: tpo. acceso disco: ~10ms (~10.000.000 ciclos!) </li></ul></ul><ul><li>Consecuencias </li></ul><ul><ul><li>Minimizar fallos: ubicación de páginas completamente asociativa </li></ul></ul><ul><ul><li>Política de escritura asincrónica (write-back) </li></ul></ul><ul><ul><li>Páginas grandes: 4KB – 16MB </li></ul></ul><ul><ul><ul><li>Disco tiene alta latencia pero mejor ancho de banda: bajo costo incremental de accesar bloques más grandes </li></ul></ul></ul><ul><ul><li>Traducción de direcciones por hardware, manejo de fallos por software </li></ul></ul><ul><ul><ul><li>Sistema operativo ordena acceso a disco e implementa algoritmo de reemplazo </li></ul></ul></ul><ul><ul><li>Penalidad de fallo demasiado alta para esperar: entregar CPU a otro proceso (o hebra) hasta que página esté en memoria </li></ul></ul>
  31. 31. Implementación de Memoria Virtual <ul><li>Paginación </li></ul><ul><ul><li>DRAM dividida en porciones iguales denominados marcos de páginas </li></ul></ul><ul><ul><li>En MV denominadas páginas o página virtual </li></ul></ul><ul><ul><li>Usa tabla de página traducción de direcciones </li></ul></ul>Espacio físico de direcciones Espacio virtual de direcciones Disco página Marco página
  32. 32. Tabla de páginas <ul><li>Traducción de direcciones utiliza tabla de páginas en memoria </li></ul><ul><ul><li>Dirección virtual (menos offset) utilizada como índice en tabla </li></ul></ul><ul><ul><li>Registro especializado contiene dirección de inicio de tabla en memoria (por proceso) </li></ul></ul><ul><ul><li>Entrada en la tabla (PTE: Page Table Entry) </li></ul></ul><ul><ul><ul><li>Bit presente/ausente o válido </li></ul></ul></ul><ul><ul><ul><li>Bit de modificación </li></ul></ul></ul><ul><ul><ul><li>Bits de protección </li></ul></ul></ul><ul><ul><ul><li>Dirección de marco real o bloque de disco </li></ul></ul></ul>Página virtual offset V Marco/Bloque M Prot. Dir. Virtual Tabla Pág. Dir. Base V Prot. Marco Pág. Virtual offset 10 Marco real offset 10 Dir. Física
  33. 33. Costo de traducción de un nivel <ul><li>Tabla de páginas de un nivel: una entrada (PTE) por página virtual </li></ul><ul><ul><li>Una tabla de páginas por proceso </li></ul></ul><ul><li>Tamaño de tabla </li></ul><ul><ul><li>Asumir PTE de 4 bytes </li></ul></ul><ul><ul><li>Ej. Página de 4KB, espacio de direcciones de 32 bits </li></ul></ul><ul><ul><ul><li># páginas virtuales = 2 32 /2 12 = 2 20 </li></ul></ul></ul><ul><ul><ul><li>Tamaño tabla = 2 20 * 4 = 4MB por proceso </li></ul></ul></ul><ul><ul><li>Ej. Página de 4KB, espacio de direcciones de 64 bits </li></ul></ul><ul><ul><ul><li># páginas virtuales = 2 64 /2 12 = 2 52 </li></ul></ul></ul><ul><ul><ul><li>Tamaño tabla = 2 52 * 4 = Más de 16.000.000GB por proceso!! </li></ul></ul></ul><ul><li>Tablas de páginas de un nivel demasiado grandes </li></ul><ul><ul><li>Además, un gran porcentaje de las entradas nunca se accesan </li></ul></ul><ul><ul><li>Impráctico mantener tabla completa en memoria </li></ul></ul>
  34. 34. Ilustración con tablas de páginas Programa A Programa B Memoria física V.p.0 V.p.0 V.p.1 V.p.1 V.p.2 V.p.2 V.p.3 V.p.n V.p.q Frame 0 Frame 1 Frame 2 Frame m 1 1 0 1 2 m 0 Tabla página Programa A Bit válido Tabla Página Programa B 0 1 1 1 0
  35. 35. Traducción de dos niveles <ul><li>Dos niveles de tablas </li></ul><ul><li>Tabla de nivel 1 </li></ul><ul><ul><li>PTE indica ubicación de tabla de nivel 2 </li></ul></ul><ul><ul><li>Siempre en memoria </li></ul></ul><ul><li>Tablas de nivel 2 </li></ul><ul><ul><li>PTE indica marco real, protecciones, etc. </li></ul></ul><ul><ul><li>Pueden ser paginadas a disco </li></ul></ul><ul><li>Utilizado por mayoría de microprocesadores comerciales (ej. Intel) </li></ul>Dirección virtual de 32 bits 4 bytes 4 bytes 4KB Tabla N1 Tablas N2 Páginas memoria Índice PTE1 offset Índice PTE2 10 10 12 Tabla Nivel 1: 1K PTE Espacio total Tabla N1: 4KB Tabla Nivel 2: 1K PTE  4KB Espacio total Tabla N2: 1K * 4KB = 4MB
  36. 36. Desventajas Tablas de Páginas <ul><li>Típicamente una o múltiples tablas por proceso. </li></ul><ul><ul><ul><li>Caro por uso de memoria sólo para traducción </li></ul></ul></ul><ul><li>Otras alternativas para mejorar uso de memoria </li></ul><ul><ul><li>Tabla de páginas invertidas </li></ul></ul><ul><ul><li>Tablas de páginas usando hashing </li></ul></ul><ul><ul><li>Procesadores como IBM System 38, UltraSparc y PowerPC usan este tipo de implementación </li></ul></ul><ul><ul><li>No las veremos en este curso </li></ul></ul>
  37. 37. Tabla de páginas invertida <ul><li>Sólo mantener PTEs de páginas presentes en memoria física </li></ul><ul><ul><li>Tabla invertida organizada como tabla hash en memoria principal </li></ul></ul><ul><ul><ul><li>Buscar asociativamente por número de página virtual </li></ul></ul></ul><ul><ul><ul><li>Si está presente en tabla, extraer marco de página y protecciones </li></ul></ul></ul><ul><ul><ul><li>Si no está presente en tabla, corresponde a un fallo de página </li></ul></ul></ul><ul><ul><li>Utilizado por IBM System 38 (AS 400), UltraSparc, PowerPC </li></ul></ul>Pag. V Tabla hash Pág. Virtual = Marco, etc Acierto/fallo Tabla de páginas invertida
  38. 38. Tiempo de traducción de direcciones <ul><li>Necesario traducir dirección en cada acceso a memoria </li></ul><ul><ul><li>Uno o dos accesos más a memoria </li></ul></ul><ul><ul><li>Posible fallo de página </li></ul></ul><ul><ul><li>Todo esto antes de ir al cache a ver si el dato está ahí </li></ul></ul><ul><li>Solución </li></ul><ul><ul><li>Cache de traducciones </li></ul></ul><ul><ul><li>También llamado TLB (Translation Lookaside Buffer) </li></ul></ul><ul><ul><ul><li>Completamente asociativo </li></ul></ul></ul>CPU MMU Cache Mem. Principal VA PA miss hit dato
  39. 39. TLB <ul><li>Almacena traducciones de página más recientes </li></ul><ul><ul><li>Cache de traducciones </li></ul></ul><ul><li>Implementado como pequeña memoria asociativa </li></ul><ul><ul><li>Funciona bien porque localidad de traducciones es tremendamente alta (página de 4KB – 16MB  muchos accesos a la misma página) </li></ul></ul><ul><ul><li>Basta con ~64 entradas </li></ul></ul><ul><ul><li>Reemplazo por hardware o software </li></ul></ul>TLB Tabla Pág marco p.v. Dir. física Espacio físico de direcciones Espacio virtual de direcciones Disco 2 2 0 5 2 0 1 3 Dir. virtual p.v. off marco off
  40. 40. Cache en espacio de direcciones reales <ul><li>Necesario traducir dirección antes de accesar el cache </li></ul><ul><li>Acceso simultáneo a TLB y cache </li></ul><ul><ul><li>Reducir tiempo de acceso a dato en memoria </li></ul></ul><ul><ul><li>Sólo posible si índice de acceso a cache es parte del “offset” de la dirección virtual </li></ul></ul><ul><ul><li>TLB provee marco de página (tag para el cache) </li></ul></ul>TLB Cache 1K líneas 10 2 00 4 bytes índice 1 K Pág. virtual offset 20 búsqueda asociativa 64 Hit/ Miss Tag Dato = marco Cache directo, bloque de 4 bytes Hit / Miss
  41. 41. TLB Offset Número página virtual tag Número marco v d prot Copia de PTE Dirección De CPU Offset
  42. 42. Memoria Virtual y Caches
  43. 43. Cache en espacio virtual de direcciones datos CPU MMU Cache Memoria principal P.V. hit Marco <ul><li>Cache trabaja con direcciones virtuales, no físicas </li></ul><ul><ul><li>No es necesario traducir antes de accesar cache </li></ul></ul><ul><ul><li>Sólo traducir en caso de fallo en el cache </li></ul></ul><ul><li>Problemas </li></ul><ul><ul><li>Necesario vaciar el cache al entregar CPU a otro proceso, o incluir identificador de proceso/usuario en cache </li></ul></ul><ul><ul><li>¿Qué pasa con páginas de memoria física compartidas? </li></ul></ul><ul><ul><ul><li>Misma página real, diferentes páginas virtuales </li></ul></ul></ul><ul><ul><ul><li>¿Cómo mantener memoria consistente? </li></ul></ul></ul>
  44. 44. Segmentación <ul><li>Problemas con espacios de memoria virtual planos </li></ul><ul><ul><li>Utilización de espacio plano de 32/64 bits no es completa </li></ul></ul><ul><ul><li>Diferentes áreas de memoria necesitan diferentes protecciones (ej. código, datos, stack, heap, sistema operativo) </li></ul></ul><ul><li>Segmentación </li></ul><ul><ul><li>Dividir espacio de direcciones en segmentos </li></ul></ul><ul><ul><li>Cada segmento tiene asociado una posición en memoria real, un tamaño y protecciones </li></ul></ul><ul><ul><li>Programas pueden compartir segmentos con acceso controlado </li></ul></ul><ul><ul><li>No confundir con segmentación (pipelining) </li></ul></ul>código datos stack constantes Espacio de memoria plano Espacio de memoria segmentado Sólo ejecución Lectura/escritura Sólo lectura Lectura/escritura
  45. 45. Implementación de segmentación <ul><li>Unidad de manejo de memoria (MMU) traduce dirección a espacio plano y verifica permisos de acceso y tamaño del segmento </li></ul>
  46. 46. Protecciones de segmento <ul><li>Descriptor de segmento (entrada en tabla de segmentos) contiene protecciones, dirección base del segmento y tamaño </li></ul><ul><ul><li>Ej. Procesadores Intel </li></ul></ul>
  47. 47. Segmentación + paginación <ul><li>Cada segmento tratado como espacio de memoria virtual paginado </li></ul>
  48. 48. Links <ul><li>Simulador de Memoria Virtual </li></ul><ul><ul><li>http:// www.ecs.umass.edu/ece/koren/architecture/Vmemory/try.html </li></ul></ul>

×