Gestión de Memoria Principal

 

o Organización de la Memoria:

Organización del almacenamiento:

    El almacenamiento principal, es un recurso relativamente caro, por lo que los diseñadores de sistemas operativos intentan optimizar su uso.  En los últimos años ha disminuido su costo, pero sigue siendo más caro en relación con el almacenamiento secundario, y las aplicaciones actuales requieren cantidades mayores de almacenamiento principal. 

    La organización del almacenamiento es la forma de considerar el almacenamiento principal, bajo los siguientes esquemas de organización:

-    sistemas de usuario único

-    multiprogramación con particiones fijas, con traducción y carga con reubicación

-    multiprogramación con particiones fijas, con traducción y carga absoluta

-    multiprogramación con particiones variables

-    sistemas de intercambio de almacenamiento

    Sea cual sea el esquema de organización de la memoria que se adopte, hay que decidir qué estrategias de deben utilizar para obtener un rendimiento óptimo de la misma.

Administración:

    Es una tarea realizada por el sistema operativo que consiste en gestionar la jerarquia de memoria, en cargar y descargar procesos en memoria principal para que sean ejecutados. Para ello el sistema operativo gestiona lo que se conoce como MMU o Unidad de Administracion de Memoria, el cual es un dispositivo hardware que transforma las direcciones logicas en fisicas.

    Su trabajo es seguir la pista de que partes de la memoria estan en uso y cuales no lo estan, con el fin de poder asignar memoria a los procesos cuando la necesiten, y recuperar esa memoria cuando dejen de necesitarla, asi como gestionar el intercambio entre memoria principal y el disco cuando la memoria principal resulte demasiado pequeña para contener a todos los procesos

Jerarquía:

    La jerarquía de memoria es la organización piramidal de la memoria en niveles que tienen las computadoras.
 

    El 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.

Particiones: 

Esta forma de gestión consiste en dividir la memoria en varias zonas, pudiendo ser cada zona de un tamaño diferente. Esto se ilustra en la figura 6.3. El tamaño de las zonas podrá ser modificado eventualmente por algún usuario responsable de la administración del ordenador.


    Los trabajos se traducían mediante compiladores y ensambladores absolutos, para ejecutarse en una partición específica. Una vez introducido un proceso en una partición, permanece en ella hasta su finalización. Si un trabajo se iniciaba, y la partición para la que estaba compilado estaba ocupada, tenía que esperar, aunque estuvieran libres otras particiones. Esto provoca una pérdida de eficiencia.

 Fragmentación:

La fragmentación es la memoria que queda desperdiciada al usar los métodos de gestión de memoria que se vieron en los métodos anteriores. Tanto el primer ajuste, como el mejor y el peor producen fragmentación externa. La fragmentación es generada cuando durante el reemplazo de procesos quedan huecos entre dos o más procesos de manera no contigua y cada hueco no es capaz de soportar ningún proceso de la lista de espera. La fragmentación puede ser:

Fragmentación Externa: Existe el espacio total de memoria para satisfacer un requerimiento, pero no es contigua.

Fragmentación Interna: La memoria asignada puede ser ligeramente mayor que la requerida; esta referencia es interna a la partición, pero no se utiliza.

La fragmentación externa se puede reducir mediante la compactación para colocar toda la memoria libre en un solo gran bloque, pero esta sólo es posible si la relocalización es dinámica y se hace en tiempo de ejecución.

Condensación:

Unir o fusionar espacios o “huecos” adyacentes para formar uno más grande.

    Por ejemplo, si hay una solicitud de usuario de  5k y en la memoria hay disponibles 2 “huecos” contíguos pero uno es de 2k y el otro es 3k, entonces, para poder atender ésa solicitud de usuario, se “unen” los 2 “huecos” que formarían un sólo “hueco” de 5k, por tanto ahora si cabría la solicitud en el “hueco” que hay disponible.

Compactación:

Una solución para el problema de la fragmentación externa es la compactación. El objetivo consiste en desplazar el contenido de la memoria para colocar junta toda la memoria libre en un solo bloque de gran tamaño.

• Técnica que consiste en trasladar todas las áreas ocupadas del almacenamiento hacia algún extremo de la memoria.

• Es una solución de la fragmentación externa.

• El objetivo consiste en desplazar el contenido de la   memoria libre en un sólo bloque de gran tamaño.

• La compactación no siempre es posible, sólo es posible si la   relocalización es dinámica y se efectúa en el momento de la ejecución.

• Este esquema puede ser bastante costoso.

 Estrategias de colocación:

