Gestion De Memoria

9
En un sistema multiprogramado, la tarea de subdivisión de memoria la lleva acabo dinámicamente el sistema operativo y se conoce como gestión de memoria. Requisitos de la gestión de memoria Reubicación En un sistema multiprogramado, la memoria principal disponible se encuentra normalmente compartida por varios procesos. Se busca poder cargar y descargar los procesos activos en la memoria principal para maximizar el uso del procesador, manteniendo una gran reserva de procesos listos para ejecutarse. Una vez que se ha descargado un programa en el disco, sería bastante limitado que, cuando vuelva a ser cargado, deba situarse en la misma región de la memoria principal que antes. En lugar de ello, se puede necesitar reubicar el proceso en un área distinta de la memoria. No se sabe antes de tiempo donde debe situarse un programa y hay que permitir que el programa pueda moverse en la memoria principal como resultado de un intercambio Esta situación plantea algunos asuntos técnicos relativos al direccionamiento. Como muestra la figura.

Transcript of Gestion De Memoria

Page 1: Gestion De Memoria

En un sistema multiprogramado, la tarea de subdivisión de memoria la lleva acabo dinámicamente el sistema operativo y se conoce como gestión de memoria.

Requisitos de la gestión de memoria

Reubicación

En un sistema multiprogramado, la memoria principal disponible se encuentra normalmente compartida por varios procesos.

Se busca poder cargar y descargar los procesos activos en la memoria principal para maximizar el uso del procesador, manteniendo una gran reserva de procesos listos para ejecutarse.

Una vez que se ha descargado un programa en el disco, sería bastante limitado que, cuando vuelva a ser cargado, deba situarse en la misma región de la memoria principal que antes.

En lugar de ello, se puede necesitar reubicar el proceso en un área distinta de la memoria.

No se sabe antes de tiempo donde debe situarse un programa y hay que permitir que el programa pueda moverse en la memoria principal como resultado de un intercambio

Esta situación plantea algunos asuntos técnicos relativos al direccionamiento. Como muestra la figura.

Page 2: Gestion De Memoria

El sistema operativo tiene que conocer la ubicación de la información de control de procesos y de la pila de ejecución.

Puesto que el sistema operativo gestiona la memoria y es responsable de traer el proceso a la memoria principal, estas direcciones deben ser fáciles de conseguir. El procesador debe ocuparse de las referencias a la memoria dentro del programa. Las instrucciones de bifurcación deben contener la dirección que haga referencia a la instrucción que se vaya a ejecutar. Las instrucciones que hagan referencia a datos deben contener la dirección del byte o de la palabra de datos referenciada.

El hardware del procesador y el software del sistema operativo deben ser capaces de traducir las referencias a la memoria encontradas en el código del programa a las direcciones físicas reales que reflejen la posición actual del programa en la memoria principal.

Protección Cada proceso debe protegerse contra interferencias no deseadas de otros procesos, tanto accidentalmente como intencionalmente. Así pues, el código de un proceso no puede hacer referencia a posiciones de memoria de otros procesos, con fines de lectura o escritura, sin permiso. Hasta cierto punto, satisfacer las exigencias de reubicación aumenta la dificultad de satisfacción de las exigencias de protección. Puesto que se desconoce la ubicación de un programa en memoria principal, es imposible comprobar las direcciones absolutas durante la compilación para asegurar la protección. Es más, la mayoría de los lenguajes de programación permiten el cálculo dinámico de direcciones durante la ejecución, generando, por ejemplo, un índice de un vector o un puntero a una estructura de datos, por tanto, todas las referencias a memoria generadas por un proceso deben comprobarse durante la ejecución para asegurar que solo hacen referencia al espacio de memoria destinado a dicho proceso. Afortunadamente, como se verá, los mecanismos que respaldan la reubicación también forman parte básica del cumplimiento de las necesidades de protección.

Sistemas de protección

Mecanismo que controla el acceso de los programas o los usuarios a los recursos del sistema. El SO se encarga de:

• Distinguir entre uso autorizado y no autorizado. • Especificar los controles de seguridad a realizar. • Forzar el uso de estos mecanismos de protección.

En conclusión El gestor de memoria debe proteger las zonas asignadas a cada proceso de accesos por parte de terceros.

Page 3: Gestion De Memoria

