Administracion de Memoria
En un sistema Mono programado, 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 aún más para hacer sitio a varios procesos. La tarea
de subdivisión la lleva a cabo dinámicamente el sistema operativo y se conoce
como gestión de memoria.

En un sistema multiprogramado
resulta vital una gestión efectiva de la memoria. Si sólo hay unos pocos
procesos en memoria, entonces la mayor parte del tiempo estarán esperando a la E/S
y el procesador estará desocupado. Por ello, hace falta repartir eficientemente
la memoria para meter tantos procesos como sea posible.
Carga
de programas en memoria principal
La
tarea central de cualquier sistema de gestión de memoria es traer los programas
a memoria principal para su ejecución en el procesador. En casi todos los
sistemas multiprogramados modernos, esta tarea supone un esquema sofisticado
conocido como memoria virtual. La memoria virtual está, a su vez, basada en el
uso de una de dos técnicas básicas; segmentación y/o paginación. Antes de ver
estás técnicas de memoria virtual, se debe preparar el terreno considerando
técnicas más simples que no requieren el uso de memoria virtual. Una de estas
técnicas, la partición, se ha venido usando con distintas variantes en algunos
sistemas operativos ahora obsoletos. Las otras dos técnicas, la paginación
simple y la segmentación simple, no se usan en solitario. No obstante, el
estudio de la memoria virtual resultará más sencillo si se consideran en primer
lugar estas dos técnicas, sin tener en cuenta la memoria virtual.
Paginación
Tanto
las particiones de tamaño fijo como las de tamaño variable hacen un uso
ineficiente de la memoria; las primeras generan fragmentación interna, mientras
que las segundas originan fragmentación externa. Supóngase, no obstante, que la
memoria principal se encuentra particionada en trozos iguales de tamaño fijo
relativamente pequeños y que cada proceso está dividido también en pequeños
trozos de tamaño fijo y del mismo tamaño que los de memoria. En tal caso, los
trozos del proceso, conocidos como páginas, pueden asignarse a los trozos
libres de memoria, conocidos como marcos o marcos de página.
En un instante dado, algunos de los marcos de memoria están en uso y otros están libres. El sistema operativo mantiene una lista de los marcos libres. El proceso A, almacenado en disco, consta de cuatro páginas. Cuando llega el momento de cargar este proceso, el sistema operativo busca cuatro marcos libres y carga las cuatro páginas del proceso A en los cuatro marcos. El proceso B, que consta de tres páginas y el proceso C, que consta de cuatro, se cargan a continuación. Más tarde, el proceso B se suspende y es expulsado de memoria principal. Después, todos los procesos de memoria principal están bloqueados y el sistema operativo tiene que traer un nuevo proceso, el proceso D, que consta de cinco páginas.
Supóngase ahora, como en este ejemplo, que no hay suficientes marcos sin usar contiguos para albergar al proceso. ¿Impedirá esto al sistema operativo cargar D? La respuesta es negativa, puesto que se puede emplear de nuevo el concepto de dirección lógica. Ya no será suficiente con un simple registro base. En su lugar, el sistema operativo mantiene una tabla de páginas para cada proceso. La tabla de páginas muestra la posición del marco de cada página del proceso. Dentro del programa, cada dirección lógica constará de un número de página y de un desplazamiento dentro de la página. Recuérdese que, en el caso de la partición simple, una dirección lógica era la posición de una palabra relativa al comienzo del programa; el procesador realizaba la traducción a dirección física. Con paginación, el hardware del procesador también realiza la traducción de direcciones lógicas a físicas. Ahora, el procesador debe saber cómo acceder a la tabla de páginas del proceso actual. Dada una dirección lógica (número de página, desplazamiento), el procesador emplea la tabla de páginas para obtener una dirección física (número de marco, desplazamiento).
Memoria
virtual
La
memoria virtual permite una multiprogramación muy efectiva y releva al usuario
de las rígidas e innecesarias restricciones de la memoria principal. Las ventajas de la memoria virtual son importantes. La cuestión es: ¿Funcionará
este esquema? En un primer momento, se produjo un gran debate sobre este punto,
pero la experiencia con numerosos sistemas operativos demuestra más allá de
cualquier duda que la memoria virtual funciona. Por consiguiente, ha llegado a
ser un componente esencial de la mayoría de los sistemas operativos actuales.
Para
comprender cuál él es elemento clave y por qué la memoria virtual generó tanto
debate, se va a considerar de nuevo la labor del sistema operativo con respecto
a la memoria virtual. Considérese un proceso grande formado por un programa
largo y un conjunto de series de datos. Durante un corto periodo, la ejecución
puede estar reducida a una pequeña sección del programa (por ejemplo, una
subrutina) y acceder sólo a una o dos series de datos. Si esto es así, sería un
claro desperdicio cargar docenas de fragmentos para el proceso cuando se van a
usar sólo unos pocos antes de que pase a estar suspendido o se descargue. Se
puede aprovechar mejor la memoria cargando tan sólo unos pocos fragmentos.
Además, si el programa se bifurca a una instrucción o hace referencia a datos
de un fragmento que no está en memoria, se producirá un fallo de página. Este
fallo le dice al sistema operativo que traiga el fragmento deseado.
Paginación y Segmentación
Combinadas
Tanto
la paginación como la segmentación tienen sus ventajas. La paginación, que es
transparente al programador, 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 memoria principal son de tamaño
constante e igual para todos, es posible construir algoritmos de gestión de
memoria sofisticados que aprovechen mejor el comportamiento de los programas,
tal y como se verá. La segmentación, que es visible para el programador, tiene
las ventajas antes citadas, incluida la capacidad de manejar 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 sistema operativo que las permiten.
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 también está formada por un número de segmento y un desplazamiento en el segmento. Desde el punto de vista del 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.
ver video sobre administracion de memorias:
No hay comentarios.:
Publicar un comentario