Permiten determinar en qué lugar de la memoria  principal se deben colocar  los programas y datos entrantes.

Tipos:

Mejor Ajuste: Colocar el trabajo en el menor bloque en el que quepa.

Primer Ajuste. Colocar el trabajo en el primer hueco de la lista de almacenamiento libre en el que quepa.

Peor Ajuste: Colocar el trabajo en el menor bloque en el que quepa.

o Administración de Memoria Virtual:

Espacio de direcciones lógicas vs. Físicas:

  1. La dirección de algo que genera el sistema de procesamiento central se conoce como la dirección lógica. Mientras que la dirección real de algo que hace el sistema de procesamiento central se conoce como la dirección física.
  2. Si bien la dirección lógica sale debido a la CPU, la dirección física se muestra como la ubicación de la dirección lógica que no es virtual.
  3. El espacio de direcciones lógicas se conoce como el conjunto de todas las direcciones lógicas que la CPU genera con la referencia del programa, mientras que el espacio de direcciones físicas se conoce como el conjunto de todas las direcciones que se asignan a cada dirección lógica.
  4. Las direcciones lógicas se vuelven visibles para el usuario ya que se encuentran dentro del marco virtual, mientras que las direcciones físicas nunca se vuelven visibles para el usuario.
  5. La persona que usa una computadora primero debe obtener el conocimiento de las direcciones lógicas para acceder a la dirección física, por otro lado, una persona no tiene ninguna forma de acceder a la siguiente ubicación.
  6. La dirección física tiene todo el cálculo realizado con la gestión de memoria. Por otro lado, toda la información dentro de la dirección lógica pasa a través de la unidad central de procesamiento.
  7. La memoria lógica puede seguir cambiando con el sistema, pero la dirección física de ese objeto siempre permanece igual.

Paginación:

En sistemas operativos de computadoras, los sistemas de paginación de memoria dividen los programas en pequeñas partes o páginas. Del mismo modo, la memoria es dividida en trozos del mismo tamaño que las páginas llamados marcos de página. De esta forma, la cantidad de memoria desperdiciada por un proceso es el final de su última página, lo que minimiza la fragmentación interna y evita la externa.

En un momento cualquiera, la memoria se encuentra ocupada con páginas de diferentes procesos, mientras que algunos marcos están disponibles para su uso. El sistema operativo mantiene una lista de estos últimos marcos, y una tabla por cada proceso, donde consta en qué marco se encuentra cada página del proceso. De esta forma, las páginas de un proceso pueden no estar continuamente ubicadas en memoria, y pueden intercalarse con las páginas de otros procesos.

En la tabla de páginas de un proceso, se encuentra la ubicación del marco que contiene a cada una de sus páginas. Las direcciones lógicas ahora se forman como un número de página y de un desplazamiento dentro de esa página (conocido comúnmente como offset). El número de página es usado como un índice dentro de la tabla de páginas, y una vez obtenida la dirección del marco de memoria, se utiliza el desplazamiento para componer la dirección real o dirección física. Este proceso se realiza en una parte del computador específicamente diseñada para esta tarea, es decir, es un proceso hardware y no software. 

 

Segmentación:

La segmentación de memoria es una técnica de gestión de memoria que pretende acercarse más al punto de vista del usuario. Los programas se desarrollan, generalmente, en torno a un núcleo central (principal) desde el que se bifurca a otras partes (rutinas) o se accede a zonas de datos (tablas, pilas, etc).

Desde este punto de vista, un programa es un conjunto de componentes lógicos de tamaño variable o un conjunto de segmentos, es decir, el espacio lógico de direcciones se considera como un conjunto de segmentos, cada uno definido por un identificador, y consistente de un punto de inicio y el tamaño asignado.​

La segmentación de un programa la realiza el compilador y en ella cada dirección lógica se expresará mediante dos valores: Número de segmento (s) y desplazamiento dentro del segmento (d).

Una de las implementaciones más obvias y directas de un espacio de memoria segmentado es asignar un segmento distinto a cada una de las secciones del espacio en memoria de un proceso. 


 

Paginación por Demanda:

La paginación por demanda introdujo la idea de cargar más una porción del programa en la memoria para su procesamiento.
Con la paginación por demanda, las tareas siguen divididas en páginas de tamaño igual que inicialmente residen en almacenamiento secundarios.
Cuando se empieza a ejecutar la tarea, sus páginas pasan a la memoria solo conforme se necesitan. La paginación pro demanda aprovecha el hecho que los programas se escriben de manera secuencial, de manera que mientras una sección o modulo está en proceso, los demás están ocioso (madnick & donovan, 1974).Una de las innovaciones de mayor importancia en la paginación por demanda es que hizo posible el amplio uso de la memoria virtual, el esquema de paginación por demanda permite al usuario ejecuta tareas con menos memoria principal de lo que se requería si el sistema operativo estuviera utilizando el esquema de asignación de memoria paginada que ya se describió.

