GESTION DE MEMORIA

GESTION DE MEMORIA

            En un sistema  monoprogramado, la memoria principal se divide en dos partes: una parte para el sistema operativo (monitor residente, núcleo) y otra parte para el programa que se ejecuta en ese instante.

            En un sistema multiprogramado, la parte de “usuario” de la memoria debe subdividirse para hacer sitio a varios procesos. Esta tarea de subdivisión la lleva a cabo el sistema operativo y se conoce como gestión de memoria.

OBJETIVOS DE LA ADMINISTRACIÓN DE MEMORIA

Los principales requisitos que busca conseguir la administración de memoria son:

 

Reubicación

       En un sistema multitarea, la memoria principal está compartida por muchos procesos. Generalmente, no es posible para el programador saber qué otros programas están residentes en memoria principal en el tiempo de ejecución de su programa. Además, se busca poder trasladar procesos activos dentro y fuera de la memoria principal para maximizar la utilización del procesador, proveyéndolo de varios procesos listos para ejecutar. Una vez que un programa fue sacado de la memoria principal al disco, sería difícil establecer cuál es el próximo en volver a la memoria principal, y debería ser colocado en la misma región de la memoria principal que antes.

       El sistema operativo debe conocer la ubicación de la información del control del proceso y de la pila de ejecución, además de la primera ubicación en donde comenzar el proceso. Como el sistema operativo es responsable de mover el proceso a la memoria principal, las direcciones son fáciles de mover. Sin embargo, el procesador debe negociar con referencias de memoria del programa. Las instrucciones de ramificación (branch instructions) apuntan a la próxima instrucción a ejecutar, las instrucciones de referencia de datos (reference to data) apuntan al dato referenciado por el programa. Sin embargo, el procesador y el S.O. deben ser capaces de trasladar las referencias de memoria encontradas en el programa en la actual ubicación de la memoria física.

 

Protección

       Todos los procesos deben ser protegidos de indeseables interferencias accidentales o intencionales de otros procesos. Este mecanismo, sin embargo, dificulta la tarea de reubicación debido a que se deben chequear todas las posiciones de memoria al ubicar un proceso para mantener el sistema de protección. Todas las referencias de memoria generadas por un proceso deben ser chequeadas en tiempo de ejecución para estar seguro de que apuntan solo a la porción de memoria reservada para ese proceso.

       Ante una violación de la protección, el que debe ofrecer esta protección es el procesador y no el sistema operativo debido a la velocidad y a que el S.O. no puede anticipar las referencias de memoria que el proceso hará.

 

Uso compartido de códigos y datos

       Todos los mecanismos de protección deben ser un poco flexibles, ya que deben permitir que los procesos de un mismo programa que comparten una tarea tengan memoria en común. El mecanismo de protección debe permitir esto de una manera controlada.

 

Organización lógica

       La memoria en una computadora es lineal, una sucesión de bytes. En cambio, los programas están construidos en módulos, en donde los datos pueden ser modificados. Si el S.O. y el HW son capaces de trabajar con estos módulos, se pueden apreciar las siguientes ventajas:

 

Los módulos pueden escribirse y compilarse independientemente, mientras que el sistema resuelve durante la ejecución todas las referencias de un módulo a otro

 

Pueden otorgarse varios grados de protección a los distintos módulos

 

Se puede introducir mecanismos de memoria compartida, así al usuario se le hace mucho más sencilla la construcción de aplicaciones

 

Organización física

            La memoria está dividida en primaria y secundaria. El traspaso de información entre éstas es la preocupación más grande del sistema; esta responsabilidad puede ser asignada al programador, pero ésto sería una gran pérdida de tiempo, por esto el sistema debe ocuparse de ello.

CARGA DE PROGRAMAS EN MEMORIA

La operación principal de la administración de la memoria es llevar la información a la memoria principal, para poder ser ejecutada por el procesador. En los sistemas modernos, esta administración se llama Memoria Virtual, basada en dos técnicas: Paginación y Segmentación.

