Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El término memoria virtual suele asociarse, con la capacidad que tienen algunos sistemas, para
acceder a direcciones, situadas en un espacio de almacenamiento virtual, mucho mayor, que el
disponible en el almacenamiento real de un sistema informático determinado.
El concepto de memoria virtual no es un concepto nuevo, ya que aparece en 1.960 en un sistema
informático denominado ATLAS, diseñado y construido en la Universidad de Manchester; pero las
tecnologías existentes en aquel tiempo, no proporcionaban la ayuda necesaria para su implantación, sin
embargo, actualmente con la ayuda de esas tecnologías, se ha generalizado el empleo de la memoria
virtual y la mayor parte de los ordenadores actuales, ya pueden gestionar el almacenamiento virtual.
Los métodos más comunes para gestionar la memoria de los sistemas, que permiten la
existencia de un almacenamiento virtual, son la paginación y la segmentación y en algunos sistemas, se
puede utilizar una combinación de los dos métodos.
En los sistemas de almacenamiento real, para que un proceso se pudiera ejecutar, era necesario
que el proceso completo, estuviese cargado en el almacenamiento real, sin embargo, los sistemas de
memoria virtual, se caracterizan muy especialmente, porque las direcciones utilizadas por los
programas en ejecución, no necesitan estar todas ellas en el almacenamiento real.
La clave del concepto de memoria virtual, consiste en la diferenciación que es preciso realizar,
entre las direcciones a las que hace referencia un programa en ejecución y las direcciones disponibles
en el almacenamiento real.
Las direcciones a las que hace referencia un programa en ejecución, se denominan direcciones
lógicas o virtuales y las direcciones disponibles en el almacenamiento real, se denominan se
denominan direcciones físicas o reales.
El intervalo de direcciones lógicas o virtuales, a las que hace referencia un programa en
ejecución, constituyen espacio de direcciones virtuales (V) y el intervalo de direcciones físicas o reales,
disponibles en el almacenamiento real, constituyen el espacio de direcciones reales (R).
En los sistemas de almacenamiento virtual ya implantados, lo normal es que (V) > (R), aunque
se han construido algunos sistemas en los que (V) < (R).
Lógicamente, aunque los procesos solamente hacen referencia a direcciones virtuales, estas
deben ejecutarse en el almacenamiento real, por lo tanto, es preciso establecer la correspondencia entre
las direcciones virtuales y las direcciones reales durante la ejecución del proceso.
Además, esto debe hacerse con rapidez, pues de lo contrario, el rendimiento del sistema se
degradaría a niveles inaceptables, eliminando así, las ganancias logradas, por el empleo del concepto
de almacenamiento virtual.
Los mecanismos de traducción dinámica de direcciones, DAT (Dynamic Address Translation),
convierten las direcciones virtuales en direcciones reales, mientras se ejecuta un proceso.
Todos estos sistemas tienen la propiedad, de que las direcciones contiguas en el espacio de
direcciones virtuales de un proceso, no son necesariamente contiguas en el almacenamiento real, por lo
tanto, el usuario queda liberado de la preocupación por la posición de los procedimientos y los datos en
el almacenamiento real.
ORGANIZACIÓN DEL ALMACENAMIENTO DE VARIOS NIVELES.
Si se va a permitir, que el espacio de direcciones virtuales del usuario, sea más grande que el
espacio de direcciones reales y además se va a multiprogramar el sistema, permitiendo que varios
usuarios compartan el recurso de almacenamiento real, será preciso proporcionar un almacenamiento
auxiliar, que toma el nombre de memoria virtual, para mantener los programas y los datos, que no
caben en el almacenamiento real y esto se consigue con un esquema de almacenamiento a dos niveles:
• El primer nivel es el almacenamiento real, en el que se ejecutan los procesos y en el que
deben encontrarse, las instrucciones y los datos del proceso, que esta ejecutando en cada
momento.
• El segundo nivel, se encuentra en la memoria virtual, de un tamaño mucho mayor, capaz de
almacenar los datos y los programas, que no se pueden mantener en el almacenamiento real.
Como el almacenamiento real es compartido por muchos procesos y cada proceso puede tener
un espacio de direcciones virtuales, mucho más grande que el almacenamiento real, en un momento
dado, solo será posible mantener una pequeña parte de los programas y los datos de un proceso, en el
almacenamiento real
MEMORIA REAL
CORRESPONDENCIA DE BLOQUES.
El método a seguir consiste, en que el sistema tiene que agrupar en bloques de información
y registrar en una estructura de datos determinada, el lugar en donde se han situado los diversos
bloques de memoria virtual, por lo tanto, cuanto mayor sea el tamaño del bloque, menor será la
fracción del almacenamiento real dedicada a guardar la información de correspondencias.
La decisión de hacer bloques más grandes reduce el espacio necesario, para guardar las
estructuras de datos, que utiliza el mecanismo de correspondencias, sin embargo, los bloques grandes
tardan más en ser transferidos, de la memoria virtual a la memoria real y además consumen más
espacio en la memoria real, limitando el número de procesos que pueden compartir la memoria real.
También será preciso decidir si los bloques deben ser del mismo o de distinto tamaño. Sí los
bloques son del mismo tamaño, se llaman páginas y la organización de la memoria virtual utiliza el
esquema de paginación. Sí los bloques pueden ser de tamaños diferentes, se llaman segmentos y la
organización de la memoria virtual utiliza el esquema de segmentación.
Tal y como se ha expresado anteriormente, algunos sistemas, establecen una combinación de
ambas técnicas, utilizando segmentos, que son entidades de tamaño variable, divididos en páginas de
tamaño fijo.
Las direcciones de un sistema de correspondencia de bloques de información, son
bidimensionales y para referirse a un elemento de información cualquiera, el programa especifica el
bloque de información, en el que se encuentra el elemento y su desplazamiento a partir del inicio del
bloque, por lo tanto, una dirección virtual (V), se denota con un par ordenado (b,d), donde b es el
número del bloque y d es el desplazamiento dentro del bloque.
La traducción de una dirección virtual V = (b,d) a una dirección de almacenamiento real R, se
efectúa de la forma que expresa la siguiente figura:
REGISTRO ORIGEN
DE LA TABLA
DE BLOQUES
DIRECCIÓN VIRTUAL
a BLOQUE DESPLAZAMIENTO
b
b d
Cada proceso tiene su propia tabla de correspondencias de bloques y la tabla contiene una
entrada por cada bloque del proceso. Las entradas siguen un orden secuencial desde 0 a n y en cada
entrada figuran fundamentalmente, dos informaciones: la dirección base donde comienza el bloque y
su longitud.
Realmente, todo lo que se ha expresado anteriormente, es valido tanto para bloques de tamaño
fijo o variable, por lo tanto, a continuación se tratará de especificar las diferencias existentes entre un
sistema u otro.
Si los bloques son de tamaño fijo e iguales unos a otros, estos toman el nombre de páginas y se
estará estableciendo un sistema de paginación por el contrario, si los bloques son de tamaño variable,
estos toman el nombre de segmentos y se estará estableciendo un sistema de segmentación.
Como se ha dicho anteriormente, en algunos sistemas se realiza una combinación de los dos
métodos, definiendo los bloques de tamaño variable, es decir segmentos, que posteriormente se dividen
en partes fijas e iguales, es decir páginas. En estos sistemas se deberá establecer la condición, de que el
tamaño de los segmentos debe ser múltiplo del tamaño de la página.
PAGINACIÓN.
REGISTRO ORIGEN
DE LA TABLA
DE PÁGINAS
DIRECCIÓN VIRTUAL (V)
a N. PÁGINA DESPLAZAMIENTO
p d
TABLA PÁGINAS
a+p a d
p DIRECCIÓN REAL (R)
p p’ p’* Tp R = p’* Tp + d
r v R W E A B p’
Un proceso en ejecución hace referencia a una dirección virtual V = (p,d). Antes de que el
proceso comience su ejecución, el sistema carga en el almacenamiento principal la tabla de
correspondencia de páginas, según el esquema que figura a continuación:
REGISTRO ORIGEN
DE LA TABLA
DE PÁGINAS
DIRECCIÓN VIRTUAL (V)
a N. PÁGINA DESPLAZAMIENTO
p d
TABLA PÁGINAS
a
DIRECCIÓN REAL (R)
p
p p’ R = p’* Tp + d
p d V = (p,d)
TABLA DE PÁGINAS
p p’ p’ d DIR REAL
R = p’* Tp + d
Un programa en ejecución hace referencia a una dirección virtual V = (p,d). Cada entrada en la
memoria asociativa se revisa en forma simultánea, para encontrar la página p, que una vez localizada,
devuelve p' como el marco de página que corresponde a p. El número del marco p' se multiplica por el
tamaño de la página y se concatena con d, para formar la dirección real R= p’*Tp + d.
En la figura se puede observar que las flechas dirigidas a la tabla de páginas situada en la
memoria asociativa, entran directamente en cada entrada. Esto indica que se revisa al mismo tiempo
cada entrada de la tabla de páginas, para buscar el valor de p.
Para realizar la búsqueda así, es preciso incorporar al sistema un hardware específico y esta
es la razón de que la memoria asociativa, tenga un costo mucho mayor, similar al que se necesita,
para la utilización de las memorias caché, por lo tanto, normalmente no se utiliza la
correspondencia asociativa pura.
TRADUCCIÓN DE DIRECCIONES CON CORRESPONDENCIA COMBINADA.
DIR. ORIGEN DE
TABLA PÁGINAS
Nº PÁGINA DESPLAZAMIENTO DIR VIRTUAL
a
p d V = (p,d)
p
MAPA DE CORRESP.
ASOCIATIVA PARCIAL
p p’
p’
TABLA PÁGINAS
a
N MARCO DESPLAZAMIENTO DIR. REAL
p p’ p’ d R = p’*Tp + d
En los sistemas de almacenamiento virtual con segmentación, una dirección virtual es un par
ordenado V = (s,d), donde s es el numero de segmento en el almacenamiento virtual, en donde se
encuentra el elemento al que se hace referencia y d es el desplazamiento dentro del segmento s en
donde se encuentra dicho elemento.
Un proceso solo se puede ejecutar, si su segmento activo se encuentra en la memoria principal
y los segmentos se transfieren desde la memoria virtual a la memoria real como unidades completas.
Un segmento entrante puede colocarse, en cualquier área disponible de la memoria principal,
cuyo tamaño sea suficiente para contenerlo y las estrategias de colocación para la segmentación, son
idénticas a las empleadas en la multiprogramación con particiones variables, es decir, empleando las
técnicas de primer ajuste, mejor ajuste y peor ajuste.
La traducción dinámica de direcciones en la segmentación de la siguiente forma:
REGISTRO ORIGEN
DE LA TABLA
DE SEGMENTOS
N. SEGMENTO DESPLAZAMIENTO
a s
s d DIR. VIRTUAL (V)
TABLA SEGMENTOS
a d < LONG
s d DIRECCIÓN REAL (R)
Una de las cualidades de los sistemas con segmentación es el control del acceso que puede
realizarse, que se consigue asignando a cada proceso ciertos derechos de acceso a cada segmento,
denegando por completo el acceso a algunos segmentos, es decir, normalmente no es conveniente
otorgar a cada proceso un acceso ilimitado a todos los segmentos del sistema.
La protección del almacenamiento con claves, en una asignación de almacenamiento no
contigua, en un sistema multiprogramado, se realiza mediante las claves de usuario, es decir, mientras
la clave de protección del procesador sea 2, correspondiente al usuario B, el programa del usuario B,
solo podrá hacer referencia a los bloques del almacenamiento que tengan la protección 2.
Estas claves están bajo el estricto control del sistema operativo y solo pueden manipularse
mediante instrucciones privilegiadas. Los tipos de control de acceso más utilizados por los sistemas
actuales son los siguientes:
• Si un proceso tiene acceso para lectura a un segmento, podrá obtener cualquier información
contenida en el segmento y en algunos casos, podrá realizar una copia completa del segmento.
• Si el proceso tiene acceso para actualizar un segmento, puede modificar cualquier parte del
contenido del segmento y colocar información adicional. Si lo desea el proceso puede destruir
la información del segmento, aunque en algunos sistemas este derecho puede estar separado.
• Un proceso con acceso para ejecución a un segmento, puede ejecutar ese segmento como
programa. El acceso de ejecución se suele denegar para segmentos de datos.
• Un proceso con acceso para adición a un segmento, puede agregar información
adicional solamente al final del segmento, pero no puede modificar la información
existente.
Un sistema con estos cuatro tipos de control de acceso, se pueden crear 16 modos de control de
acceso diferentes, es decir, 2. Con tres tipos de control se podrían realizar los siguientes:
r v LONG R W E A B b
r = 0 Si el segmento no está en el almacenamiento primario.
r = 1 Si el segmento está en el almacenamiento primario.
Un proceso en ejecución, hace referencia a una dirección virtual V = (s,d). El número de
segmento s, debe utilizarse como índice en la tabla de correspondencia, que comienza en la dirección
a, situada en el registro origen de la tabla de segmentos, para formar la dirección de memoria real se
utiliza el valor s como índice en la tabla de correspondencia para determinar la entrada del segmento s
de la tabla de correspondencias. Si esta tabla contiene la dirección de memoria real b, en la cual,
comienza el segmento. El desplazamiento d, se suma a b, para formar la dirección real, R = b + d,
correspondiente a la dirección virtual V = (s,d).
En la figura se muestra con detalle, una entrada representativa de una tabla de correspondencias
de segmentos. Un bit de residencia r, indica si el segmento se encuentra o no en la memoria principal.
Si el segmento se encuentra en el almacenamiento principal, b es la dirección en la que
comienza el segmento. Si este no se encuentra en el almacenamiento principal, entonces, v es la
dirección de la memoria virtual, en donde debe leerse el segmento, antes de que el proceso pueda
continuar su ejecución.
Será preciso, verificar en todas las referencias al segmento, que el desplazamiento d es menor
que la longitud del segmento, para asegurar que se encuentra dentro de él.
Si el segmento no se encuentra en el almacenamiento principal, se produce una interrupción,
por fallo de segmento, lo cual hace que el sistema operativo asuma el control y cargue el segmento
desde la dirección a de la memoria virtual a la memoria real.
COMPARTIMIENTO EN UN SISTEMA CON SEGMENTACIÓN.
Una de las ventajas que tiene la segmentación sobre la paginación es que la segmentación es un
concepto lógico, no físico.
En su forma general, los segmentos no están restringidos de una manera arbitraria a un cierto
tamaño, ya que estos pueden ser, dentro de unos limites razonables, tan grandes o tan pequeños como
sea necesario.
Un segmento correspondiente a una tabla tiene el tamaño de la tabla y un segmento
correspondiente a una estructura de datos dinámica, puede crecer o decrecer según lo haga la propia
estructura de datos.
Un segmento correspondiente a un código de procedimientos generado por un compilador, será
tan grande como sea necesario para contener el código.
La compartición de segmentos es bastante sencilla, en comparación con la compartición de una
página, en un sistema de paginación.
Si un proceso en un sistema de paginación ocupa tres páginas y media de longitud, entonces, en
lugar de tener entradas simples, para indicar el vector compartido, habrá que tener entradas
individuales, para cada una de las páginas donde reside el proceso, por lo tanto, la gestión de una
página parcial, puede ser difícil.
La situación empeora con una estructura de datos dinámica, cuando una estructura así, crece y
ocupa una nueva página, las indicaciones de la compartición en la tabla de correspondencia, deberán
ajustarse en el momento de la ejecución.
En un sistema con segmentación, cuando el segmento se declara como compartido, las
estructuras de datos pueden crecer o decrecer, sin afectar a la información de la tabla de segmentos,
que indica el espacio donde residen los segmentos compartidos.
Para que dos procesos puedan compartir un segmento, basta que tengan entradas en sus tablas
de segmentos, que apunten al mismo segmento del almacenamiento principal.
SISTEMAS CON SEGMENTACIÓN / PAGINACIÓN COMBINADAS.
DIR. ORIGEN DE
TAB. SEGMENTOS
DIRECCIÓN VIRTUAL
s p d
TLB
s p p’
p
T. DE SEGMENTOS T. DE PAGINAS PARA
DE UN PROCESO EL SEGMENTO S
p
b DIRECCIÖN REAL
LPT BPT p p’ R = p’ * Tp + d
En este proceso de traducción se da por hecho, que cada elemento de información se encuentra
donde se supone que debe estar, pero hay muchos pasos en donde puede fallar el proceso.
La búsqueda en la tabla de correspondencia de segmentos puede indicar que el segmento s no
se encuentra en el almacenamiento principal, ocasionando una interrupción por fallo de segmento y
que el sistema operativo tiene que resolver esa interrupción, localizando el segmento en el
almacenamiento virtual, creando una tabla de páginas para el segmento y cargando la tabla de páginas
apropiada en el almacenamiento principal, reemplazando posiblemente a una tabla de páginas de este u
otro proceso.
Si el segmento se encuentra en el almacenamiento primario, la referencia a la tabla de
correspondencia de páginas puede indicar que la página deseada no se encuentra en el almacenamiento
principal, lo cual generaría una interrupción por fallo de página y el sistema operativo tiene que
. .
.
TABLAS DE PROCESOS
DEL SISTEMA OPERATIVO .
a
.
b
. .
. .
. . .
n
. .
. .
. .
.
En el nivel más alto, esta una tabla de procesos que contiene una entrada por cada proceso
conocido por el sistema. La entrada en dicha tabla para un proceso dado, apunta a la tabla de
correspondencia de segmentos del proceso.
Cuando el tamaño de palabra de una maquina aumenta y el número de bits utilizados para
definir el número de página es alto, la cantidad de páginas que podemos tener crece de forma
alarmante y con ello el tamaño de la tabla de páginas, haciendo que las búsquedas se hagan muy lentas
y el método de la paginación pierda toda su eficacia.
Una posible solución consiste en segmentar la tabla de páginas, que debe ser muy grande, con
lo que ahorramos tener que recorrer toda la tabla. Dicha solución es utilizada por los grandes sistemas
operativos de la familia IBM.
El diagrama que se expresa a continuación, indica como se realiza la conversión de una
dirección lógica a una dirección física, en este sistema.
DIRECCIÓN
ORIGEN DE
T. SEGEMENTOS
STBR DIRECCIÓN VIRTUAL
p d
ERROR
s p’ p’< LTP
SEGM. DE LA T. PAG
T. PÁGINAS
LTP BTP p’ m m * TP + d
DIRECCIÓN REAL
acceder al elemento correspondiente de la tabla de páginas, obteniendo así, el valor del marco de
página necesario, para obtener la dirección real de la memoria.
Este método consiste, en segmentar la tabla de páginas, cuando el número de páginas es muy
grande y los segmentos en que se divide la tabla de páginas pueden ser de tamaño variable.
COMPARTIMIENTO EN UN SISTEMA CON PAGINACIÓN/SEGMENTACIÓN.
En los sistemas con paginación/segmentación, son muy importantes las ventajas de compartir
segmentos. El compartimiento se logra, mediante entradas en las tablas de correspondencia de
segmentos de diferentes procesos, que apuntan a la misma tabla de correspondencia de páginas.
El compartimiento tanto en sistemas de paginación, como en aquellos con segmentación o
paginación/segmentación, requiere un cuidadoso manejo por parte del sistema operativo.
Es preciso considerar lo que sucedería, si una página entrante reemplazara, una página
compartida por varios procesos.
T. DE SEGMENTOS T. DE PÁGINAS
PROCESO A SEGMENTOS
PROCESO A
T. DE PROCESOS *
COMPARTIDOS *
PROCESO B *
PROCESO B
Anteriormente hemos analizado los distintos esquemas que se pueden utilizar para la gestión de
memoria en los sistemas operativos.
De todos estos esquemas algunos son los más apropiados para la gestión de memoria en los
sistemas de almacenamiento real, otros se consideran más apropiados para la gestión de memoria en
los sistemas de almacenamiento virtual y alguno se puede utilizar en ambos sistemas.
Todos estos esquemas tienen un objetivo común, que consiste en mantener simultáneamente
varios procesos en memoria, para permitir la multiprogramación; no obstante, no todos ellos requieren
que el proceso completo se encuentre en la memoria, antes de poder ejecutarlo.
Las técnicas que se pueden utilizar, para la administración de la memoria virtual, permiten la
ejecución de procesos, que no están totalmente cargados en la memoria real, siendo esta la principal
ventaja de la utilización de la memoria virtual, que consiste en que los programas pueden ser mayores
que el espacio de memoria real asignado para ellos, liberando a los programadores de la preocupación
por las limitaciones de la memoria real.
No obstante, por todas las consideraciones expuestas con anterioridad, se puede llegar a la
conclusión, de que el concepto de memoria virtual no es fácil de implantar y si no se diseña de una
manera eficiente, puede reducir considerablemente el rendimiento del sistema.
Una vez analizados los distintos problemas que se pueden presentar con la utilización de una
estrategia u otra, para la gestión de la memoria virtual:
• Paginación.
• Segmentación.
• Segmentación paginada.
Se trata ahora, de analizar aquellos aspectos, que son específicos de la administración de la
memoria virtual, que pueden exigir la incorporación de técnicas actuales, para conseguir el rendimiento
más adecuado en el sistema.
PAGINACIÓN POR DEMANDA.
La paginación por demanda tiene por objeto, introducir en la memoria real las páginas que son
necesarias, para la ejecución de los procesos.
Si se examina un programa cualquiera, se puede llegar a la conclusión de que en la mayoría de
los casos, no es preciso mantener el programa completo en la memoria, para que este pueda ser
ejecutado.
Las conclusiones que se obtienen del examen anteriormente citado son las siguientes:
• Los programas en general, contienen un conjunto de instrucciones para la gestión de errores
poco frecuentes, que se ejecutarán en muy contadas ocasiones.
• Existirán diferentes estructuras de datos, a las que normalmente se le asigna más memoria
de la que realmente necesitan.
• Ciertas opciones y características de un programa, se han incluido para el tratamiento de
situaciones que no se presentan normalmente.
Incluso en aquellos casos en que se necesitara todo el programa, es probable, que no se requiera
todo al mismo tiempo.
La capacidad de ejecutar un programa que se encuentra parcialmente en memoria puede tener
las siguientes ventajas:
• Un programa ya no estará restringido por la cantidad de memoria física disponible, por lo
tanto, los usuarios podrán escribir los programas, para un espacio virtual muy grande,
simplificando la programación.
• Como cada programa de usuario ocupará menos memoria física, podrán ejecutarse más
programas simultáneamente, aumentando la utilización del procesador y la productividad
del sistema, sin incrementar el tiempo de respuesta o el tiempo de retorno.
• Se requerirá menos tiempo para las operaciones de E/S, ya que para cargar o intercambiar
cada uno de los procesos del usuario, no se necesita hacerlo del proceso completo, por lo
que se aumentará la velocidad de ejecución.
Por todas estas consideraciones, un programa en ejecución, que no se encuentre totalmente en
la memoria, beneficia tanto al usuario como al sistema.
Generalmente la técnica, que se utiliza para la administración de la memoria virtual, es la
paginación por demanda, pero también puede implantarse en un sistema de segmentación, ya que
algunos sistemas ofrecen un esquema de segmentación paginada, donde los segmentos se dividen en
páginas.
De esta manera, la perspectiva del usuario es la segmentación, pero el sistema operativo puede
implantar esta perspectiva con la paginación por demanda.
La segmentación por demanda también puede utilizarse, para la administración de la memoria
virtual, pero los algoritmos de sustitución de segmentos, son mucho más complejos, que los de
sustitución de páginas, dado que los segmentos tienen tamaños variables.
Un sistema de paginación por demanda, es muy similar a un sistema de paginación, en el que
ha sido preciso incluir los intercambios de páginas, es decir, los procesos residen normalmente en la
memoria virtual y cuando se quiere ejecutar un proceso, se van introduciendo en la memoria principal
las páginas que son necesarias, por lo tanto, el intercambio no se produce por procesos completos, sino
por páginas y no se incorporará a la memoria una página, a menos que se necesite.
Según este concepto, el proceso se considera como una secuencia de páginas, en vez de un gran
espacio contiguo de direcciones. En este caso, el término intercambio no es totalmente correcto, ya que
un intercambio, manipula procesos completos, mientras que ahora, lo que se necesita es un paginador,
que intercambie las páginas individuales de un proceso, por ello se debe utilizar, el término paginar en
lugar de intercambiar, en la paginación por demanda.
La paginación por demanda incorpora a la memoria solamente las páginas necesarias, evitando
así, colocar en memoria páginas que nunca se utilizarán, reduciendo así el tiempo de intercambio y la
cantidad de memoria física necesaria.
Este esquema de administración de memoria requiere apoyo del hardware, que se ha definido
para la paginación y en cada entrada de la tabla de páginas, existirá un bit de residencia, que indicará si
la página esta en la memoria real (1) o por el contrario la página está en la memoria virtual (0).
Si introducimos solamente las páginas que realmente se necesitan, el proceso se ejecutará de la
misma forma, que si hubiéramos incorporado todas las páginas, ya que mientras el proceso se ejecuta y
accede a páginas residentes en memoria, la ejecución prosigue normalmente.
A continuación se expresa el modelo de comportamiento utilizado en la paginación por
demanda, muy similar al modelo que se ha descrito anteriormente para la paginación.
PAG 0
TABLA DE
PAG 1 CORRESPONDENCIA
PAG 2
Si se trata de utilizar una página que no este incorporada a la memoria, se producirá una
interrupción por falta de página, es decir, el hardware de paginación, al traducir la dirección mediante
la tabla de páginas, observará que el bit de residencia es 0, generando la interrupción para que el
sistema operativo, haga la transferencia de esa página a la memoria real desde el almacenamiento
secundario.
0
6 REINICIAR
INSTRUCCIÓN
M LIBRE
5 RESTABLECER 4 CARGAR LA
TABLA PÁGINAS PÁGINA QUE FALTA
• Una memoria secundaria, que contiene las páginas, que no están en la memoria principal y
normalmente, es un disco de alta velocidad que se denomina dispositivo de intercambios.
Además de esta ayuda del hardware, se requiere un considerable apoyo del software, como se
verá más adelante.
Un aspecto critico de esta técnica, es la capacidad para reiniciar cualquier instrucción, después
de un fallo de página. En la mayoría de los casos, es fácil cumplir con este requisito, ya que un fallo de
página, puede ocurrir en cualquier referencia a memoria.
Si el fallo de página ocurre al buscar la instrucción, se puede reiniciar efectuando de nuevo la
búsqueda, pero si el fallo de página ocurre al buscar un operando, será necesario buscar de nuevo la
instrucción, decodificarla y luego buscar el operando.
En el peor de los casos, si consideramos una instrucción de tres direcciones, como por ejemplo,
ADD A y B, colocando el resultado en C. Los pasos para ejecutar esta instrucción serán:
Es posible que no siempre sean necesarios todos los pasos, pero en cualquier caso, nos
enfrentamos a tres componentes principales del tiempo de servicio del fallo de página:
• Servir la interrupción de fallo de página.
• Leer la página.
• Reanudar el proceso.
La primera y tercera tareas pueden reducirse con una codificación cuidadosa a varios cientos de
instrucciones y pueden suponer una media de 100 microsegundos cada una, sin embargo, el tiempo de
cambio de página estará próximo a los 25 milisegundos.
Un disco de cabeza móvil típico tiene un tiempo medio de posicionamiento de 15 milisegundos,
un tiempo medio de latencia de 8 milisegundos y un tiempo medio de transferencia de un milisegundo,
por lo tanto, el tiempo total de paginación estará muy próximo a los 25 milisegundos.
Si una cola de procesos que esperan al dispositivo, es decir, otros procesos que han provocado
fallos de página, se debe añadir el tiempo de espera en la cola, mientras que el dispositivo de
paginación esté ocupado por otros procesos, antes de atender nuestra solicitud, lo cual incrementa más
aun nuestro tiempo de intercambio.
De esta manera, si tomamos un tiempo promedio de servicio de fallo de página de 25
milisegundos y un tiempo de acceso a memoria de 100 nanosegundos, entonces el tiempo de acceso
efectivo expresado en nanosegundos sería:
Tiempo de acceso efectivo = (1-p) * 100 + p * 25 msg.= (1-p) * 100 + p * 25.000.000 nanoseg. =
= 100 + 24.999.900 * p
Se comprueba, que el tiempo de acceso efectivo es directamente proporcional a la tasa de fallos
de página, por lo tanto, si se considera que un acceso de cada mil provoca un fallo de página, el tiempo
de acceso efectivo es aproximadamente de 25.000 microsegundos, es decir, 25 milisegundos.
por tanto, la relación 25.000/100 nos indicaría que, el computador sería
25.000.000/1.000 = 25.000
250 veces más lento debido a la paginación por demanda y eso no sería admisible.
Si un acceso de cada 25.000 provoca un fallo de página, el tiempo de acceso efectivo es de 1.000
nanosegundos, es decir, un microsegundo.
25.000.000/25.000 = 1.000 por tanto, la relación 1.000/100 nos indicaría, que el computador sería en
este caso, 10 veces más lento debido a la paginación por demanda y esto si que podría ser admisible.
Por lo tanto, si queremos una degradación menor al 10% se necesitaría:
110 > 100 + 25.000.000 * p
10 > 25.000.000 * p
SUSTITUCIÓN DE PÁGINAS.
0 A 0 1 3
1 B 1 1 7
2 C 2 0
3 D 3 1 5
4 E 4 0
5 F 5 0 0 N
6 G 6 1 2 1 Q
7 H 7 1 8 2 G
3 A
8 I 8 0 A B C D
9 J 9 0 4 M
E F G H
M. VIRTUAL T. DE PÄGINAS 5 D
I J K L
6 K
0 K 0 1 6
7 B M N O P
1 L 1 0
8 H
2 M 2 1 4 . . . .
3 1 0 9 R
3 N
M. REAL MEM. SECUNDARIA
4 O 4 0
5 P 5 0
6 1 1
6 Q
7 R 7 1 9
8 0
8 S
9 0
9 T
M. VIRTUAL T. DE PÄGINAS
que solo utilizan cinco páginas, se obtiene una mayor utilización de la UCP y por lo tanto, una mayor
productividad con diez marcos de sobra.
Sin embargo puede ocurrir que en un momento determinado, cada uno de estos procesos
intente utilizar sus diez páginas, entonces, serían necesarios 80 marcos, cuando solo tenemos 50.
Aunque esta solución es muy poco probable, es posible que se produzca una sobreasignación y es
necesario tratarla.
Sí se supone, que está ejecutándose un proceso de usuario y ocurre un fallo de página, se
produce una interrupción y el control pasa al sistema operativo, el cual consulta sus tablas internas y
determina sí se trata de un fallo de página o de un acceso ilegal a la memoria.
El sistema operativo determina en que lugar del disco se encuentra la página deseada,
posteriormente se comprueba que no existen marcos libres. Al llegar a este punto, el sistema operativo
podría abortar el proceso de usuario, sin embargo, la paginación por demanda, es una técnica, que el
sistema operativo proporciona, para mejorar la utilización y la productividad del sistema informático,
por lo tanto, se pueden producir distintas estrategias para solucionar el problema.
Una primera estrategia consiste en descargar un proceso y liberar todos sus marcos, reduciendo
el nivel de multiprogramación, esto puede ser una buena idea y la consideraremos con mayor detalle
posteriormente.
Otra estrategia quizá más interesante podría ser el reemplazo de páginas, que consiste en lo que
se va a exponer a continuación.
Si no hay ningún marco libre, se busca uno que no se esté utilizando en ese momento y lo
liberamos. Se puede liberar un marco escribiendo en el disco todo su contenido y modificando la tabla
de páginas y todas las demás tablas, para indicar que la página ya no se encuentra en memoria.
El marco liberado puede usarse ahora para contener la página por la cual falló el proceso, de
esta manera, se modifica la rutina de servicio del fallo de página, para incluir el reemplazo de página.
1. Encontrar la ubicación en disco de la página deseada.
2. Buscar un marco libre:
• Si hay un marco libre, utilizarlo.
• De lo contrario, utilizar un algoritmo de reemplazo de página, para seleccionar la
víctima.
• Escribir la página víctima en disco y modificar la tabla de páginas.
3. Copiar la página deseada en el nuevo marco libre y modificar la tabla de páginas.
4. Reanudar el proceso de usuario.
Es preciso observar que si no quedan marcos libres, se requieren dos transferencias, una de
entrada y otra de salida. Esta situación duplica el tiempo de servicio de un fallo de página y en
consecuencia aumentará el tiempo de acceso efectivo.
Este tiempo de proceso adicional, se puede reducir utilizando un bit de modificación, así cada
página o marco puede tener asociado un bit de modificación en el hardware, que pone el bit de
modificación en 1 para una página, cuando en ella se realiza alguna modificación.
Cuando se selecciona una página para reemplazo, examinamos su bit de modificación y si esta
activo, sabemos que la página ha sido modificada, por lo tanto, debemos escribirla en el disco
nuevamente, en el caso de que el bit de modificación no este activo no será necesario escribirla sobre el
disco. Del mismo modo, tampoco será necesario copiar la página en el disco, si los bits de protección
indican que la página es de solo lectura.
Este esquema puede reducir considerablemente el tiempo para servir un fallo de página, ya que
reduce a la mitad el tiempo de E/S, si la página no se ha modificado.
El reemplazo de páginas es esencial para la paginación por demanda, pues completa la
separación entre la memoria lógica y la memoria física.
Con la paginación por demanda, el espacio de direcciones lógicas ya no esta restringido por la
memoria física y si tenemos un proceso de 20 páginas, podemos ejecutarlo en 10 marcos, empleando un
algoritmo de reemplazo, para encontrar un marco libre cuando sea necesario.
Para implantar la paginación por demanda debemos resolver dos grandes problemas:
• Desarrollar un algoritmo de asignación de marcos.
• Desarrollar algoritmos para el reemplazo de páginas.
El diseño de algoritmos adecuados para resolver estos problemas es una tarea importante, ya
que la E/S de disco es muy costosa, por lo tanto, una pequeña mejora en los métodos de paginación por
demanda, produce amplias ganancias en el rendimiento del sistema.
ALGORITMOS DE REEMPLAZO DE PÁGINAS.
Existen diferentes algoritmos para el reemplazo de páginas y cada sistema operativo, cuenta
con su propio esquema de reemplazo de páginas.
Para la evaluación de los distintos algoritmos, utilizaremos una determinada serie de
referencias a memoria y sobre ella calcular él número de fallos de página.
Esta serie de referencias se puede generar:
• Utilizando un generador de números aleatorios.
• Rastreando el sistema y anotando la dirección de cada referencia a memoria.
Para determinar el número de fallos de página, para una serie de referencias y un algoritmo de
reemplazo de páginas determinado, necesitamos conocer también el número de marcos de página
disponibles.
En teoría, si el número de marcos disponibles aumenta, se debe reducir el número de fallos de
página, tal y como se expresa en la figura.
Número de
Fallos Página
Número de Marcos
Para evaluar los algoritmos de reemplazo de páginas, utilizaremos la siguiente serie de
referencias:
7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1.
El algoritmo más sencillo es el algoritmo Primero en entrar Primero en salir. Según este
algoritmo, cuando se necesita sustituir una página, se elegirá aquella que lleve más tiempo en memoria.
Para controlar el tiempo de permanencia en memoria de las páginas, se utiliza una cola de llegada a
memoria de las mismas.
16 __
Nº DE FALLOS 14 __
12 __ * *
DE PÁGINA 10 __ *
9 __ *
6 __
5 __ * *
4 __
2 __
1 2 3 4 5 6
Nº DE MARCOS DE PÁGINA
1 2 3 4 1 2 5 1 2 3 4 5
1 1 1 4 4 4 5 5 5
2 2 2 1 1 1 3 3
3 3 3 2 2 2 4
x x x x x x x x x Total 9 Fallos
Si incrementamos en uno los marcos disponibles, veremos que la tasa de fallas es mayor.
1 2 3 4 1 2 5 1 2 3 4 5
1 1 1 1 5 5 5 5 4 4
2 2 2 2 1 1 1 1 5
3 3 3 3 2 2 2 2
4 4 4 4 3 3 3
x x x x x x x x x x Total 10 fallos
Parece lógico pensar que el número de fallos de página, debería disminuir al ir aumentando el
número de marcos disponibles, sin embargo, si observamos la figura, al pasar de 3 a 4 marcos el
número de fallos de página aumenta, pasando de 9 a 10 fallos de página.
Este resultado va en contra de la teoría anteriormente citada y se denomina Anomalía de
Belady, la cual indica que para algunos algoritmos de reemplazo de páginas, la tasa de fallos de página,
puede aumentar al incrementarse el número de marcos asignados. En las investigaciones realizadas
sobre los distintos algoritmos se observó esta anomalía.
ALGORÍTMO ÓPTIMO.
Se producen 9 fallos de página y este será el tratamiento óptimo para esta serie.
Si se compara con el algoritmo FIFO, que presentó 15 fallos de página, vemos que si
descontamos los tres primeros fallos de página, que son comunes en todos los algoritmos, es el doble
mejor, que el algoritmo FIFO, ya que el número de fallos de página disminuye a la mitad.
Ningún algoritmo de reemplazo, puede procesar esta serie de referencias, con menos de 9 fallos
de página, si utilizamos 3 marcos de memoria real, por desgracia, es difícil implantar el algoritmo de
reemplazo de páginas óptimo (OPT) o (MIN), ya que requiere un conocimiento futuro de la serie de
referencias. En consecuencia, este algoritmo se utiliza preferentemente para realizar estudios
comparativos.
ALGORITMO LRU. (Least Recently Used).
Si el algoritmo óptimo no es factible, quizá sea posible una aproximación y este algoritmo es
una buena aproximación a la solución óptima, considerando que aquellas páginas muy usadas en el
pasado reciente lo serán también en el futuro, es decir, en este mismo sentido podríamos considerar que
las poco utilizadas en el pasado, seguirán sin usarse en el futuro, por lo tanto, de deberá sustituir
aquella página, que haya sido menos usada recientemente.
Si aplicamos este criterio a la serie de referencias utilizada anteriormente, tendremos:
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
7 7 7 2 2 4 4 4 0 1 1 1
0 0 0 0 0 0 3 3 3 0 0
1 1 3 3 2 2 2 2 2 7
x x x x x x x x x x x x
Se producen 12 fallos de página, un resultado sensiblemente mejor que el del algoritmo FIFO.
La política LRU, se utiliza frecuentemente como algoritmo de reemplazo de páginas y se
considera que es bastante buena, además no se produce la anomalía de Belady.
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
7 7 7 7 3 3 3 7
0 0 0 0 0 0 0
1 1 1 4 1 1
2 2 2 2 2
x x x x x x x x
Se producen 8 fallos de página, un resultado sensiblemente mejor que el del algoritmo FIFO.
El problema principal es como implantar este algoritmo ya que para ponerlo en práctica, el
sistema debe contabilizar de alguna manera, el tiempo en el que se produce cada acceso a memoria,
para poder clasificar las páginas según su utilización, este control se puede realizar de varias formas:
Contadores hardware.
La solución más simple consiste en incorporar un contador que se incremente
automáticamente, con cada referencia a memoria y añadir un campo a las entradas de la tabla de
páginas, que pueda almacenar el valor del contador, en el campo correspondiente de la tabla de
páginas, cuando se realiza una referencia a una página determinada. Para servir un fallo de página, el
sistema buscará en dicha tabla, la pagina cuyo valor de contador sea menor.
Pilas.
Otra alternativa consiste en mantener una pila que contiene los números de los marcos de
página utilizados. Cada vez que se utiliza un marco de página, su numero se coloca al principio de
la pila. En un momento determinado, la página menos recientemente utilizada, será la que está
situada en el marco que esta situado en el fondo de la pila.
Supongamos que la serie de referencia utiliza los cuatro marcos de página siguientes:
0, 1, 2, 3, 2, 1
3 2 1
2 3 2
1 1 3
0 0 0
Esta alternativa se puede realizar como es natural por software, pero él número de operaciones
que exige cada acceso a memoria:
Si se utiliza el mismo sistema, expresado anteriormente con serie utilizada en los algoritmos
anteriores se puede obtener el siguiente resultado.
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
3 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
2 1 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0
1 0 0 0 1 2 2 3 0 4 2 2 0 3 3 1 2 0 1 7
0 7 7 7 7 7 1 1 2 3 0 4 4 4 0 0 3 3 2 2 2
x x x x x x x x
Con esta serie hay que observar, que las referencias de página, hay que situarlas en los marcos
de página en donde se encuentran, ya que las matrices se forman según el número de marcos de página.
7 0 1 2
0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3
0 0 1 1 1 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0
1 0 0 0 0 1 1 0 1 1 1 1 0 0 1 1 1 0 0 0
2 0 0 0 0 2 0 0 0 0 2 1 1 0 1 2 1 1 0 0
3 0 0 0 0 3 0 0 0 0 3 0 0 0 0 3 1 1 1 0
0 3 0 4
0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3
0 0 0 0 0 0 0 1 1 1 0 0 1 0 1 0 0 1 0 0
1 1 0 1 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 0
2 1 0 0 0 2 0 0 0 0 2 1 1 0 1 2 1 1 0 0
3 1 0 1 0 3 0 0 1 0 3 0 0 0 0 3 1 1 1 0
2 3 0 3
0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3
0 0 1 1 1 0 0 1 1 1 0 0 1 1 0 0 0 1 0 0
1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0
2 0 1 0 0 2 0 1 0 0 2 0 1 0 0 2 1 1 0 1
3 0 1 1 0 3 0 1 1 0 3 1 1 1 0 3 1 1 0 0
2 1 2 0
0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3
0 0 0 0 0 0 0 1 1 1 0 0 1 0 1 0 0 1 1 1
1 1 0 1 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 1
2 1 0 0 1 2 0 0 0 1 2 1 1 0 1 2 0 1 0 1
3 1 0 0 0 3 0 0 0 0 3 0 0 0 0 3 0 0 0 0
1 7 0 1
0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3
0 0 0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0
1 1 0 1 1 1 1 0 1 0 1 1 0 1 1 1 1 0 1 1
2 0 0 0 1 2 0 0 0 0 2 0 0 0 0 2 0 0 0 0
3 0 0 0 0 3 1 1 1 0 3 1 0 1 0 3 1 0 1 0
Algunos sistemas no proporcionan ayuda suficiente del hardware, para el reemplazo de páginas
LRU, siendo necesario utilizar la ayuda de otros algoritmos, como por ejemplo el FIFO.
Otra manera de ofrecer una cierta ayuda consiste en la utilización de un bit de referencia, que
se coloca un 1 cada vez que se hace referencia a una página, bien sea para leer o escribir, este bit de
referencia esta asociado a cada entrada de la tabla de páginas.
En un principio, el sistema operativo borra todos los bits asignándoles un 0, cuando comienza
la ejecución de un proceso de usuario, el hardware asigna un 1 al bit de referencia asociado a cada
página, cuando se realiza un acceso a dicha página. Después de un cierto tiempo, examinando los bits
de referencia se puede determinar, que páginas se han utilizado y cuales no, pero no se puede saber el
orden en que se han utilizado. Esta información parcial de la ordenación nos lleva a la utilización de
varios algoritmos de reemplazo de páginas, que se aproximan al LRU.
ALGORITMOS DE BITS ADICIONALES DE REFERENCIA.
Se puede obtener información adicional de la ordenación, utilizando un byte de ocho bits por
cada página, que puede situarse en cada una de las entradas de la tabla de páginas, anotando en ese
byte, los bits de referencia a intervalos regulares.
Así por ejemplo cada 100 microsegundos, una interrupción del reloj del sistema transfiere el
control al sistema operativo, que desplaza el bit de referencia de cada página, al bit de orden superior
del byte de ocho bits, desplazando los otros bits una posición a la derecha y descartando el bit de
orden inferior, posteriormente los bits de referencia se pondrán a cero.
Estos registros de desplazamiento de ocho bits, contienen la historia de la utilización de la
página durante los últimos ocho periodos de tiempo. Si el registro de desplazamiento contiene
00000000, entonces la pagina no ha sido utilizada en ninguno de los ocho últimos periodos, sin embargo,
una página que se utiliza por lo menos una vez en cada periodo tendría un valor 11111111, en su registro
de desplazamiento.
Una página con un valor 11000100 en su registro histórico, ha sido utilizada más recientemente,
que una con valor 01110111. Si interpretamos estos bytes de ocho bits, como enteros sin signo, la página
con el menor numero en valor absoluto, es la página menos recientemente utilizada y puede
reemplazarse. No obstante puede ocurrir, que existan varios números iguales, en este caso, se puede
utilizar para el reemplazo una selección FIFO entre ellas.
El número de bits históricos puede variar y esa cantidad se seleccionaría, dependiendo del
hardware disponible, para acelerar las actualizaciones todo lo posible. En un caso extremo, él número
puede reducirse a cero, dejando únicamente el bit de referencia y a esta versión se la denomina
algoritmo de reemplazo de páginas de segunda oportunidad.
ALGORITMO DE SEGUNDA OPORTUNIDAD.
Otra forma de implantar el algoritmo de segunda oportunidad, consiste en utilizar también una
cola circular, en la cual un apuntador indica cual es la siguiente página que se reemplazará, por lo tanto,
cuando se requiere un marco, el apuntador avanza hasta encontrar una página, con el bit de referencia a
cero y conforme avanza va borrando los bits de referencia que están en uno.
Cuando todos los bits están en uno, el apuntador recorre toda la cola, dando a cada página una
segunda oportunidad y borrando todos los bits de referencia, antes de seleccionar la siguiente página
para el reemplazo, por lo tanto, si todos los bits están activos, el reemplazo de segunda oportunidad se
convierte en un reemplazo FIFO degradado.
BIT DE BIT DE
REFERENCIA REFERENCIA
0 0 0 0
0 1 0
0
1 1
1 0 0 1
1 0
0 1 0 0
1 1 1 0
1 1 1 0
1 0
0 0
M. FÍSICA M. FÍSICA
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
*71 71 71 *21 21 21 *21 *41 41 41 40 *31 31 30 30 *01 01 00 01 01
*01 01 00 *01 *00 01 00 *21 21 20 20 *21 *11 11 11 *11 *71 71 71
*11 10 10 31 31 30 30 *31 *01 01 01 00 *21 21 21 20 *20 *11
X X X X X X X X X X X X X X
TOTAL = 14 FALLOS DE PAGÍNA
Este algoritmo utiliza como criterio reemplazar la pagina más frecuentemente usada y se basa
en el argumento de que la página con el menor recuento, probablemente acabe de llegar y por lo tanto
aun tiene que utilizarse.
Como se podría esperar, no es muy común la utilización de estos dos últimos criterios, para el
reemplazo de páginas y además su implantación es bastante costosa y no se aproximan mucho al
algoritmo Óptimo (OPT), ya explicado anteriormente.
ALGORITMOS ADICIONALES.
Existen muchos algoritmos, que pueden utilizarse para el reemplazo de páginas, entre ellos se
puede citar el NRU (No recientemente utilizado) o NFU (De uso no frecuente). Con este algoritmo,
consideramos tanto el bit de referencia como el bit de modificación, como un par ordenado, dando
lugar a las cuatro clases siguientes:
(0,0) Ni usada ni modificada.
(0,1) No usada (recientemente), pero modificada.
(1,0) Usada pero no modificada.
(1,1) Usada y modificada.
Cuando es necesario un reemplazo de página, cada una de ellas se puede encontrar en una de
estas cuatro clases. Al elegir una página para sustituir, se seleccionarán primero las de clase inferior.
La aparente contradicción que se produce en la clase (0,1), es decir, no usada pero modificada,
se resuelve, si consideramos que en estos algoritmos, periódicamente, el sistema pone a cero los bits de
referencia, ya que si no se hiciera así, llegaría un momento en el que todas las páginas en memoria
tendrían activado el bit de referencia y este dejaría de tener un valor selectivo.
ALGORITMOS ADJUNTOS.
arquitectura del ordenador utilizado y las características de las instrucciones de maquina, imponen unos
mínimos de asignación por proceso.
Si se considera una instrucción, que permita mover información entre dos campos de memoria,
su utilización permite que cada uno de los operandos, apunte a direcciones de páginas distintas entre sí
y respecto a la que contiene la instrucción, por lo tanto, su ejecución exige un mínimo de tres páginas
en memoria.
Esto se puede complicar algo más si los operandos utilizan direccionamiento indirecto, es decir,
cada uno apunta a una posición de memoria, que contiene la dirección del dato, en este caso, se
necesitarán cinco marcos para asegurar su ejecución.
Todo ello nos indica, que el sistema deberá asegurar a todo proceso, un mínimo de páginas en
memoria, marcado por la instrucción más exigente al respecto, entre el juego de instrucciones de la
maquina correspondiente. A este mínimo le podemos denominar mínimo estructural, impuesto por la
arquitectura del ordenador.
Si por cualquier razón (sustitución de paginas, procesos más prioritarios, etc.) un proceso se
queda con menos marcos de los indicados por dicho mínimo estructural, el sistema deberá suspenderlo
es decir el Planificador a medio plazo deberá retirarlo (Swap-out) al almacenamiento secundario, para
liberar los marcos que ocupe.
Aunque en principio, el número de marcos asignados a un proceso podrá reducirse hasta ese
mínimo estructural, si en un momento determinado, el proceso no tuviera los marcos de página
necesarios, provocaría inmediatamente sucesivos fallos de página, dando lugar a una anomalía en el
funcionamiento del sistema operativo conocida por Hiperpaginación.
ALGORITMOS DE ASIGNACIÓN.
Tienen por objeto, determinar cuantos marcos de página van a ser asignados a un proceso, que
se carga en memoria inicialmente y también determinan si esta asignación se va a realizar bajo un
ámbito local o global, es decir, si para el reemplazo se deberán tener en cuenta solo los marcos de
página asignados al proceso o bien puede hacerse extensible a todos los marcos de memoria física
disponibles.
Un condicionante a tener en cuenta, para determinar cuantos marcos de memoria se asignan a
un proceso, es la limitación existente en cuanto al mínimo número de marcos, que viene determinado
por la arquitectura del ordenador.
Si una instrucción puede referenciar como máximo hasta n direcciones de memoria de forma
directa o indirecta, habrá que reservar, para asegurar que el proceso pueda ejecutarse en cualquier
condición, n+1 marcos de página.
Las políticas de asignación pueden seguir los siguientes criterios:
• Asignación local.
• Asignación global.
• Asignación igualitaria o equitativa.
• Asignación proporcional.
ASIGNACIÓN LOCAL.
Cuando un proceso necesita cargar una nueva página en memoria y no exista ningún marco
libre, el sistema operativo, selecciona una página activa, para ser intercambiada a la memoria
secundaria, del conjunto de páginas activas del proceso que necesita la página.
ASIGNACIÓN GLOBAL.
Cuando un proceso necesita cargar una nueva página en memoria y no existe ningún marco
libre para alojarla, el algoritmo de reemplazo puede asignar cualquier página activa, para ser
intercambiada a la memoria secundaria, pertenezca o no dicha página, al proceso que generó el fallo de
página.
En este caso, las condiciones de ejecución de un proceso, se hacen dependientes de las
condiciones de ejecución de otros procesos cargados en la memoria, ya que un proceso en estado de
espera (WAIT) o listo (READY), puede ver disminuido su número de marcos de página asignados, por la
paginación de otro proceso actualmente activo.
Si se aumenta excesivamente el grado de multiprogramación y se sigue un criterio de
asignación global de marcos, aumentan las posibilidades de que un proceso entre en un estado de
excesiva paginación, produciéndose la anomalía citada anteriormente Hiperpaginación.
ASIGNACIÓN IGUALITARIA O EQUITATIVA.
Ai, para que sean enteros, mayores al numero mínimo de marcos requerido por el conjunto de
instrucciones y que sumados no excedan de M.
Así por ejemplo, para el mismo caso anteriormente citado, suponiendo que tenemos 120
páginas para los 80 marcos libres, a cada página se le asignará el número de marcos que necesita,
multiplicado por la razón 80/120, de esta manera:
A los dos primeros procesos se le asignan: 50 * 80/120 aproximadamente 33 marcos.
Al tercer proceso se le asignan: 15 * 80/120 aproximadamente 10 marcos.
Al cuarto proceso se le asignan: 5 * 80/120 aproximadamente 3 marcos.
Con esta distribución quedará un marco libre para algún requerimiento posterior.
Tanto en la asignación igualitaria o equitativa, como en la asignación proporcional, la
asignación para cada proceso, puede variar de acuerdo con el nivel de multiprogramación.
Si aumenta el nivel de multiprogramación, cada proceso perderá algunos marcos, para
proporcionar al nuevo proceso la memoria necesaria, sin embargo, si disminuye el nivel de
multiprogramación, los marcos asignados al proceso que sale, pueden distribuirse entre los que se
quedan.
Es preciso observar que con la asignación proporcional o la igualitaria, se trata de igual manera
a un proceso de alta prioridad y a uno de baja prioridad, sin embargo, por definición, queremos darle
más memoria al proceso de alta prioridad, para acelerar su ejecución, en perjuicio de los de baja
prioridad.
Una estrategia podría ser utilizar un esquema de asignación proporcional, donde la tasa de
marcos no dependa de los tamaños relativos de los procesos, sino de sus prioridades o de una
combinación de tamaño y prioridad.
Así por ejemplo, para el mismo caso anteriormente citado, trataremos de distribuir los 80
marcos disponibles proporcionalmente a la prioridad de los procesos. Si suponemos que los cuatro
procesos tienen las siguientes prioridades 1, 2, 3, 4, y la prioridad aumenta en sentido creciente, se
conseguiría la siguiente distribución:
En este caso, a cada proceso le asignaremos el número de marcos proporcionalmente a la
prioridad que aumenta en sentido creciente, por lo tanto, si tenemos en cuenta que, la suma de las
prioridades es 10, multiplicaremos la prioridad del proceso por la razón 80/10, de esta manera:
Al primer proceso se le asignan: 1 * 80/10 = 8 marcos.
Al segundo proceso se le asignan: 2 * 80/10 = 16 marcos.
Al tercer proceso se le asignan: 3 * 80/10 = 24 marcos.
Al cuarto proceso se le asignan 4 * 80/10 = 32 marcos.
Por lo tanto, los cálculos teniendo en cuenta que la suma de 50 + 100 + 45 + 20 = 215 serían los
siguientes:
50 * 80 / 215 = 4.000 / 215 = 18 marcos de página.
100 * 80 / 215 = 8.000 / 215 = 37 “ “
45 * 80 / 215 = 3.600 / 215 = 16 “ “
20 * 80 / 215 = 1.600 / 215 = 7 “ “
La suma total sería de 78 marcos de página y quedarían dos libres.
En el caso de que se quieran distribuir los marcos de página proporcionalmente al tamaño y
a la prioridad, considerando que la prioridad disminuye en orden ascendente. Si tenemos en cuenta
el mismo ejemplo utilizado anteriormente, obtendríamos el siguiente resultado:
Si los tamaños de los procesos son: 50, 50, 15, 5
Si el número de marcos asignados a un proceso de baja prioridad, desciende por debajo del
número mínimo requerido por la arquitectura del ordenador, debemos descargar sus páginas restantes,
liberando todos los marcos asignados.
Esta medida introduce un nivel de intercambios, llevada a cabo por el planificador a medio
plazo del procesador, de hecho se puede observar, que cualquier proceso que no tenga el número de
marcos suficientes, aunque técnicamente es posible reducir al mínimo el número de marcos asignados,
existe un número de páginas que se usan activamente, por lo tanto, si el proceso no tiene este número
de marcos, provocará fallos de página muy frecuentemente.
Esta situación puede dar lugar, a que un proceso al reemplazar una página, tenga que
reemplazar una de sus páginas activas, que casi de inmediato se volverá a necesitar, por consiguiente,
se producirán fallos de página consecutivos.
A esta altísima actividad de paginación, reemplazando páginas que rápidamente deberán
reincorporarse, la denomina Hiperpaginación o también Thrashing y se dice que un proceso está en
hiperpaginación, cuando emplea más tiempo paginando que ejecutando.
CAUSAS DE LA HIPERPAGINACIÓN.
UTILIZACIÓN HIPERPAGINACIÓN
DEL
PROCESADOR
NIVEL DE MULTIPROGRAMACIÓN
Al llegar a este punto, para aumentar la utilización del procesador y detener la hiperpaginación,
se debe reducir el nivel de multiprogramación. Los efectos de la hiperpaginación, se pueden limitar
utilizando un algoritmo de remplazo local o bien por prioridades.
Con un algoritmo de reemplazo local, si un proceso comienza la hiperpaginación, no se puede
arrebatar marcos a otro proceso y provocar que este entre también en hiperpaginación, las páginas se
reemplazaran considerando únicamente el proceso al cual pertenecen.
Sin embargo, si los procesos están en hiperpaginación, la mayor parte del tiempo pueden
encontrarse en la cola del dispositivo de paginación, por lo tanto, el tiempo promedio de servicio de un
fallo de página aumentará, por ser mayor el tamaño promedio de la cola del dispositivo de paginación,
de esta manera, el tiempo de acceso efectivo aumentará incluso para un proceso que no este en
hiperpaginación.
Para evitar la hiperpaginación, debemos ofrecer a un proceso todos los marcos que necesita,
pero el problema será conocer los marcos que necesita un proceso y existen varias técnicas para
resolver este problema.
LOCALIDAD DE LOS PROCESOS.
El modelo de localidad es una técnica utilizada por el sistema operativo, que establece que
un proceso durante su ejecución, pasa de una localidad a otra y una localidad es un conjunto de
páginas que se utilizan conjuntamente.
Un programa generalmente esta compuesto por varias localidades distintas, las cuales
pueden superponerse. Realmente un programa esta compuesto por varias partes o subrutinas de
forma que su ejecución se realiza por fases, una a continuación de otra. Durante cualquier fase, es
preciso direccionar una pequeña parte de sus páginas y esto irá cambiando según se vayan
ejecutando las distintas fases.
Este comportamiento se conoce como localidad de referencias de los procesos y con su ayuda
podemos conocer el número mínimo de marcos, que requiere un proceso para evitar la
hiperpaginación.
Cuando se diseña y desarrolla un programa, se construye separando las rutinas por tipos,
normalmente, se trabaja en bucles y dentro de estos sobre unas estructuras de datos determinadas,
constituyendo una localidad espacial de datos e instrucciones.
Esta localidad espacial de datos e instrucciones irá cambiando, según se vaya ejecutando el
programa y de esta forma a cada proceso se le debe asignar los marcos necesarios, para cargar las
paginas requeridas por la fase de ejecución en la que se encuentre su localidad actual.
CONJUNTO DE TRABAJO.
La técnica del conjunto de trabajo (Working Set), tiene por objeto cuantificar la localidad de los
procesos, con el fin de asignarle a cada uno, los marcos necesarios.
Para ello se define el conjunto de trabajo de un proceso en un instante determinado, que se
representa de la siguiente forma: WS = (t,w).
w = 10 w = 10
WS = (1,2,5,6,7) WS = (3.4)
NIVEL SUPERIOR
Número de
Fallos Página
NIVEL INFERIOR
Número de Marcos
Si la frecuencia de fallos de página de un proceso, sobrepasa el límite superior lógicamente el
sistema operativo intentará asignarle más marcos, para lo cual será necesario disminuir el grado de