Compartimento de memoria 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. Esto es, la posibilidad de que direcciones lógicas de dos o más procesos, posiblemente distintas entre sí, se correspondan con la misma dirección física. Nótese que, como puede observarse en la Figura 4.5, la posibilidad de que dos o más procesos compartan una zona de memoria implica que el sistema de gestión de memoria debe permitir que la memoria asignada a un proceso no sea contigua. Así, por ejemplo, una función de traducción como la comentada anteriormente, que únicamente sumaba una cantidad a las direcciones generadas por el programa, obligaría a que el espacio asignado al proceso fuera contiguo, imposibilitando, por tanto, el poder compartir memoria. Mapa proceso 1 Zona compartida Zona compartida Zona privada 1 Zona privada 2 Zona privada 1 Zona privada 2

Mapa proceso 2 Zona compartida Memoria Zona priv. 1 (P2) Zona priv. 1 (P1) Zona priv. 2 (P1) Zona priv. 2 (P2)

Figura 4.5. Dos procesos compartiendo una zona de memoria. Considérese el caso de que una posición de memoria de la zona compartida tenga que contener la dirección de otra posición de dicha zona (o sea, una referencia). Como se puede apreciar en la Figura 4.6, no es posible determinar qué dirección almacenar en la posición origen puesto que cada proceso ve la posición referenciada en una dirección diferente de su mapa de memoria. Esta situación se puede presentar tanto en zonas compartidas de código como de datos. En el caso del código, considérese que una posición de la zona contiene una instrucción de bifurcación a otra posición de la misma. Por lo que respecta al caso de los datos, supóngase que la zona compartida contiene una estructura de lista basada en puntero. Organización lógica: Normalmente en un sistema informático la memoria principal está organizada de forma lineal como una secuencia de posiciones de memoria. Del mismo modo la memoria secundaria se puede ver como una secuencia de bloques. Esta organización física no se corresponde con la visión del programador que estructura su programa en diferentes módulos. El sistema gestor de memoria debe permitir organizar lógicamente partes de la memoria para acercarse a la visión del programador. La técnica que más fácilmente satisface esta necesidad es la segmentación.

Page 4: Gestion De Memoria

Identificación de bloque • ¿Cómo se encuentra un bloque si está en el nivel superior? La dirección se descompone en varios campos: – Etiqueta (tag): se utiliza para comparar la dirección requerida por la CPU con aquellos bloques que pueden contener la información deseada (búsqueda en paralelo de etiquetas) – Índice (index): se usa para seleccionar el conjunto en el caso de las asociativas por conjunto o el bloque en las de mapeado directo (conjuntos de una vía). No existe para las completamente asociativas – Desplazamiento de bloque (block offset): selecciona el dato deseado dentro del bloque • ¿Cómo se sabe que un bloque contiene información válida? Mediante el bit de válido (valid bit) • Al calcular el coste de las caches hay que incluir el coste debido al almacenamiento de las etiquetas y el de los bits necesarios Según el tipo de cache • En caches de mapeado directo • En caches asociativas por conjunto • En caches completamente asociativa

Memoria: 32 bloques Caches: 8 bloques Tres tipos: - Completamente asociativas - De correspondencia directa - Asociativa por conjuntos de 2 vías

Page 5: Gestion De Memoria

Implementación de caches de mapeado directo Implementación de caches totalmente asociativas

Page 6: Gestion De Memoria

Implementación de caches asociativas por conjuntos

Ejemplo: VAX-11/780

- Cache asociativa por conjunto de 2 vías - Capacidad de datos: 8Kb - Tamaño de bloque: 8 bytes - Número de conjuntos: 512

Page 7: Gestion De Memoria

Pasos de un acierto: 1) División de la dirección 2) Acceso a ambos bancos 3) Comparación de etiquetas 4) Multiplexación 5) Envío a la CPU Políticas de sustitución de bloque • ¿Qué bloque debe reemplazarse en caso de fallo? Se puedenseguir diferentes estrategias: – Aleatoria (Random): Se elige un bloque al azar – FIFO (First Input First Out): Se sustituye el bloque que más tiempo ha estado en la cache – LRU (Least Recently Used): Se sustituye el bloque que más tiempo ha estado en la cache sin ser referenciado – LFU (Least Frecuently Used): Se sustituye el bloque que menos referencias ha tenido • Se tienen en cuenta criterios de coste y eficiencia • Los esquemas más utilizados son el aleatorio y el LRU Comparativa de frecuencias de fallos (VAX, 16bytes/bloque)

