Memoria Soporte Hw

3,248 views

Published on

Memoria Soporte Hardware

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,248
On SlideShare
0
From Embeds
0
Number of Embeds
48
Actions
Shares
0
Downloads
97
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Memoria Soporte Hw

  1. 1. Soporte HW para Administración de Memoria Cecilia Hernández 2007-1
  2. 2. Paginación nmp npv dirección virtual dirección física Marco Pag 0 Marco Pag 1 Marco Pag 3 Marco Pag 4 Marco Pag N . . . offset offset nmp npv: Num. página virtual nmp: Num. marco página Marco Pág 2 Cada Proceso tiene su propia tabla de página
  3. 3. Fallos de Páginas <ul><li>Interrupción (por fallo de página) hace que SO se ejecute </li></ul><ul><ul><li>SO salva estado de proceso en ejecución y salta a rutina de interrupción para atender fallo </li></ul></ul><ul><ul><li>Encuentra un marco de lista libre o reemplazada de proceso (mismo u otro) </li></ul></ul><ul><ul><ul><li>Si se requiere E/S (acceso a disco) bloquea proceso y ejecuta otro </li></ul></ul></ul><ul><ul><li>Encuentra en disco página de proceso que necesita cargarse en memoria (*) </li></ul></ul><ul><ul><ul><li>Bloquea proceso y ejecuta otro entre tanto </li></ul></ul></ul><ul><ul><li>Cuando E/S terminan </li></ul></ul><ul><ul><ul><li>Setea entrada de página con marco, V=1, R = 1 y M =0 y bits protección apropiados </li></ul></ul></ul><ul><ul><li>Pone proceso en cola de listos </li></ul></ul>
  4. 4. Página de disco a memoria <ul><li>SO sabe id de proceso responsable de fallo de página y dirección virtual que produce fallo </li></ul><ul><li>Id de proceso almacenado en PCB </li></ul><ul><li>PCB proceso tiene puntero a tabla de página </li></ul><ul><li>Dirección virtual contiene número página virtual que produce fallo </li></ul><ul><li>SO tiene estructura de datos similar a tabla de página que contiene direcciones a disco de páginas </li></ul><ul><ul><li>Un arreglo con entradas por cada página en el espacio de direccionamiento </li></ul></ul>
  5. 5. Problemas con paginación <ul><li>Accesos a memoria para direccionar memoria física </li></ul><ul><ul><li>2 referencias a memoria por traducción </li></ul></ul><ul><ul><ul><li>A tabla de página y memoria </li></ul></ul></ul><ul><ul><li>Solución </li></ul></ul><ul><ul><ul><li>Usar cache para almacenar tabla de página (TLB: Translation lookaside buffer) </li></ul></ul></ul><ul><li>Requerimiento de memoria </li></ul><ul><ul><li>Una entrada por página virtual </li></ul></ul><ul><ul><li>En arquitectura de 32 bits y páginas de 4KB </li></ul></ul><ul><ul><ul><li>Número de páginas virtuales 2 20 = 1.048.576 de entradas en tabla de páginas </li></ul></ul></ul><ul><ul><ul><li>4 bytes por entrada = 4* 1.048.576 = 4MB </li></ul></ul></ul><ul><ul><ul><li>Cada proceso tiene su propia tabla de página </li></ul></ul></ul><ul><ul><ul><ul><li>Para 50 procesos 50 *4MB = 200 MB sólo para almacenar tablas de páginas </li></ul></ul></ul></ul><ul><ul><li>Solución </li></ul></ul><ul><ul><ul><li>Paginar tablas de páginas </li></ul></ul></ul>
  6. 6. Paginando tablas de página <ul><li>Observación </li></ul><ul><ul><li>Procesos en ejecución sólo necesitan una porción del espacio de direccionamiento en memoria </li></ul></ul><ul><ul><ul><li>Idea de conjunto de trabajo expuesta por proceso de acuerdo a localidad </li></ul></ul></ul><ul><ul><ul><li>Puede que proceso no use su espacio completo de direccionamiento 32/64 bits </li></ul></ul></ul><ul><ul><ul><li>Proceso puede que no referencie algunas partes de direccionamiento nunca </li></ul></ul></ul><ul><ul><ul><ul><li>Caso de rutinas de manejo de errores, si proceso no expone errores en tiempo de ejecución </li></ul></ul></ul></ul>
  7. 7. Tablas de páginas de 2 niveles nmp npv2 dirección virtual dirección física Marco Pag 0 Marco Pag 1 Marco Pag 3 Marco Pag 4 Marco Pag N . . . offset offset nmp npv1: Num. página virtual a nivel 1 npv2: Num. página virtual a nivel 2 nmp: Num. marco página Marco Pág 2 Cada Proceso tiene sus propias tablas de página npv1
  8. 8. Ejemplo <ul><li>Espacio de direccionamiento de 32 bits, páginas de 4KB, cada entrada en tabla de páginas de 4 bytes </li></ul><ul><ul><li>Bits para offset? </li></ul></ul><ul><ul><ul><li>Se necesitan 12 bits para direccionar 4KB </li></ul></ul></ul><ul><ul><ul><ul><li>2 12 = 4KB </li></ul></ul></ul></ul><ul><ul><li>Si tabla de primer nivel debe estar contenida en una página </li></ul></ul><ul><ul><ul><li>Distribución de campos en dirección virtual? </li></ul></ul></ul><ul><ul><ul><ul><li>4KB/4 = 1KB = 1024 entradas en tabla primer nivel  10 bits 2 10 = 1024 </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>1024 tablas de segundo nivel </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Si se usan los 32 bits, se requieren 32 -10 -12 = 10 bits para índices a tablas de segundo nivel, luego cada tabla de segundo nivel tambien es contenida en 1 página </li></ul></ul></ul></ul></ul>
  9. 9. Generalización <ul><li>En un principio arquitecturas usaban tablas de 1 nivel </li></ul><ul><li>VAX, P-II tablas de 2 niveles </li></ul><ul><li>SPARC usa tres niveles </li></ul><ul><li>68030 usa cuatro niveles </li></ul><ul><li>Tabla de nivel inferior debe contener información de marcos de página </li></ul>
  10. 10. Otros esquemas <ul><li>Tabla de página es tabla hash </li></ul><ul><ul><li>Esquema útil para espacios de direccionamiento grandes (64 bits) y evitar tabla de páginas muy grandes </li></ul></ul><ul><ul><li>Número de página se usa como hash </li></ul></ul><ul><ul><li>Para manejar colisiones </li></ul></ul><ul><ul><ul><li>Cada entrada en la tabla hash contiene una lista enlazada de elementos </li></ul></ul></ul><ul><ul><ul><li>Cada elemento en la lista enlazada contiene el número de página virtual, la entrada en la tabla de página y el puntero a siguiente elemento en la lista </li></ul></ul></ul>
  11. 11. Tabla de páginas como tabla hash m2 p dirección virtual dirección física Marco Pag 0 Marco Pag 1 Marco Pag 3 Marco Pag 4 Marco Pag N . . . offset offset p: Num. página virtual nmp: Num. marco página Marco Pág 2 Cada Proceso tiene su propia tabla de página a p m1 m2 hash
  12. 12. Otros esquemas <ul><li>Tabla de página invertida </li></ul><ul><ul><li>Para evitar usar mucha memoria para tablas de página </li></ul></ul><ul><ul><li>Tabla tiene una entrada por cada marco de página </li></ul></ul><ul><ul><li>Cada entrada contiene la página virtual almacenada en el marco de página </li></ul></ul><ul><ul><li>Sólo se necesita una tabla en el sistema </li></ul></ul><ul><ul><ul><li>No una por proceso </li></ul></ul></ul><ul><ul><li>Para identificar páginas virtuales de procesos cada entrada tambien tiene pid de proceso </li></ul></ul><ul><ul><ul><li>Luega cada entreda contiene pid y página virtual </li></ul></ul></ul><ul><ul><ul><li>PowerPC y UltraSPARC usan este esquema </li></ul></ul></ul><ul><ul><li>Uso de memoria menora para almacenar tabla de página, pero búsqueda puede ser lenta </li></ul></ul><ul><ul><ul><li>Para mejorar búsqueda se usa tabla de página usando hash </li></ul></ul></ul><ul><ul><ul><li>Luego, cada traducción requiere 2 referencias a memoria una para hash y otra para tabla invertida </li></ul></ul></ul>
  13. 13. Tabla de página invertida m p dirección virtual dirección física Marco Pag 0 Marco Pag 1 Marco Pag 3 Marco Pag 4 Marco Pag N . . . offset offset p Marco Pág 2 Una tabla de página en el SO para todos los procesos pid pid m búsqueda
  14. 14. Mejorando desempeño con TLB <ul><li>Tablas de páginas de un nivel </li></ul><ul><ul><li>2 referencias para acceso a información </li></ul></ul><ul><li>Tablas de páginas de 2 niveles </li></ul><ul><ul><li>3 referencias para acceso a información </li></ul></ul><ul><li>Como hacer para que sobrecarga de traducción sea mínima </li></ul><ul><ul><li>Usar TLB cache dentro de CPU </li></ul></ul><ul><ul><li>Traducción de dirección virtual a física en Hardware </li></ul></ul><ul><ul><li>TLB manejada por MMU (Memory Management Unit) </li></ul></ul><ul><ul><ul><li>MMU encargada de traducción virtual a física </li></ul></ul></ul>
  15. 15. TLB <ul><li>Traduce páginas virtuales a marcos </li></ul><ul><ul><li>Acceso para extraer marco de página </li></ul></ul><ul><ul><li>Puede realizarlo en un ciclo de reloj </li></ul></ul><ul><li>TLB implementada en HW </li></ul><ul><ul><li>Cache completamente asociativa (todas las entradas accesadas paralelamente) </li></ul></ul><ul><ul><li>Tags en cache son los números de páginas virtuales </li></ul></ul><ul><ul><li>Datos en cache son los marcos de página </li></ul></ul><ul><ul><ul><li>Marco de página mas offset dirección física </li></ul></ul></ul><ul><ul><ul><ul><li>MMU puede calcular dirección física </li></ul></ul></ul></ul><ul><li>TLB explota localidad </li></ul><ul><ul><li>Procesos contienen conjunto de paginas en conjunto de trabajo </li></ul></ul><ul><ul><ul><li>Típicamente TLB contiene entre 16-48 entradas (64-192 KB) </li></ul></ul></ul><ul><ul><li>Aciertos en TLB son muy importantes </li></ul></ul><ul><ul><ul><li>Costos de fallos hacen traducción virtual a física muy cara </li></ul></ul></ul>
  16. 16. Ilustración con TLB dirección virtual numero pag offset = Tag numero pag Datos numero marco numero marco offset numero marco dirección física TLB hit TLB miss numero pag Memoria Física TLB Tabla de página
  17. 17. Manejando TLBs <ul><li>La idea es que la traducción virtual a física sea realizada por la TLB la mayoría de las veces </li></ul><ul><ul><li>Típicamente aciertos son > 99% </li></ul></ul><ul><ul><li>En caso de fallo, MMU va a tabla de página y extrae marco para página virtual y lo pone en la TLB </li></ul></ul><ul><li>MMU </li></ul><ul><ul><li>Sabe donde están las tablas de página en memoria </li></ul></ul><ul><ul><ul><li>OS las mantiene y HW de MMU las accesa directamente </li></ul></ul></ul><ul><ul><li>Formato de tablas de página debe ser definido en HW </li></ul></ul><ul><ul><li>Así se hace en arquitecturas x86 </li></ul></ul><ul><li>TLB cargada por software </li></ul><ul><ul><li>Fallo en TLB capturado por SO, SO encuentra marco para página virtual y lo carga en TLB </li></ul></ul><ul><ul><li>Debe ser rápido, pero normalmente toma entre 20-200 ciclos de reloj </li></ul></ul><ul><ul><ul><li>ISA de la CPU tiene instrucciones para manipular la TLB </li></ul></ul></ul><ul><ul><ul><li>SO decide el formato de la tabla de página </li></ul></ul></ul><ul><ul><ul><li>MIPS3000 </li></ul></ul></ul>
  18. 18. Manejando TLBs <ul><li>SO debe asegurar consistencia entre TLB y tabla de página </li></ul><ul><ul><li>Cuando SO cambia bits de protección en entrada de tabla de página debe invalidar entrada en TLB si es que tambien esta ahí </li></ul></ul><ul><li>Qué ocurre en cambio de contexto? </li></ul><ul><ul><li>Cada proceso tiene sus propias tablas de página </li></ul></ul><ul><ul><li>Luego SO necesita invalidar todas las entradas en la TLB </li></ul></ul><ul><ul><ul><li>Una de las principales fuentes de sobrecarga en cambio de contexto </li></ul></ul></ul><ul><li>Cuando hay un fallo en TLB y TLB esta completamente ocupada hay que elegir una reemplazo, dado que se necesita cargar una nueva </li></ul><ul><ul><li>Luego, debe haber un algoritmo de reeplazo en la TLB </li></ul></ul><ul><ul><li>Normalmente LRU implementado en HW </li></ul></ul>
  19. 19. Implementaciones con paginación <ul><li>Memoria compartida </li></ul><ul><ul><li>Dos procesos pueden compartir memoria física </li></ul></ul><ul><ul><ul><li>Leer/escribir en un espacio compartido </li></ul></ul></ul><ul><ul><ul><li>Ejecutar código perteneciente a una biblioteca </li></ul></ul></ul><ul><ul><li>Cada proceso tiene su tabla de página, con números de página virtual correspondientes a cada proceso. </li></ul></ul><ul><ul><ul><li>Mismo marco en entradas de cada tabla de página </li></ul></ul></ul><ul><li>Copy-on-write (COW) </li></ul><ul><ul><li>Para caso fork(), en lugar de copiar espacio de direccionamiento, hacer que hijo comparta lo del padre hasta que hijo escriba </li></ul></ul><ul><ul><ul><li>Hacer que hijo solo pueda leer </li></ul></ul></ul><ul><ul><ul><li>Cuando hijo quiere escribir, SO atiende SO asigna un nuevo marco al hijo y lo mapea en su tabla de página y luego lo resume </li></ul></ul></ul>
  20. 20. Implementaciones con paginación <ul><li>Archivos mapeados a memoria </li></ul><ul><ul><li>En lugar de usar llamadas a sistema open, read, write, close </li></ul></ul><ul><ul><ul><li>Mapear archivo a espacio de direccionamiento virtual </li></ul></ul></ul><ul><ul><ul><li>Inicialmente todas las páginas en región mapeadas están inválidas </li></ul></ul></ul><ul><ul><li>SO lee una página de archivo de disco cuando accesa a página inválida </li></ul></ul><ul><ul><li>SO escribe una página a archivo cuando es reemplazada y su bit M (dirty bit) </li></ul></ul>
  21. 21. Resumen <ul><li>Traducción de memoria virtual a física </li></ul><ul><ul><li>Usa TLB, tablas de páginas de múltiples niveles (normalmente en HW : MMU) </li></ul></ul><ul><ul><ul><li>Cuando hay fallos en TLB se accesa memoria conteniendo tabla de página </li></ul></ul></ul><ul><ul><ul><ul><li>Si págino no esta en tabla de página : Fallo de página </li></ul></ul></ul></ul><ul><ul><li>SO Maneja fallos de página </li></ul></ul><ul><ul><ul><li>Salva estado de proceso y lo bloquea </li></ul></ul></ul><ul><ul><ul><li>Ejecuta algoritmo de reemplazamiento cuando se ve escaso de marcos libres </li></ul></ul></ul><ul><ul><ul><li>Encuentra marco libre, trae lo que necesita de disco y lo copia en marco </li></ul></ul></ul><ul><ul><ul><li>Actualiza entrada en tabla de página </li></ul></ul></ul><ul><ul><ul><li>Pone proceso en cola de listos </li></ul></ul></ul>
  22. 22. Resumen <ul><li>Dos problemas en traducción </li></ul><ul><ul><li>Desempeño </li></ul></ul><ul><ul><ul><li>Ciclos requerido por traducción </li></ul></ul></ul><ul><ul><ul><li>Solución: usar TLB </li></ul></ul></ul><ul><ul><li>Cantidad de memoria para contener tabla de página por procesos </li></ul></ul><ul><ul><ul><li>Tablas de múltiples niveles </li></ul></ul></ul><ul><ul><ul><ul><li>Esto hace uso de TLB más importante porque costo de fallos incrementa </li></ul></ul></ul></ul><ul><ul><ul><li>Tablas invertidas con uso de tablas hash </li></ul></ul></ul>
  23. 23. Detalles de TLB <ul><li>Implementado en HW </li></ul><ul><ul><li>Cache completamente asociativa </li></ul></ul><ul><ul><ul><li>Todas las entradas accesadas en paralelo en búsqueda de marco para cada traducción </li></ul></ul></ul><ul><ul><ul><li>Tag en TLB corresponden a número de página virtual </li></ul></ul></ul><ul><ul><ul><li>Datos en TLB corresponden a marcos de página </li></ul></ul></ul><ul><ul><ul><li>Con marco y offset MMU puede directamente calcular dirección física </li></ul></ul></ul><ul><ul><li>TLBs son pequeñas entre 16 y 64 entradas </li></ul></ul><ul><ul><ul><li>AMD operon tiene 2 niveles de TLB </li></ul></ul></ul><ul><ul><li>Para traducción de dir virtual a física son accesadas antes de acceso a tabla de página </li></ul></ul><ul><ul><ul><li>Acierto . Marco de página se encuentra en TLB para página virtual referenciada por CPU </li></ul></ul></ul><ul><ul><ul><li>Fallo. Traducción requiere acceso a tabla de página, trae marco a entrada en TLB (si es necesario saca otra, normalmente algoritmo LRU) </li></ul></ul></ul><ul><ul><ul><li>En Cambio de contexto: Entradas en TLB son invalidadas porque referencias pertenecen a proceso que sale de CPU </li></ul></ul></ul>

×