PAGINACIÓN

 

 

El término memoria virtual se asocia normalmente con sistemas que emplean paginación, aunque también se puede usar memoria virtual basada en la segmentación. El uso de la paginación en la memoria virtual fue presentado por primera vez en el computador Atlas.

Cada proceso tiene su propia tabla de páginas y cuando carga todas sus páginas en la memoria principal, se crea y carga en la memoria principal una tabla de páginas. Cada entrada de la tabla de páginas contiene el número de marco de la página correspondiente en la memoria principal. Puesto que sólo algunas de las páginas de un proceso pueden estar en la memoria principal, se necesita un bit en cada entrada de la tabla para indicar si la página correspondiente está presente (P) en la memoria principal o no. Si el bit indica que la página está en la memoria, la entrada incluye también el número de marco para esa página.

Otro bit de control necesario en la entrada de la tabla de páginas es el bit de modificación (M), para indicar si el contenido de la página correspondiente se ha alterado desde que la página se cargó en la memoria principal. Si no ha habido cambios, no es necesario escribir la página cuando sea sustituida en el marco que ocupa actualmente.

La paginación permite que la memoria de un proceso no sea contigua, y que a un proceso se le asigne memoria física donde quiera que ésta esté disponible.

La paginación evita el gran problema de acomodar trozos de memoria de tamaño variable en el almacenamiento auxiliar.

Cuando es necesario intercambiar fragmento de códigos o datos que residen en la memoria principal, hay que encontrarles espacio en el almacenamiento auxiliar. Por sus ventajas la paginación es de uso común en muchos SO.

VENTAJAS DE LA PAGINACIÓN

Otra de la ventaja de la paginación es la posibilidad de compartir código común. Tiene mucha importancia en un entorno de tiempo compartido.

Como ejemplo de la paginación consideremos un sistema que brinda servicio a 40 usuarios, cada uno de los cuales ejecuta un editor de textos. Si el editor de textos consta de 150 k de código y 50 k de espacio de datos necesitaríamos 8000 k para apoyar a los 40 usuarios. Sin embargo si el código es reentrante puede compartirse.

 

 

SEGMENTACIÓN

 

La segmentación es un esquema de administración de memoria que apoya la perspectiva que el usuario tiene de la memoria. Un espacio de direcciones lógicas se compone de un conjunto de segmentos, cada uno de los cuales tiene un nombre y una longitud. Las direcciones especifican el nombre del segmento y el desplazamiento dentro de él, de manera que el usuario especifica cada dirección con dos cantidades: el nombre del segmento y un desplazamiento.

 

Implicaciones de la memoria virtual

 

La segmentación permite al programador contemplar  la memoria como si constara de varios espacios de direcciones o segmentos. Los segmentos pueden ser de distintos tamaños, incluso de forma dinámica. Las referencias a la memoria constan de una dirección de la forma (número de segmento, desplazamiento).

Esta organización ofrece al programador varias ventajas sobre un espacio de direcciones no segmentado:

1.           1.          Simplifica la gestión de estructuras de datos crecientes. Si el programador no conoce a priori cuán larga puede llegar a ser una estructura de datos determinada, es necesario suponerlo a menos que se permitan  tamaños de segmentos dinámicos. Con memoria virtual segmentada, a la estructura de datos se le puede asignar a su propio segmento y el S.O expandirá o reducirá el segmento cuando se necesite.

2.         2.          Permite modificar y recopilar los programas independientemente, sin que sea necesario recopilar o volver  a montar el conjunto de programas por completo.

3.         3.          Se presta a la compartición entre procesos. Un programador puede situar un programa de utilidades o una tabla de datos en un segmento que puede ser referenciado por otros procesos.

4.         4.          Se presta a la protección. Puesto que un segmento puede ser construido para albergar un conjunto de procedimientos y datos bien definido, el programador o el administrador del sistema podrá asignar los permisos de acceso de la forma adecuada.

 

COMO EJEMPLO DE SEGMENTACIÓN TENEMOS

Hay 5 segmentos numerados de 0 a 4, que se almacenan en memoria física. La tabla de segmentos tiene una entrada separada, para cada segmento, proporcionando la dirección de inicio del segmento en la memoria física (la base ), y la longitud del segmento ( el límite ). Por ejemplo el segmento 2 tiene 400 bytes de longitud y comienza en la localidad 4300 de modo que una referencia al byte 53 del segmento 2 corresponde a la localidad 4300+53= 4353. Una referencia al segmento 3,byte 852, corresponde a 3200 (la base del segmento 3) +852= 4052. Una referencia al byte 1.222 del segmento 0 generaría una trampa al SO, ya que este segmento solo tiene 1000 bytes de longitud.

 

PAGINACIÓN Y SEGMENTACIÓN COMBINADAS

 

Tanto la paginación como la segmentación tienen sus ventajas. La paginación elimina la fragmentación externa y de este modo, aprovecha la memoria principal de forma eficiente. Además, puesto que los fragmentos que se cargan y descargan de la memoria principal son de tamaño fijo e iguales, es posible construir algoritmos se gestión de memoria sofisticados que aprovechen mejor el comportamiento de los programas. La segmentación tiene las ventajas antes citadas, incluida la capacitación de gestionar estructuras de datos que puedan crecer, la modularidad y el soporte de la compartición y la protección. Para combinar las ventajas de ambas, algunos sistemas están equipados con hardware del procesador y software del S.O.

 

 