Políticas de escritura • ¿Qué ocurre en una escritura? Opciones a la hora de escribir en la cache: – Escritura directa (Write through): La información se escribe en el bloque de la cache y en el bloque de la memoria de nivel inferior – Postescritura (Copy Back): La información se escribe sólo en el bloque de la cache. El bloque modificado de la cache se escribe en la memoria de nivel inferior sólo cuando es reemplazado. • Los bloques de las caches copy back se denominan sucios o modificados cuando la información de la cache difiere de la memoria de nivel inferior

Page 8: Gestion De Memoria

• Para reducir la frecuencia de postescrituras en el reemplazo se usa el bit de modificación o sucio (dirty bit): si el bloque está limpio no se escribe en el nivel inferior • Cuando una cache es write through, la CPU debe esperar la finalización de cada escritura antes de proceder con la siguiente operación. Para evitarlo se utiliza un buffer de escritura que permite al procesador continuar mientras se actualiza la memoria Vetajas de las caches copy back: – En las caches copy back, las escrituras se realizan a la velocidad de la memoria cache, y múltiples escrituras en un bloque requieren sólo una escritura en la memoria de nivel inferior – Como cada escritura no va a memoria, la postescritura utiliza menos ancho de banda (multiprocesadores) • Vetajas de las caches write through: – En las caches write through, los fallos de lectura no ocasionan escrituras en el nivel inferior – Las caches write through son más fáciles de implementar – La escritura directa tiene la ventaja también de que la memoria principal tiene la copia más reciente de los datos (coherencia de cache, multiprocesadores y E/S) • ¿Qué ocurre en una escritura? Opciones cuando se produce un fallo de escritura: – Ubicar en escritura (Write allocation): El bloque se carga en la cache y a continuación se escribe sobre él (similar a un fallo en lectura) – No ubicar en escritura (No write allocatation): El bloque se modifica en el nivel inferior y no se carga en la cache. • Aunque cualquier política de fallo de escritura puede utilizarse con la escritura directa o con la postescritura, las caches copy back utilizan write allocation (CB- WA) y las write through usan no write allocation (WT- NWA) Caches unificadas vs. Caches separadas • Caches unificadas o mixtas (unified or mixed): Contienen tanto datos como instrucciones • Caches separadas (separated): Existe una cache para datos y otra para instrucciones Ventajas – No hay competencia entre el procesador de instrucciones y la unidad de ejecución – Duplicación del ancho de bus (puertos separados) – Parámetros de diseño (capacidad, tamaños de bloque, asociatividad, etc.) diferentes para instrucciones y datos (optimización).

Page 9: Gestion De Memoria

Inconvenientes – En general la tasa de fallos global es algo mayor (próxima transparencia): • La caches de instrucciones tienen menor frecuencia de fallos que las de datos (localidad) • La separación de instrucciones y datos elimina fallos debidos a conflictos pero al dividir también se fija el espacio de cache dedicado a cada tipo – No se equilibra la carga de trabajo de forma automática. Organización Física La memoria del computador se organiza en al menos dos niveles: memoria principal y memoria secundaria. La memoria principal ofrece un acceso rápido con un coste relativamente alto. Además, la memoria principal es volátil, es decir, no proporciona almacenamiento permanente.la memoria secundaria es más lenta y más barata que la memoria principal y, normalmente, no es volátil. De este modo, una memoria secundaria de gran capacidad puede permitir un almacenamiento a largo plazo de programas y otros, al tiempo que una memoria principal pequeña mantiene los programas y datos de uso actual. En este esquema de dos niveles, la organización del flujo de información entre la memoria principal y la memoria secundaria tienen un gran interés en el sistema. La responsabilidad de este flujo podría asignarse al programador, pero esto es impracticable e indeseable, por dos razones: 1.- la memoria principal disponible para un programa y sus datos pueden ser insuficientes. En este caso, el programador debe emplear una práctica que se conoce como superposición (overlayng), en el cual el programador y los datos se organizan de tal forma que puede haber varios módulos asignados a la misma región de memoria, con un programa principal responsable del intercambio de módulos según se necesiten. Incluso con la ayuda de herramientas de la compilación, la programación superpuesta malgasta el tiempo del programador. 2.- en un entorno multiprogramador, el programador no conoce durante la codificación cuanto espacio habrá disponible o donde estará este espacio. Resulta claro entonces que la tarea de mover información entre los dos niveles de memoria debe ser responsabilidad del sistema. Esta tarea es la esencia de la gestión de memoria.