ES14210089 16
MARIO EZEQUIEL GARCIA HUERTA Actividad 2 / Unidad 1 / Administración y jerarquía de la memoria
Técnica de administración de memoria
Ventajas
Inconvenientes
Paginación
1. Es posible comenzar a ejecutar un programa, cargando solo una parte del mismo en memoria, y el resto se cargara bajo la solicitud. 2. No es necesario que las paginas estén contiguas en memoria, por lo que no se necesitan procesos de compactación cuando existen marcos de páginas libres dispersos en la memoria. 3. Es fácil controlar todas las páginas, ya que tienen el mismo tamaño. 4. El mecanismo de traducción de direcciones (DAT) permite separar los conceptos de espacio de direcciones y espacios de memoria. 5. Se libera al programador de la restricción de programar para un tamaño físico de memoria, con lo que s e aumenta su productividad. 6. Al no necesitarse cargar un programa completo en memoria para su ejecución, se puede aumentar el número de programas multiprogramándose. 7. Se elimina el problema de fragmentación externa.
Segmentación
• Es posible compilar módulos separados
1. El costo de hardware y software se incrementa, por la nueva información que debe manejarse y el mecanismo de traducción de direcciones necesario. Se consume mucho más recursos de memoria, tiempo en el CPU para su implantación. 2. Se deben reservar áreas de memoria para las PMT de los procesos. Al no ser fija el tamaño de estas, se crea un problema semejante al de los programas 3. Aparece el problema de fragmentación interna. Así, si se requieren 5K para un programa, pero las paginas son de 4K, deberán asignárseles 2 páginas (8k), con lo que quedan 3K sin utilizar. La suma de los espacios libres dejados de esta forma puede ser mayor que el de varias páginas, pero no podrá ser utilizado. Debe asignarse un tamaño promedio a las páginas, evitando que si son muy pequeñas, se necesiten TABLAS BMT y PMT muy grandes, y si son muy grandes, se incremente el grado de fragmentación interna. • Hay un incremento en los costos de hardware y de software para llevar a cabo la implantación, así como un mayor consumo de recursos: memoria, tiempo de CPU, etc. • Debido a que los segmentos tienen un tamaño variable se pueden presentar problemas de fragmentación externas, lo que puede ameritar un plan de reubicación de segmentos en memoria principal. • Se complica el manejo de memoria virtual, ya que los discos almacenan la información en bloques de tamaños fijos, mientras los segmentos son de tamaño variable. Esto hace necesaria la existencia de mecanismos más costosos que los existentes para paginación. • Al permitir que los segmentos varíen de tamaño, puede ser necesarios planes de reubicación a nivel de los discos, si los
como segmentos el enlace entre los segmentos puede suponer hasta tanto se haga una referencia entre segmentos. • Debido a que es posible separar los módulos se hace más fácil la modificación de los mismos. Cambios dentro de un módulo no afecta al resto de los módulos. • Es fácil el compartir segmentos. • Es posible que los segmentos crezcan dinámicamente según las necesidades del programa en ejecución. • Existe la posibilidad de definir segmentos que aún no existan. Así, no se asignara memoria, sino a partir del momento que sea necesario hacer usos del segmento. Un ejemplo de esto, serían los arreglos cuya dimensión no se conoce hasta tanto no se comienza a ejecutar el programa.
Universidad Abierta y a Distancia de México Centro de Acceso y Apoyo Universitario Unidad Central Puebla # 143, Piso E3, Col. Roma Norte, C.P. 06700, Delegación Cuauhtémoc, México D.F.
segmentos son devueltos a dicho dispositivo; lo que conlleva a nuevos costos.
Memoria Virtual
-
Fragmentación
Permite optimizar uso de memoria Mantiene más procesos en memoria principal Permite que un proceso sea más grande que toda la memoria principal Permite multiprogramación muy efectiva Se encarga el Sistema Operativo donde se evita al usuario la preocupación por programar con superposición
Básicamente la fragmentación es la memoria desperdiciada, tanto dentro de la memoria principal como de la secundaria Esta memoria desperdiciada se produce cuando ciertos sectores no pueden ser asignados a ningún proceso o dato y quedan vacíos e inaccesibles. Esto se debe a que durante los distintos swapeos de procesos y datos, ciertas partes de la memoria se van particionado, por lo que ciertos espacios terminan siendo o muy grandes o muy chicos para los procesos que se quieren o que son asignados, generando estos espacios de memoria libre no utilizada.
• No se puede garantizar, que al salir un segmento de la memoria, este pueda ser traído fácilmente de nuevo, ya que será necesario encontrar nuevamente un área de memoria libre ajustada a su tamaño. • La compartición de segmentos permite ahorrar memoria, pero requiere de mecanismos adicionales da hardware y software. Fallos de direccionamiento: Se genera interrupción, indica fallo de acceso a memoria Proceso pasa a bloqueado, SO a ejecución SO emite solicitud de E/S al disco SO expide otro proceso para que se ejecute Tras traer fragmento a memoria, interrupción de E/S, control al SO, que pasa el proceso a listo. Posible hiperpaginación (thrasing): SO más tiempo intercambiando fragmentos que ejecutando (ejemplo: si saca de memoria un fragmento que se iba a usar ya) No puede corregirse al momento en que se produce (ya que la memoria asignada a un proceso no puede partirse y liberarse sin matar o bloquear el proceso), pero, si puede evitarse haciendo una buena planificación de la administración de memoria y usando las mejores tácticas para cada situación (particionado o segmentando de forma similar procesos, datos y memoria, etc.).
Universidad Abierta y a Distancia de México Centro de Acceso y Apoyo Universitario Unidad Central Puebla # 143, Piso E3, Col. Roma Norte, C.P. 06700, Delegación Cuauhtémoc, México D.F.
Jerarquía de memorias Se conoce como jerarquía de memoria a la organización piramidal de la memoria en niveles, que tienen los ordenadores. Su objetivo es conseguir el rendimiento de una memoria de gran velocidad al coste de una memoria de baja velocidad, basándose en el principio de cercanía de referencias. La unidad de memoria de un computador se puede ver como una jerarquía de componentes. Desde el punto de vista del diseñador, esta jerarquía impone una serie de ligaduras que se pueden resumir en los tres parámetros siguientes • Capacidad de la memoria • Velocidad • Coste
La capacidad que se requiere en una memoria es siempre un tema abierto que depende de las necesidades de cada usuario y de las aplicaciones que utiliza. Si la capacidad se aumenta es seguro que finalmente se desarrollarán aplicaciones que la utilizan. La cuestión de la velocidad es más fácil de comprender. Para conseguir un rendimiento óptimo del computador la memoria debe ser capaz de seguir el ritmo impuesto por la CPU. Es decir, si la CPU está ejecutando un programa no debería esperar por las instrucciones y los operandos, cuando éstos se le transfieran desde la memoria. En un computador el coste de la memoria suele estar en consonancia con el de las otras unidades del sistema. Cada elemento de almacenamiento diferente tiene un coste asociado. Esta característica puede venir dada en términos absolutos referida al coste del dispositivo de almacenamiento en sí, o en términos relativos referida al coste por unidad de información. Por ejemplo, el coste de una unidad de disco de gran capacidad puede ser superior al de un circuito integrado de memoria, sin embargo, el coste por bit de información almacenado es siempre menor en el caso del disco. Los tres parámetros antes mencionados están íntimamente ligados. Existe un compromiso entre coste, capacidad y tiempo de acceso. Así, una mayor velocidad suele ir acompañada de un mayor coste y de una menor capacidad, mientras que
Universidad Abierta y a Distancia de México Centro de Acceso y Apoyo Universitario Unidad Central Puebla # 143, Piso E3, Col. Roma Norte, C.P. 06700, Delegación Cuauhtémoc, México D.F.
por el contrario, una gran capacidad implica un menor coste por unidad de información y una velocidad moderada. La Tabla 2.4 resume estas características.
Menor tiempo de acceso => Mayor coste por bit Mayor capacidad => Menor coste por bit Mayor capacidad => Mayor tiempo de acceso Teniendo en cuenta las consideraciones anteriores, resulta obvio el dilema que se le presenta al diseñador. Su objetivo será utilizar aquellas tecnologías de memoria que proporcionan una mayor capacidad, ya que ello implica que se tiene tanto la capacidad que se necesita como un coste bajo por unidad de información. No obstante, para poder cumplir los requisitos impuestos por el diseño se ve obligado a utilizar memorias rápidas (con tiempos de acceso pequeños), de baja capacidad y de alto coste. La solución a este conflicto aparente está en emplear una jerarquía de memorias en lugar de utilizar una única tecnología o componente de memoria. La Figura muestra una jerarquía típica de memorias.
Figura: Jerarquía de memorias Cuando se va hacia los niveles inferiores de la jerarquía ocurre que: a) El coste por unidad de información (bit) disminuye. b) La capacidad aumenta. c) El tiempo de acceso aumenta. d) La frecuencia de acceso a la memoria por parte de la CPU disminuye. Como consecuencia de esto se deduce que las memorias rápidas, de baja capacidad y de alto coste, se complementan con las memorias lentas, de gran capacidad y de bajo coste. La clave del éxito de esta organización jerárquica está en la característica d). Esta idea se verá posteriormente, con más detalle, cuando
Universidad Abierta y a Distancia de México Centro de Acceso y Apoyo Universitario Unidad Central Puebla # 143, Piso E3, Col. Roma Norte, C.P. 06700, Delegación Cuauhtémoc, México D.F.
se estudie el concepto de "memorias cachés". Una explicación intuitiva de por qué ocurre así es la siguiente: Si se organiza la memoria de acuerdo con las características anteriores a), b) y c) y si tanto los datos como las instrucciones se pueden distribuir a través de esta memoria de acuerdo con la característica d), es decir, situando en los niveles superiores de la jerarquía los que se necesitan más frecuentemente, y en los niveles inferiores los menos utilizados, resulta evidente que este esquema reducirá el coste total, manteniendo al mismo tiempo un nivel dado de prestaciones. El objetivo final de un sistema de jerarquía de memorias se puede resumir en las dos características siguientes: 1) Ofrecer al usuario tanta capacidad de memoria como sea posible al menor coste. 2) Con una velocidad de acceso cercana a la más rápida necesaria. Los puntos básicos relacionados con la memoria pueden resumirse en: Cantidad y Velocidad La Cantidad: cuanta más memoria haya disponible, más podrá utilizarse. La Velocidad: Es la que el procesador puede trabajar, de modo que no haya tiempos de espera entre cálculo y cálculo, utilizados para traer operandos o guardar resultados. En suma, el costo de la memoria no debe ser excesivo, para que sea factible construir un equipo accesible. Como puede esperarse los tres factores compiten entre sí, por lo que hay que encontrar un equilibrio. Las siguientes afirmaciones son válidas: A menor tiempo de acceso mayor coste A mayor capacidad mayor coste A mayor capacidad menor velocidad. Se busca entonces contar con capacidad suficiente de memoria, con una velocidad que sirva para satisfacer la demanda de rendimiento y con un coste que no sea excesivo. Gracias a un principio llamado cercanía de referencias, es factible utilizar una mezcla de los distintos tipos y lograr un rendimiento cercano al de la memoria más rápida. Los niveles que componen la jerarquía de memoria habitualmente son: Nivel 0: Registros Nivel 1: Memoria caché Nivel 2: Memoria principal Nivel 3: Disco duro (con el mecanismo de memoria virtual) Nivel 4: Redes(Actualmente se considera un nivel más de la jerarquía de memorias)
Universidad Abierta y a Distancia de México Centro de Acceso y Apoyo Universitario Unidad Central Puebla # 143, Piso E3, Col. Roma Norte, C.P. 06700, Delegación Cuauhtémoc, México D.F.
Componentes de la Jerarquía de Memoria: Registros de procesador: Estos registros interaccionan continuamente con la CPU (porque forman parte de ella). Los registros tienen un tiempo de acceso muy pequeño y una capacidad mínima, normalmente igual a la palabra del procesador (1 a 8 bytes). Registros intermedios: Constituyen un paso intermedio entre el procesador y la memoria, tienen un tiempo de acceso muy breve y muy poca capacidad. Memorias caché: Son memorias de pequeña capacidad. Normalmente una pequeña fracción de la memoria principal. y pequeño tiempo de acceso. Este nivel de memoria se coloca entre la CPU y la memoria central. Hace algunos años este nivel era exclusivo de los ordenadores grandes pero actualmente todos los ordenadores lo incorporan. Dentro de la memoria caché puede haber, a su vez, dos niveles denominados caché on chip, memoria caché dentro del circuito integrado, y caché on board, memoria caché en la placa de circuito impreso pero fuera del circuito integrado, evidentemente, por razones físicas, la primera es mucho más rápida que la segunda. Existe también una técnica, denominada Arquitectura Harvard, en cierto modo contrapuesta a la idea de Von Newmann, que utiliza memorias caché separadas para código y datos. Esto tiene algunas ventajas como se verá en este capítulo. Memoria central o principal: En este nivel residen los programas y los datos. La CPU lee y escribe datos en él aunque con menos frecuencia que en los niveles anteriores. Tiene un tiempo de acceso relativamente rápido y gran capacidad. Extensiones de memoria central: Son memorias de la misma naturaleza que la memoria central que amplían su capacidad de forma modular. El tiempo de similar, a lo sumo un poco mayor, al de la memoria central y su capacidad puede ser algunas veces mayor. Memorias de masas o auxiliares: Son memorias que residen en dispositivos externos al ordenador, en ellas se archivan programas y datos para su uso posterior. También se usan estas memorias para apoyo de la memoria central en caso de que ésta sea insuficiente (memoria virtual). Estas memorias suelen tener gran capacidad pero pueden llegar a tener un tiempo de acceso muy lento. Dentro de ellas también se pueden establecer varios niveles de jerarquía. Gestión de Memoria: Los lenguajes de programación actuales generalmente asumen la existencia de únicamente dos niveles de memoria, memoria principal y almacenamiento secundario (normalmente en disco). Aunque en lenguaje ensamblador, ensamblador en línea y lenguajes como C y C++ podemos direccionar datos directamente a los registros del procesador.
Universidad Abierta y a Distancia de México Centro de Acceso y Apoyo Universitario Unidad Central Puebla # 143, Piso E3, Col. Roma Norte, C.P. 06700, Delegación Cuauhtémoc, México D.F.
Para aprovechar de forma óptima las ventajas de la jerarquía de memoria es necesario cooperación entre programadores, compiladores y fabricantes de hardware: Programadores: deben ser responsables del movimiento entre memoria principal y disco mediante el uso de ficheros. Hardware: el movimiento de datos entre la memoria principal y los niveles de caché es realizado por algoritmos hardware. Compiladores: son responsables de optimizar el código de modo que el uso de los registros y la caché sea eficiente. Técnicas de gestión de memoria Memoria Virtual Es una técnica que permite utilizar el disco como si fuera memoria RAM. Cuando un programa es más grande que el tamaño físico de la RAM, lo que se hace es pasar a disco las porciones de RAM que no se estén utilizando en un momento determinado, dejando solo en memoria las partes del programa que se estén ejecutando. Los programas no se dan cuenta de todo lo que esta ocurriendo por debajo, sin embargo como la velocidad de acceso a disco es miles de veces mas lenta que la de la RAM, a la hora de devolver porciones del programa a memoria desde el disco, el sistema puede comportarse de manera más lenta (sobre todo cuando se cargan muchos procesos de forma simultánea). En Windows por ejemplo cuando queda poca RAM, el gestor de memoria virtual mueve datos de la RAM a un espacio en disco llamado archivo de paginación. Linux, sin embargo emplea una partición específica para el intercambio entre RAM y disco denominada partición de intercambio (swap) Paginación Técnica que consiste en dividir la memoria en zonas iguales llamadas marcos de página. A su vez los los procesos (un proceso es un programa en ejecución) también se dividen en partes del mismo tamaño, denominadas páginas. El SO se encarga de asignar los marcos de página necesarios a cada proceso y mantiene una estructura llamada tabla de páginas que indica en que marco está cada página y también una lista de marcos libres. La asignación de los marcos de página a las páginas no tiene que ser consecutiva y un proceso puede estar ubicado en marcos no contiguos. Uno de los principales inconvenientes de esta técnica es la Fragmentación Interna.
Universidad Abierta y a Distancia de México Centro de Acceso y Apoyo Universitario Unidad Central Puebla # 143, Piso E3, Col. Roma Norte, C.P. 06700, Delegación Cuauhtémoc, México D.F.
Nota: El tamaño de los marcos de página se diseña mediante hardware Segmentación A diferencia de la paginación, en la segmentación la memoria se divide en zonas de tamaño variable denominadas segmentos. El SO mantiene una tabla de segmentos para cada proceso indicando la dirección de carga y la longitud de cada segmento. La asignación de segmentos tampoco tiene que ser contigua. Uno de los principales inconvenientes de esta técnica es la Fragmentación Externa. Memoria Virtual paginada o segmentada Tanto en la paginación como en la segmentación todas las paginas o segmentos de un proceso deben estar en memoria principal para que este se ejecute. Sin embargo esta técnica permite que se ejecuten procesos sin necesidad de que todas sus páginas o todos sus segmentos estén en memoria principal. Las paginas o segmentos se leerán cuando se necesiten. La carga de una pagina o segmento en memoria principal puede requerir descargar otras paginas o segmentos de memoria al disco.
Universidad Abierta y a Distancia de México Centro de Acceso y Apoyo Universitario Unidad Central Puebla # 143, Piso E3, Col. Roma Norte, C.P. 06700, Delegación Cuauhtémoc, México D.F.
Fragmentación La fragmentación de la memoria es la memoria que queda desperdiciada al usar los métodos de gestión de memoria. La hay de dos tipos: Externa e Interna 1- Fragmentación Externa Existe espacio total de memoria para satisfacer un requerimiento, pero no es contigua. La fragmentación externa se puede reducir mediante la compactación para colocar toda la memoria libre en un solo gran bloque, pero solo es posible si la relocalización es dinámica y en tiempo de ejecución.
2- Fragmentación Interna El hecho de asignar memoria en bloques de tamaño fijo y predefinido se traduce en que la memoria asignada puede ser ligeramente mayor que la que realmente se necesita, en cuyo caso se desperdicia cierta cantidad. Se podría evitar permitiendo la asignación exacta de memoria que necesite cada proceso de forma dinámica.
Universidad Abierta y a Distancia de México Centro de Acceso y Apoyo Universitario Unidad Central Puebla # 143, Piso E3, Col. Roma Norte, C.P. 06700, Delegación Cuauhtémoc, México D.F.
Observación Una estrategia común para reducir el impacto de la fragmentación es separar las zonas del sistema de archivos que experimenten muchas mas lecturas y escrituras de otras zonas más volátiles donde se crean y borran continuamente archivos. Por ejemplo el SO se compone de carpetas estáticas que se modifican con mucha menor frecuencia que los Perfiles de los usuarios donde se suele estar creando y destruyendo información continuamente. Al separar ambas zonas en particiones independientes logramos que el desfragmentador trabaje de forma mucho más eficiente.
Universidad Abierta y a Distancia de México Centro de Acceso y Apoyo Universitario Unidad Central Puebla # 143, Piso E3, Col. Roma Norte, C.P. 06700, Delegación Cuauhtémoc, México D.F.