Mediante un
esquema se ejecutan programas que no se encuentran totalmente en memoria
principal. Por lo tanto, un programa puede tener un tamaño mayor a la memoria
física disponible.
Los
métodos más comunes para poner en práctica el almacenamiento visual son:
Paginación.
Segmentación
Las
direcciones referidas por un proceso se denominan Direcciones Virtuales o
Lógicas (L). Por otra parte, las direcciones disponibles en memoria principal
se denominan Direcciones Físicas (F).
En el momento
de ejecución de los programas, las direcciones lógicas deben hacerse
corresponder con las direcciones físicas, mediante una aplicación m: L --->
F, la cual se denomina Mapeo de Memoria (Zapping).
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 solo se tienen unos pocos
fragmentos de un proceso dado, se pueden mantener más procesos en la memoria.
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.
Los
métodos más comunes de implementación son mediante:
Técnicas
de “paginación”.
Técnicas
de “segmentación”.
Una
combinación de ambas técnicas.
Paginación
Cada proceso
tiene su propia tabla de páginas y cuando carga todas sus páginas en la o
memoria principal. Puesto que solo 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 perteneciente está presente en la memoria principal o
no. Si el bit indica que la pagina 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.
Segmentación
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.
Simplifica
la gestión de estructuras de datos crecientes. Si el programador no conoce a
priori cuan 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.
Permite
modificar y recopilar los programas independientemente, sin que sea necesario
recopilar o volver a montar el conjunto de programas por completo.
3.
Se
presta a la comparació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.
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án asignar los permisos de acceso de la forma
adecuada.
Organización
Cada proceso
tiene su propia tabla de segmento y que, cuando todos los segmentos se
encuentran en la memoria principal, la tabla de segmentos del proceso se crea y
se carga en la memoria. Cada entrada de la tabla contiene la dirección de
comienzo del segmento correspondiente de la memoria principal, así como su
longitud. La misma estructura se necesitara al hablar de un esquema de memoria
virtual basado en la segmentación donde las entradas de la tabla de segmentos
pasan a ser más complejas.
Puesto que
solo algunos de los segmentos de un proceso estarán en la memoria principal, se
necesita un bit en cada entrada de la tabla de segmentos para indicar si el
segmento correspondiente está presente en la memoria principal. Si el bit
indica que el segmento está en la memoria, la entrada incluye también la
dirección de comienzo y la longitud del segmento.
Otro bit de
control necesario en la entrada de la tabla de segmentos es un bit de modificación
que indique si el contenido del segmento correspondiente ha sido modificado
desde que se cargó por última vez en la memoria principal. Si no ha habido
cambios, no será necesario escribir en el disco el segmento cuando llegue el
momento de reemplazarlo en el espacio que ocupa actualmente
Sistema
de paginación / segmentación
La paginación
y la segmentación puras son métodos de manejo de memoria bastante efectivos,
aunque la mayoría de los sistemas operativos modernos implantan esquemas
combinados, es decir, combinan la paginación y la segmentación.
La idea de
combinar estos esquemas se debe a que de esta forma se aprovechan los conceptos
de la división lógica de los programas (segmentos) con la granularidad de las
páginas. De esta forma, un proceso estará repartido en la memoria real en
pequeñas unidades (paginas) cuya liga son los segmentos. También es factible
así el compartir segmentos a medida que las partes necesitadas de los mismos se
van reverenciando (paginas).
Para
comprender este esquema, nuevamente se verá cómo se traduce una dirección
virtual en una localidad de memoria real. Para la paginación y segmentación
puras se puede decir que el direccionamiento es `bidimensional' porque se
necesitan dos valores para hallar la dirección real.
Para
el caso combinado, se puede decir que se tiene un direccionamiento
`tridimensional'.
El sistema
debe contar con una tabla de procesos (TP) (Ver figura 3.3.4.1). Por cada
renglón de esa tabla se tiene un número de proceso y una dirección a una tabla
de segmentos. Es decir, cada proceso tiene una tabla de segmentos. Cuando un
proceso hace alguna referencia a memoria, se consulta TP para encontrar la
tabla de segmentos de ese proceso. En cada tabla de segmentos de proceso (TSP)
se tienen los números de los segmentos que componen a ese proceso.
Por cada segmento se tiene una
dirección a una tabla de páginas. Cada tabla de páginas tiene las direcciones
de las páginas que componen a un solo segmento. Por ejemplo, el segmento `A'
puede estar formado por las páginas reales
`a','b','c','p'
y `x'. El segmento `B' puede estar compuesto de las paginas `f','g','j','w' y
`z'. Otro aspecto importante es la estrategia para cargar páginas (o segmentos)
a la memoria RAM.
Se usan más
comúnmente dos estrategias: cargado de páginas por demanda y cargado de páginas
anticipada. La estrategia de cargado por demanda consiste en que las páginas
solamente son llevadas a RAM si fueron solicitadas, es decir, si se hizo
referencia a una dirección que cae dentro de ellas.
No hay comentarios.:
Publicar un comentario