Tecnológico Nacional de México Instituto tecnológico de Mérida Sistemas Operativos Ingeniería en Sistemas Computacionales Ensayo Gestión de Memoria Equipo #7 Integrantes: Hazel Enrique Hoil Diaz Alan Josue Alcocer Lopez Jose Carlos Tuz Puc Profesor: Manuel Jesus Rodriguez Morayta Entrega: 31 de Octubre de 2022 La memoria es un recurso importante que debe ser cuidadosamente gestionado. A todo programador le gustaría poder contar con una memoria infinitamente grande, infinitamente rápida y que fuese además no volátil, esto es, que no perdiese su contenido en ausencia de energía eléctrica. Pero al no poder contar con algunas de estas características han surgido técnicas y algoritmos capaces de administrar de una forma óptima la memoria de nuestra computadora. En este ensayo de la materia de Sistemas Operativos veremos un resumen de lo aprendido durante esta unidad al igual que se presentara mapas conceptuales para poder mejorar la comprensión del tema, el resumen que veremos a continuación fue obtenido del capítulo 4 del libro Sistemas Operativos: una visión aplicada, en este capítulo presentaremos los requisitos que debe cumplir la gestión de memoria en un sistema con multiprogramación, al igual se mostrara las distintas fases que conlleva la generación de un ejecutable, se analizara como ha sido la evolución de la gestión de la memoria desde los sistemas multiprogramados más primitivos hasta los sistemas actuales basados en la técnica de memoria virtual. Capítulo 4: Gestión de memoria La memoria es uno de los recursos más importantes de la computadora y en consecuencia la parte del sistema operativo responsable de tratar con este recurso el gestor de memoria, es un componente básico de el mismo. En un sistema con multiprogramación, el sistema operativo debe encargarse de realizar un reparto transparente, eficiente y seguro de los distintos recursos de la máquina entre los diversos procesos, de forma que cada uno de ellos crea que “tiene una máquina para él solo”. En el caso de la memoria, el sistema operativo, con el apoyo del hardware de gestión memoria del procesador, debe repartir el almacenamiento existente proporcionando un espacio de memoria independiente para cada proceso y evitando la posible interferencia voluntaria o involuntaria de cualquier otro proceso. La gestión de memoria se necesita protección, en un sistema con multiprogramación el problema se acentúa ya que no sólo hay que proteger al sistema operativo sino también a los procesos entre sí. El mecanismo de protección en este tipo de sistemas necesita del apoyo del hardware puesto que es necesario validar cada una de las direcciones que genera un programa en tiempo de ejecución. Para cumplir el requisito de protección, el sistema operativo debe crear espacios lógicos independientes y disjuntos para los procesos. Sin embargo, en ciertas situaciones, bajo la supervisión y control del sistema operativo, puede ser provechoso que los procesos puedan compartir memoria. El compartimiento de memoria puede ser beneficioso en varios aspectos. Por un lado, permite que cuando se estén ejecutando múltiples instancias del mismo programa, los procesos correspondientes compartan el código, lo que resulta en un mejor aprovechamiento de la memoria disponible. El modelo de memoria ha ido evolucionando desde este estado inicial, habitualmente los programadores desarrollan sus aplicaciones utilizando lenguajes de alto nivel. En general, una aplicación estará compuesta por un conjunto de módulos de código fuente que deberán ser procesados para obtener el ejecutable de la aplicación. Este procesamiento consta de dos fases: compilación y Montaje o enlace. • En la compilación, se genera el código máquina correspondiente a cada módulo fuente de la aplicación asignando direcciones a los símbolos definidos en el módulo y resolviendo las referencias a los mismos. • En el Montaje o enlace, se genera un ejecutable agrupando todos los archivos objeto y resolviendo las referencias entre módulos, o sea, haciendo que las referencias a un determinado símbolo apunten a la dirección asignada al mismo. La gestión de memoria consta de esquemas, en la cual un esquema simple de gestión de memoria consiste en asignar a cada proceso una zona contigua de memoria para que en ella resida su mapa de memoria. Dentro de esta estrategia general hay diversas posibilidades. Sin embargo, dado el alcance y objetivo de este tema, la exposición se centrará sólo en uno de estos posibles esquemas: la gestión contigua basada en particiones dinámicas. Se trata de un esquema que se usó en el sistema operativo OS/MVT de IBM en la década de los sesenta. Para realizar un esquema de gestión de memoria se requiere del hardware, esta se divide en registros: limite y base. • Registro límite: El procesador comprueba que cada dirección que genera el proceso no es mayor que el valor almacenado en este registro. En caso de que lo sea, se generará una excepción. • Registro base: Una vez comprobado que la dirección no rebasa el límite permitido, el procesador le sumará el valor de este registro, obteniéndose con ello la dirección de memoria física resultante. La memoria virtual, prácticamente en todos los sistemas operativos modernos se usa esta técnica. La memoria en un sistema está organizada como una jerarquía de niveles de almacenamiento, entre los que se mueve la información dependiendo de la necesidad de la misma en un determinado instante, La técnica de memoria virtual se ocupa de la transferencia de información entre la memoria principal y la secundaria, La memoria secundaria está normalmente soportada en un disco (o partición), la memoria virtual se implementa sobre un esquema de paginación, a este dispositivo se le denomina dispositivo de paginación. También se usa el término dispositivo de swap. Aunque este término no es muy adecuado, ya que proviene de la técnica del intercambio, por tradición se usa frecuentemente y se utilizará indistintamente en esta exposición. El objetivo del sistema de memoria virtual es intentar que la información que está usando un proceso en un determinado momento (conjunto de trabajo) esté residente en memoria principal. O sea, que el conjunto residente del proceso contenga a su conjunto de trabajo. Algunos beneficios del uso de memoria virtual son los siguientes: • Se produce un aumento del grado de multiprogramación al no ser necesario que todo el mapa de memoria de un proceso este en memoria principal para poder ejecutarlo. Este aumento implica una mejora en el rendimiento del sistema. • Se pueden ejecutar programas más grandes que la memoria principal disponible. Hay que resaltar que el uso de la memoria virtual no acelera la ejecución de un programa, sino que puede que incluso la ralentice debido a la sobrecarga asociada a las transferencias entre la memoria principal y la secundaria. Esto hace que esta técnica no sea apropiada para sistemas de tiempo real. El hardware requerido por esta técnica presentando los esquemas de paginación, segmentación y segmentación paginada. Hay que resaltar que estos esquemas también se pueden usar sin memoria virtual, aportando beneficios apreciables con respecto a los esquemas de asignación contigua. De hecho, algunas versiones de UNIX usaban paginación e intercambio, pero no memoria virtual. Sin embargo, en la actualidad el uso de estos esquemas está ligado a la memoria virtual. Después de presentar el hardware, se mostrará cómo construir un esquema de memoria virtual sobre el mismo estudiando las diferentes políticas de gestión de memoria virtual. Paginación: La paginación surge como un intento de paliar estos problemas sofisticando apreciablemente el hardware de gestión de memoria del procesador aumentado considerablemente la cantidad de información de traducción que se almacena por el proceso. Como su nombre indica, la unidad básica de este tipo de esquema es la página. La página corresponde con una zona de memoria contigua de un determinado tamaño. Por motivos de eficiencia en la traducción, este tamaño debe ser potencia de 2 (un tamaño de página de 4 KB es un valor bastante típico). El mapa de memoria de cada proceso se considera dividido en páginas. A su vez, la memoria principal del sistema se considera dividida en zonas del mismo tamaño que se denominan marcos de página. Segmentación: Es una técnica hardware que intenta dar soporte directo a las regiones. Para ello, considera el mapa de memoria de un proceso compuesto de múltiples segmentos. Cada región se almacenará en un segmento. Se puede considerar que esta técnica es una generalización del uso de los registros valla, pero utilizando una pareja de registro base y registro límite por cada segmento. La MMU maneja una tabla de segmentos. Cada entrada de esta tabla mantiene, además de información de protección, el registro base y límite correspondientes a esa región. Una dirección lógica está formada por un número de segmento y una dirección dentro del segmento. Segmentación Paginada: La segmentación paginada intenta aun lo mejor de los dos esquemas anteriores. La segmentación proporciona soporte directo a las regiones del proceso y la paginación permite un mejor aprovechamiento de la memoria y una base para construir un esquema de memoria virtual. Con esta técnica, un segmento está formado por un conjunto de páginas, y, por tanto, no tiene que estar contiguo en memoria. La MMU utiliza una tabla de segmentos, tal que cada entrada de la tabla apunta a una tabla de páginas. Paginación por demanda: Una vez analizados los diversos esquemas hardware, en esta sección se plantea cómo construir el mecanismo de la memoria virtual tomando como base dichos esquemas. Estos esquemas también pueden usarse sin memoria virtual, ya que de por sí proporcionan numerosas ventajas sobre los esquemas de asignación contigua. Sin embargo, en la actualidad su uso siempre está ligado a la memoria virtual. Para finalizar, en este capítulo hemos examinado la gestión de memoria. Vimos que los sistemas más sencillos no realizan ni intercambio ni paginación. Una vez que un programa se carga en la memoria, permanece allí hasta que termina. Algunos sistemas operativos sólo permiten mantener un proceso a la vez en la memoria, mientras que otros soportan multiprogramación. El paso siguiente es el intercambio. Cuando se utiliza intercambio, el sistema puede contener más procesos de los que caben en la memoria. Los procesos para los que no hay espacio suficiente se intercambian al disco. Puede llevarse el control del espacio desocupado en la memoria y en el disco con un mapa de bits o una lista de huecos. Los ordenadores modernos suelen tener alguna forma de memoria virtual. En su forma más simple, el espacio de direcciones de cada proceso se divide en bloques del mismo tamaño que se denominan páginas y que pueden cargarse en cualquier marco de página disponible en la memoria. Hay muchos algoritmos de sustitución de páginas; dos de los mejores algoritmos son el de envejecimiento y WSClock. Los sistemas de paginación pueden modelizarse abstrayendo la serie de referencias a las páginas del programa y utilizándola con diferentes algoritmos. Estos modelos pueden servir para hacer algunas predicciones respecto al comportamiento de la paginación. La segmentación ayuda a manejar estructuras de datos que cambian de tamaño durante la ejecución y simplifica el enlazado y la compartición. También facilita proporcionar protección específica a diferentes segmentos. A veces se combinan la segmentación y la paginación para crear una memoria virtual bidimensional. Los sistemas MULTICS y Pentium de Intel manejan segmentación y paginación. Referencias Pérez, J. C., Carballeira, F. G., Anasagasti, P. M. & Costoya, F. P. (2001). Sistemas operativos: una visión aplicada. McGraw-Hill Education. Jesus Carretero Perez, F. G. (2012). Sistemas Operativos Una Vision Aplicada. España: Area informatica y Computacion