En un sistema con paginación y segmentación combinadas, el espacio de direcciones de un usuario se divide en varios segmentos según el criterio del programador. Cada segmento se vuelve a dividir en varias páginas de tamaño fijo, que tienen la misma longitud que un marco de memoria principal. Si el segmento tiene menor longitud que la página, el segmento ocupará sólo una página. Desde el punto de vista del programador, una dirección lógica todavía está formada por un número de segmento y un desplazamiento en el segmento. Desde el punto de vista de sistema, el desplazamiento del segmento se ve como un número de página dentro del segmento y un desplazamiento dentro de la página.

 

 

 

MEMORIA VIRTUAL

 

 

La memoria virtual es una técnica para proporcionar la simulación  de  un  espacio de  memoria mucho mayor que la memoria física de una máquina. Esta "ilusión" permite que los programas se hagan sin tener en cuenta el tamaño exacto de la memoria física.


    La ilusión de la memoria virtual está soportada por el mecanismo de traducción de memoria, junto con una gran cantidad de  almacenamiento  rápido  en  disco  duro.  Así en  cualquier  momento  el  espacio  de direcciones virtual hace un seguimiento de tal forma que una pequeña parte de él, está en memoria real y el resto almacenado en el disco, y puede ser referenciado fácilmente.

   Debido a que sólo la parte de memoria virtual que está almacenada en la memoria principal, es accesible a la CPU, según un programa va ejecutándose, la proximidad de referencias a memoria cambia, necesitando que algunas partes de la memoria virtual se traigan a la memoria principal desde el disco, mientras que otras ya ejecutadas, se pueden volver a depositar en el disco (archivos de paginación).

 

La memoria virtual ha llegado a ser un componente esencial de la mayoría de los S.O actuales. Y como en un instante dado, en la memoria sólo se tienen unos pocos fragmentos de un proceso dado, se pueden mantener más procesos en la memoria. Es más, se ahorra tiempo, porque los fragmentos que no se usan no se cargan ni se descargan de la memoria. Sin embargo, el S.O debe saber cómo gestionar este esquema.

La memoria virtual también simplifica la carga del programa para su ejecución llamado reubicación, este procedimiento permite que el mismo programa se ejecute en cualquier posición de la memoria física. 

En un estado estable, prácticamente toda la memoria principal estará ocupada con fragmentos de procesos, por lo que el procesador y el S.O tendrán acceso directo a la mayor cantidad de procesos posibles, y cuando el S.O traiga a la memoria un fragmento, deberá expulsar otro. Si expulsa un fragmento justo antes de ser usado, tendrá que traer de nuevo el fragmento de manera casi inmediata. Demasiados intercambios de fragmentos conducen a lo que se conoce como hiperpaginación: donde el procesador consume más tiempo intercambiando fragmentos que ejecutando instrucciones de usuario. Para evitarlo el S.O intenta adivinar, en función de la historia reciente, qué fragmentos se usarán con menor probabilidad en un futuro próximo.

Los argumentos anteriores se basan en el principio de cercanía o principio de localidad que afirma que las referencias a los datos y el programa dentro de un proceso tienden a agruparse. Por lo tanto, es válida la suposición de que, durante cortos períodos de tiempo, se necesitarán sólo unos pocos fragmentos de un proceso.

Una manera de confirmar el principio de cercanía es considerar el rendimiento de un proceso en un entorno de memoria virtual.

El principio de cercanía sugiere que los esquemas de memoria virtual pueden funcionar. Para que la memoria virtual sea práctica y efectiva, se necesitan dos ingredientes. Primero, tiene que existir un soporte de hardware y, en segundo lugar, el S.O debe incluir un software para gestionar el movimiento de páginas o segmentos entre memoria secundaria y memoria principal.

 

    Justo después de obtener la dirección física y antes de consultar el dato en memoria principal se busca en memoria-cache, si esta entre los datos recientemente usados la búsqueda tendrá éxito, pero si falla, la memoria virtual consulta memoria principal , ó,  en el peor de los casos se consulta de disco (swapping).

 

Es una técnica que permite la ejecución de procesos que pueden no estar completamente en memoria o sea que los programas pueden ser enviados a la memoria física. Esto libera a los programadores de la preocupación por las limitaciones del almacenamiento en memoria. No obstante la memoria virtual no es fácil de implementar.

La capacidad de ejecutar un programa que se encuentra parcialmente en memoria física tendría varias ventajas:

·         Un programa ya no estaría restringido por la cantidad de memoria física disponible. Los usuarios podrían escribir programas para un espacio de direcciones virtuales muy grande, simplificando las labores de programación.

·         Como cada programa del usuario ocuparía menos memoria física, podrían ejecutarse más programas al mismo tiempo, aumentando la utilización de la UCP y la productividad, pero sin incrementar el tiempo de respuesta o el tiempo de retorno.

·         Se requeriría menos E/S para cargar o intercambiar cada uno de los programas del usuario, por lo que se ejecutarían más rápidos.

De esta manera un programa en ejecución que no se encontrara totalmente en memoria beneficiaría tanto al usuario como al sistema.

La memoria virtual es la separación de la memoria lógica del usuario de la memoria física. Esta separación permite proporcionar a los programadores una gran memoria virtual cuándo solo se dispone de una memoria física pequeña. La memoria virtual facilita la tarea de programación, puesto que el programador, ya no se tiene que preocupar por la cantidad de memoria física disponible, sino dedicarse al problema que debe solucionar. Una consecuencia de la memoria virtual es que las superposiciones casi desaparecen.

Generalmente la memoria virtual se implementa mediante la paginación por demanda. La segmentación por demanda también puede usarse para proporcionar la memoria virtual pero es más complejo, debido a que los segmentos tienen tamaños variables.

 

 

JERARQUÍA DE MEMORIA

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Para mayor información, utiliza la siguiente liga:

http://exa.unne.edu.ar/depar/areas/informatica/SistemasOperativos/MonogSO/MEMVIRO2.htm#_top#_top