Fallo de Página:

Un fallo de página es la secuencia de eventos que ocurren cuando un programa intenta acceder a datos (o código) que está en su espacio de direcciones, pero que no está actualmente ubicado en la RAM del sistema. El sistema operativo debe manejar los fallos de página haciendo residentes en memoria los datos accedidos, permitiendo de esta manera que el programa continue la operación como que si el fallo de página nunca ocurrió.
En el caso de nuestra aplicación hipotética, el CPU primeramente presenta la dirección deseada (12374) al MMU. Sin embargo, el MMU no tiene traducción para esta dirección. Por tanto, interrumpe al CPU y causa que se ejecute un software, conocido como el manejador de fallos de página. El manejador de fallos de página determina lo que se debe hacer para resolver esta falla de página. El mismo puede:
Encontrar dónde reside la página deseada en disco y la lee (este es usualmente el caso si el fallo de página es por una página de código)
Determina que la página deseada ya está en RAM (pero no está asignada al proceso actual) y reconfigura el MMU para que apunte a el
Apunta a una página especial que solamente contiene ceros y asigna una nueva página para el proceso solamente si este intenta alguna vez escribir a la página especial (esto se llama una página de copia en escritura y es utilizada a menudo por páginas que contienen datos inicializados a cero)
Obtener la página deseada desde otro lugar (lo que se discute en detalle más adelante)
Mientras que las primeras tres acciones son relativamente sencillas, la última no lo es. Por eso necesitamos cubrir algunos tópicos adicionales.

 Segmentación Paginada y Paginación Segmentada:

Paginación y segmentación son técnicas diferentes, cada una de las cuales busca brindar las ventajas enunciadas anteriormente.
Para la segmentación se necesita que estén cargadas en memoria, áreas de tamaños variables. Si se requiere cargar un segmento en memoria; que antes estuvo en ella y fue removido a memoria secundaria; se necesita encontrar una región de la memoria lo suficientemente grande para contenerlo, lo cual no es siempre factible; en cambio "recargar" una página implica solo encontrar un merco de página disponible.
A nivel de paginación, si quiere referenciar en forma cíclicas n páginas, estas deberán ser cargadas una a una generándose varias interrupciones por fallas de páginas; bajo segmentación, esta página podría conformar un solo segmento, ocurriendo una sola interrupción, por falla de segmento. No obstante, si bajo segmentación, se desea acceder un área muy pequeña dentro de un segmento muy grande, este deberá cargarse completamente en memoria, desperdiciándose memoria; bajo paginación solo se cargará la página que contiene los ítems referenciados.
Puede hacerse una combinación de segmentación y paginación para obtener las ventajas de ambas. En lugar de tratar un segmento como una unidad contigua, este puede dividirse en páginas. Cada segmento puede ser descrito por su propia tabla de páginas.
Los segmentos son usualmente múltiplos de páginas en tamaño, y no es necesario que todas las páginas se encuentren en memoria principal a la vez; además las páginas de un mismo segmento, aunque se encuentren contiguas en memoria virtual; no necesitan estarlo en memoria real.
Las direcciones tienen tres componentes: (s, p, d), donde la primera indica el número del segmento, la segunda el numero de la página dentro del segmento y la tercera el desplazamiento dentro de la página. Se deberán usar varias tablas:
SMT (tabla de mapas de segmentos): una para cada proceso. En cada entrada de la SMT se almacena la información descrita bajo segmentación pura, pero en el campo de dirección se indicará la dirección de la PMT (tabla de mapas de páginas) que describe a las diferentes páginas de cada segmento.
PMT (tabla de mapas de páginas): una por segmento; cada entrada de la PMT describe una página de un segmento; en la forma que se presentó la página pura.
TBM (tabla de bloques de memoria): para controlar asignación de páginas por parte del sistema operativo.
JT (tabla de Jobs): que contiene las direcciones de comienzo de cada una de las SMT de los procesos que se ejecutan en memoria.
En el caso, de que un segmento sea de tamaño inferior o igual al de una página, no se necesita tener la correspondiente PMT, actuándose en igual forma que bajo segmentación pura; puede arreglarse un bit adicional (S) a cada entrada de la SMT, que indicara si el segmento esta paginado o no.

Comentarios

Entradas populares