440 likes | 544 Views
Teoría de Sistemas Operativos Memoria. Departamento de Electrónica 2º Semestre, 2003 Gabriel Astudillo Muñoz http://www.elo.utfsm.cl/~elo321. Técnicas de Administración de Memoria.
E N D
Teoría de Sistemas OperativosMemoria Departamento de Electrónica 2º Semestre, 2003 Gabriel Astudillo Muñoz http://www.elo.utfsm.cl/~elo321
Al administrar la memoria física, ocurren ciertos problemas que son inherentes a los esquemas y algoritmos vistos. • No se pueden ejecutar programas que necesitan más memoria que la disponible físicamente. • Puede existir la posibilidad que no se pueda dejar segmentos de memoria contiguos.
Idea básica: • Ocultar los detalles de la memoria física. Esto es: • MV disfraza el hecho que la memoria real no está asignada a un programa como una región continua, y • MV oculta el tamaño actual de la memoria física disponible. Cada programa tiene un bloque de memoria (espacio de direcciones) continuo y que comienza por la dirección 0. El tamaño puede ser considerado como infinito.
Memoria Virtual Memoria Física MMU (address_map)
Memoria Virtual Memoria Física MMU Direcciones generadas por la CPU
Existen al menos dos formas de implementación de MV, según el punto de vista del usuario • Espacio de direcciones de segmento único • (paginación) • Espacio de direcciones de segmento múltiple • (Segmentación)
Espacio de direcciones de segmento único • MV como un espacio lineal continuo (esquema tradicional de memoria) de n celdas (n=2k). • MV es dividida en trozos de igual tamaños pages, las que pueden ser cargadas en memoria en trozos no contigüos de memoria física, denominados pages frames.
Espacio de direcciones de segmento múltiple • Divide el espacio de direcciones virtuales en un conjunto de segmentos, donde cada segmento es un espacio lineal y puede variar de tamaño. • Un segmento puede ser tratado como una unidad lógica independiente, por ejemplo, una función. • Cada segmento puede ser cargado como una unidad dentro de un trozo contigüo de memoria o ser dividido en páginas de igual tamaño.
Ambas técnicas deben poseer como mínimo las siguientes funciones: • Mecanismos de mapeo de direcciones. • Implementación address_map(). • Estrategias de asignación de memoria: • Determina donde cargar los trozos necesarios de MV. • Estrategias de reemplazo: • Cuando una porción de MV necesita ser cargado en Mem. Real y no hay espacio disponible, el sistema debe crear un espacio (Swaping, pages o frames)
El espacio de direcciones virtuales es dividido en una secuencia de bloques contigüos de igual tamaña PAGES. • Páginas Pm son de 1Kb -> 16Kb • Análogamente, la memoria física es dividida en bloques denominados PAGES FRAMES, cuyo tamaño es idéntico al tamaño de las páginas. Cada dirección generada (va) por la CPU es dividida en 2 partes: numero de página (p) y offset dentro de la página (w)
Cada dirección física (pa) también es dividida en 2 partes: numero de frame (f) y offset dentro del frame (w). • ¿Cómo la MMU (address_map) convierte direcciones (p,w) en (f,w) y mantiene un historial de esta conversión? Tablas de frames. Tablas de páginas.
Tabla de frames. • Implementa un tabla de tamaño F, donde cada entrada corresponde a un frame y contiene el número de la página que se encuentra en él. • Situación complicada en multiprogramación: • Muchos procesos pueden utilizar el mismo número de página, cada uno apuntando a un diferente frame. • Se necesita almacenar el ID del proceso como parte de cada entrada
Tablas de frames. • Sea un arreglo FT[F] de punteros a la siguiente estructura: Struct { int pid; int page; } • donde: • pid almacena el ID del proceso dueño de la página almacenada en el frame f ,y • page contiene el número de la página almacenada en dicho frame
Tablas de frames. • La función address_map puede ser escrita como: • Address_map(id,p,w){ • pa = NULL; • for(f=0;f < F; f++) • if(FT[f].pid == id && • FT[f].page == p) pa = f+w; • return(pa); • } • Este algoritmo se puede implementar en Memorias Asociativas.
Tablas de frames. • Ventajas: • Sólo una tabla debe ser mantenida para todos los procesos. • Desventajas: • Mayor tamaño de memoria, la tabla no se puede almacenar en memorias asociativas.
Tablas de páginas. • Mantiene un historial de las páginas que está utilizando un proceso. La n-ésima entrada identifica el frame que contiene dicha página. • La función address_map queda como: Address_map(p,w){ pa = *(PTR+p)+w; return(pa); } • PTR : dirección de la tabla de páginas del proceso en RUNNING.
Tablas de páginas. • Si las direcciones son de m bits y el tamaño de página es 2n, la tabla de páginas puede llegar a contener 2m-n entradas. Para m=32 y n=12 No se puede ocupar memorias asociativas ni registros de CPU. • Solución: manejar la tabla de páginas de cada proceso completamente en memoria, y usar sólo un registro que apunte a la ubicación de la tabla. (PTR)
Tablas de páginas. • Desventaja: • costo de cada acceso a memoria se duplica, porque primero hay que accesar la tabla de páginas (se encuentra en memoria física). • Solución: usar un pequeño y rápido caché especial de memoria asociativa, llamado translation look-aside buffer (TLB).
Tablas de páginas. • Translation look-aside buffer (TLB). • El TLB forma parte de la MMU, y contiene los pares (page, frame) de las páginas más recientemente accesadas. El número de entradas es 26 a 210 • Aunque el TLB sea pequeño, la probabilidad de que la página esté en el TLB (tasa de aciertos) es alta, porque los programas suelen hacer muchas referencias a unas pocas páginas.
Paginación en dos niveles • Espacio de direcciones virtuales ~ 232 ó 264. • ~ 1e6 de entradas para páginas de 4Kb. • 4 Bytes por cada entrada • Tamaño de la tabla de páginas: 4MB/proc. • Díficil asignar 4MB contigüos en memoria • principal. • Dividir la tabla de páginas : paginación en dos niveles (o en general, paginación jerárquica)
Paginación en dos niveles • Supongamos direccionamiento de 32[bits] y páginas de 4[Kb]. La dirección virtual queda como:
Paginación en dos niveles • Finalmente, la tabla de páginas quedaría como:
La segmentación es un esquema de administración de memoria que implementa la visión del usuario de la memoria. • La memoria lógica es un conjunto de segmentos, c/u representando un sección conceptual del programa
Cada segmento tiene un nombre (número) y un largo. • La dirección especifica el segmento y el offset dentro del segmento. • En contraste con la paginación donde el usuario maneja la dirección lógica y el hardware se encarga de pasarla a dirección física • <número de segmento, offset>
Para mapear la direcciones bidimensionales en una dimensión (dirección física) se utiliza la tabla de segmentos. • Cada entrada en la tabla tiene una basey un límitedel segmento. • La base indica donde comienza el segmento en la memoria física.
Páginación con segmentación. • Combina las ventajas de ambos sistemas. • Los segmentos tienen en general un tamaño múltiplo del tamaño de página. • Las direcciones son tridimensionales, esto es: • v = (s,p,w) Donde s es el segmento, p la página dentro del segmento y w el desplazamiento dentro de la página
Páginación con segmentación. • Ejemplo: Organización de memoria en Pentium
Paginación bajo demanda. • Parecido a sistemas paginados con swapping. • En vez de “swapear” todo el proceso a memoria principal, lo hacemos sólo con las páginas que realmente se necesiten. • Lazy swapper o pager
Paginación bajo demanda. • Presencia de páginas en memoria principal
Pasos en caso de fallo de página. • Paginación bajo demanda.
Necesidad de reemplazo de página. • Paginación bajo demanda.
Pasos en el reemplazo de una página • Paginación bajo demanda.
Pasos en el reemplazo de una página • Encontrar la página solicitada en el disco. • Encontrar un frame libre: • Si no hay uno, utilizar un algoritmo para seleccionar un frame “victima”. • Salvar la página víctima en disco; actualizar la tablas de páginas y frames. • Leer la página solicitada dentro del nuevo frame liberado; cambiar las tablas de páginas y frames. • Reanudar el proceso. • Paginación bajo demanda.
Performance de pág. bajo demanda. • Tasa de Falla de Pagina p donde 0 p 1 • if p = 0 no hay fallo de página • if p = 1, toda referencia es un fallp • Tiempo de Acceso Efectivo (EAT) • EAT = (1 – p) x ma + p x tiempo_fallo_pagina • Por ejemplo: tfp=25[ms], ma=100[ns] • EAT = 100 + 24999900p • Si EAT:=110[ns] p < 4x10-7 !! • Paginación bajo demanda.