Las técnicas que existen para la carga de programas en memoria son:

 

Partición fija

      

Consiste en dividir la memoria libre en varias partes de igual tamaño o de diferentes tamaños. En el caso de la partición fija de partes iguales, se plantean dos dificultades:

 

Un programa puede ser demasiado grande para caber en la partición. En este caso, el programador debe diseñar el programa mediante superposiciones, para que sólo una parte del programa esté en memoria principal. Cuando se necesita un módulo que no está presente, el programa de usuario debe cargar dicho módulo en la partición del programa, superponiéndose a los programas y datos que se encuentren en ella.

 

El uso de memoria principal es extremadamente ineficiente. Cualquier programa, sin importar lo pequeño que sea, ocupará una partición completa. Supongamos un programa que ocupa 120 Kb y se carga en una partición de 512 Kb, se malgasta el espacio interno de la partición y ésto se denomina fragmentación interna.

 

       En el caso de particiones de igual tamaño, si todas las particiones estuvieran ocupadas con procesos que no están listos para ejecutar y necesita cargarse un nuevo proceso, debe determinarse qué partición expulsarse de memoria. Esta decisión es una decisión de planificación, que se verá en un capítulo próximo.

       Pero en el caso de particiones de distintos tamaños, debe determinarse en que partición (por cuestiones de tamaño) se cargará el nuevo proceso. La forma más simple es asignar cada proceso a la partición más pequeña en que quepa (sin importar si la partición está cargada o no), lo que necesitará de una cola de expulsados para cada partición. Otra forma es asignar el proceso a la partición más pequeña entre aquellas que están libres (usando una única cola para todos los procesos); y si todas las particiones están ocupadas, se debe tomar una decisión de intercambio.

       Estamos suponiendo con este método que conocemos la cantidad máxima de memoria que necesitará un proceso, lo que no siempre es cierto.

 

 

Partición dinámica

      

Este método consiste en particiones de memoria de tamaños variable, o sea, a cada proceso se le asigna la cantidad de memoria que necesita (la cantidad exacta y ni un poco más). Tras el ingreso de nuevos procesos y la expulsión de otras, se generarán huecos de memoria inutilizados. Conforme pasa el tiempo, la memoria comienza a estar más fragmentada y su rendimiento decae; este fenómeno se denomina fragmentación externa.

       Una técnica para superar la fragmentación externa es la compactación. De vez en cuando, el sistema operativo desplaza los procesos para que estén contiguos de forma que toda la memoria libre quede junta en un bloque. Las dificultades que presenta la compactación son:

 

·         Es un procedimiento que consume tiempo de trabajo del procesador

 

·         Debe realizarse los movimientos de una región a otra, sin invalidar las referencias a memoria del programa

      

A pesar de la compactación, deben utilizarse algunos algoritmos para la ubicación de procesos en las particiones. Estos algoritmos son:

·         Mejor ajuste (Best-fit): se elige el bloque con el tamaño más parecido al del proceso entrante.

·         Primer ajuste (First-fit): comienza recorriendo la memoria desde el comienzo y escoge el primer bloque disponible en el que entre el proceso entrante.

·         Siguiente ajuste (Next-fit): recorre la memoria desde el lugar de la última ubicación y elige el siguiente bloque disponible que sea suficientemente grande.

·         Peor ajuste (Worst-fit): elige el bloque más grande posible.

            En un sistema multiprogramado con particiones dinámicas, habrá algún momento en el que todos los procesos de memoria principal estén en estado bloqueado y la memoria sea insuficiente, aún aplicando la compactación, para un proceso adicional. En este caso, el sistema operativo debe elegir qué proceso reemplazar. Este tema se ve en los temas que tienen que ver con memoria virtual, por lo que lo veremos más adelante.

volver a la pagina principal