Académique Documents
Professionnel Documents
Culture Documents
Ejemplo de segmentacin
Una de las implementaciones ms obvias y directas de un espacio de memoria
segmentado es asignar un segmento distinto a cada una de las secciones
mencionadas en la seccin espacio en memoria de un proceso.
La segmentacin tambin ayuda a incrementar la modularidad de un programa: Es
muy comn que las bibliotecas ligadas dinmicamente estn representadas en
segmentos independientes.
3.1 Permisos
Una de las principales ventajas del uso de segmentacin es que nos permite pedir
al MMU que cada uno de los segmentos tenga un distinto juego de permisos para
el proceso en cuestn: El sistema operativo puede indicar, por ejemplo, que el
segmento de texto (el cdigo del programa) sea de lectura y ejecucin, mientras
que la secin de datos es de lectura y escritura. De este modo podemos evitar que
un error en la programacin resulte en que datos proporcionados por el usuario o
por el entorno modifiquen el cdigo que est siendo ejecutado.5 Es ms, Incluso,
dado que el acceso de ejecucin est limitado a slo los segmentos cargados del
disco por el sistema operativo, el atacante no podr introducir cdigo ejecutable
tan fcilmente Tendra que cargarlo como un segmento adicional con los
permisos correspondientes.
3.2 Intercambio parcial
3.2.1 Rendimiento
En la seccin donde presentamos el concepto de intercambio mencionamos que
intercambiar un proceso completo resultaba demasaido caro. Cuando hablamos
de un espacio de memoria segmentado, y muy particularmente cuando hablamos
de bibliotecas de carga dinmica, la sobrecarga es mucho menor:
En primer trmino, podemos hablar de la cantidad de informacin que
intercambiaremos: En un sistema que slo maneja regiones contiguas de
memoria, intercambiar un proceso significa mover toda su informacin al disco;
cuando hablamos de intercambio en un sistema con segmentacin, puede
enviarse a disco cada uno de los segmentos por separado, segn el sistema
operativo lo juzgue necesario. Podra sacar de memoria a alguno de los
segmentos, eligiendo no necesariamente al que ms estorbe (esto es, el ms
grande), sino el que ms probablemente no est siendo utilizado: Emplear el
principio de localidad de referencia para intercambiar al segmento menos
recientemente utilizado (LRU, Least Recently Used).
Adems de esto, si hablamos de un segmento de texto (sea el cdigo programa
base o alguna de las bibliotecas) y su acceso es de slo lectura, una vez que ste
fue copiado una vez al disco, ya no hace falta volver a hacerlo: Tenemos la certeza
de que no ser modificado por el proceso en ejecucin, por lo que basta marcarlo
como no presente en las tablas de segmentos en memoria para que cualquier
acceso ocasione que el sistema operativo lo traiga de disco.
Por otro lado, si la biblioteca en cuestin reside en disco (antes de ser cargada)
como una imagen directa de su representacin en memoria, al sistema operativo
le bastar identificar el archivo en cuestin al cargar el proceso; no hace falta
Inicio
Tamao
13426
Permisos
Presente
26 RWX
2309
00 R
1000
23 WX
95 W
no
10000
100 RWX
Tipo de
Direccin
virtual
acceso
fsica
0-0 R
13426
2-17 W
1017
2-17 R
2-32 R
Direccin
Tipo de
Direccin
virtual
acceso
fsica
3-72 W
3-94 R
4-99 X
10099
7-25 X
entre pginas y marcos a travs de tablas de pginas. Las direcciones que maneja
el CPU ya no son presentadas de forma absoluta, sino que como la combinacin
de un identificador de pgina y un desplazamiento De forma similar a lo que
presentamos al hablar de resolucin de instrucciones en tiempo de ejecucin.
El tamao de los marcos (y, por tanto, las pginas) debe ser una potencia de 2, de
modo que el MMU pueda discernir fcilmente la porcin de una direccin de
memoria que se refiere a la pgina del desplazamiento. El rango vara, segn el
hardware, entre los 512 bytes ($2^9$) y 16MB ($2^{24}$); al ser una potencia de
2, el MMU puede separar la direccin en memoria entre los primeros $m$ bits
(referentes a la pgina) y los ltimos $n$ bits (referentes al desplazamiento).
alta velocidad, una suerte de registros residentes dentro del MMU, donde las
llaves son las pginas y los valores son los marcos correspondientes. De este
modo, las bsquedas se efectan en tiempo constante.
Como sea, dado que el TLB es limitado, es necesario explicitar un mecanismo que
indique dnde guardar las nuevas entradas una vez que el TLB est lleno y se
produce un fallo de pgina. Uno de los esquemas ms comunes es emplear la
entrada menos recientemente utilizada (LRU, Least Recently Used), nuevamente
apelando a la localidad de referencia; esto tiene como consecuencia necesaria
que debe haber un mecanismo que contabilice los accesos dentro del TLB (lo cual
agrega tanto latencia como costo); otro mecanismo (con obvias desventajas) es el
reemplazar una pgina al azar. Veremos con mayor detalle ms adelante algunos
de los mecanismos ms empleados para este fin, comparando sus puntos a favor
y en contra.
4.2.2 Subdividiendo la tabla de pginas
Incluso empleando TLBs, el espacio empleado por las pginas sigue siendo
demasiado grande. Consideremos un escenario ms frecuente que el propuesto
anteriormente: Empleando un procesador con espacio de direccionamiento de 32
bits, y un tamao de pgina estndar (4KB, $212), hablamos ya de 1,048,576
($2^{20}$) pginas. Si cada entrada de la pgina ocupa 40 bits10 (esto es, 5
bytes), cada proceso requerira de 5MB (5 bytes por cada una de las pginas)
slamente para representar su mapeo de memoria. Esto, especialmente en
procesos pequeos, resultara ms gravoso para el sistema que los beneficios
obtenidos de la paginacin.
Aprovechando que la mayor parte del espacio de direccionamiento de un proceso
est tpicamente vaco, se puede subdividir el identificador de pgina en dos (o
ms) niveles, por ejemplo, separando una direccin de 32 bits en una tabla
externa de 10 bits, una tabla interna de 10 bits, y el desplazamiento de 12 bits.
Un programa que est programado y compilado de forma que permita que todo su
cdigo sea de slo lectura es reentrante, dado que posibilita que diversos
procesos entren a su espacio en memoria sin tener que sincronizarse con otros
procesos que lo estn empleando.
4.3.1 Copiar al escribir (Copy on Write, CoW)
En los sistemas Unix, el mecanismo ms frecuentemente utilizado para crear un
nuevo proceso es el empleo de la llamada al sistema fork(). Cuando es invocado
por un proceso, el sistema operativo crea a un nuevo proceso idntico al que lo
llam, diferencindose nicamente en el valor entregado por la llamada a fork(). Si
ocurre algn error, el sistema entrega un nmero negativo (indicando la causa del
error). En caso de ser exitoso, El proceso nuevo (o proceso hijo) recibe el valor 0,
mientras que el proceso preexistente (o proceso padre) recibe el PID (nmero
identificador de proceso) del hijo. Esto es, es frecuente que veamos:
siendo dos procesos independientes, no deben poder modificarse ms que por los
canales explcitos de comunicacin entre procesos.
5 Memoria virtual
Varios de los aspectos mencionados en la seccin de paginacin van
conformando a lo que conocemos como memoria virtual: Vimos ya que en un
sistema que emplea paginacin, un proceso no conoce su direccin en memoria
relativa a otros procesos, sino que trabajan con una idealizacin de la memoria, en
la cual ocupan el espacio completo de direccionamiento, desde el cero hasta el
lmite lgico de la arquitectura, independientemente del tamao fsico de la
memoria disponible.
Y si bien el modelo mencionado de paginacin nos llev a que los diferentes
procesos pueden compartir regiones de memoria y direccionar ms memoria de la
fsicamente disponible, no abordamos qu estrategia se empleara cuando el total
de pginas solicitadas por todos los procesos activos en el sistema superara el
total de espacio fsico. Es ah donde entra en juego la memoria virtual: Para
ofrecer a los procesos mayor espacio en memoria del que existe fsicamente, el
sistema emplea espacio en almacenamiento secundario (tpicamente, disco duro),
a travs de un esquema de intercambio (swap).
ocurren de forma consecutiva (esto es, sin llamar a ninguna otra pgina, no es
necesario que sean en instrucciones consecutivas) a una misma pgina.
Para analizar a un algoritmo de reemplazo, si lo que buscamos es la cantidad de
fallos de pgina producidos, adems de la cadena de referencia, necesitamos
saber cuntos marcos tiene nuestra computadora hipottica. Por ejemplo, si
tuviramos la cadena:
1, 4, 3, 4, 1, 2, 4, 2, 1, 3, 1, 4
Al recorrer esta cadena en una computadora con cuatro o ms marcos, slo nos
encontraramos con cuatro fallos (el fallo inicial que hace que se cargue por
primera vez cada una de las pginas). Si, en el otro extremo, tuviramos slo un
marco, nos encontraramos con 12 fallos, dado que a cada solicitud tendramos
que reemplazar el nico marco disponible. El rendimiento que evaluaramos sera
en los casos de que tuviramos dos o tres marcos.
Un fenmeno interesante que se presenta con algunos algoritmos es la anomala
de Belady: Si bien la lgica indica que a mayor nmero de marcos disponibles
tendremos una menor cantidad de fallos de pgina, con algunas de cadenas de
referencia y bajo ciertos algoritmos puede haber una regresin, en que aumentar
la cantidad de marcos tambin aumenta la cantidad de fallos.
1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
La prevalencia de cadenas que desencadenan la anomala de Belady fue uno de
los factores principales que llevaron al diseo de nuevos algoritmos de reemplazo
de pginas.
5.3.2 Reemplazo de pginas ptimo (OPT, MIN)
Un segundo algoritmo, de inters casi puramente terico, fue propuesto, y es
tpicamente conocido como OPT o MIN. Bajo este algoritmo, el enunciado ser
elegir como pgina vctima a aquella pgina que no vaya a ser utilizada por un
tiempo mximo.
Su principal utilidad reside en que nos brinda una cota mnima: Calculando el
nmero de fallos que se presentan al seguir OPT, podemos ver qu tan cercano
resulta otro algoritmo respecto al caso ptimo. Para esta cadena de referencia, y
con tres pginas, tenemos un total de nueve fallos.
5.3.3 Menos recientemente utilizado (LRU)
(0,1)
No ha sido utilizada recientemente, pero est modificada. No es tan buena opcin,
porque es necesario escribir la pgina a disco antes de reemplazarla, pero puede
se elegida.
(1,0)
El marco est limpio, pero fue empleado recientemente, por lo que probablemente
se vuelva a requerir pronto
(1,1)
Empleada recientemente y sucia Sera necesario escribir la pgina a disco
antes de reemplazar, y probablemente vuelva a ser requerida pronto. Hay que
evitar reemplazarla.
La lgica para encontrar una pgina vctima es similar a la segunda oportunidad,
pero busca reducir el costo de E/S. Esto puede requerir, sin embargo, dar hasta
cuatro vueltas (por cada una de las listas) para elegir la pgina vctima.
5.3.6 Algoritmos con manejo de buffers
Un mecanismo que se emplea con cada vez mayor frecuencia es que el sistema
no espere a enfrentarse a la necesidad de reemplazar un marco, sino que
proactivamente busque tener siempre espacio vaco en memoria. Para hacerlo,
conforme la carga lo permite, el sistema operativo busca las pginas sucias ms
proclives a ser paginadas a disco y va actualizando el disco (y marcndolas
nuevamente como limpias). De este modo, cuando tenga que traer una pgina
nueva del disco, siempre habr espacio donde ubicarla sin tener que esperar a
que se transfiera una para liberarla.
5.4 Asignacin de marcos
Abordando el problema prcticamente por el lado opuesto al del reemplazo de
pginas, cmo se asignan los marcos existentes a los procesos del sistema?
Esto es, qu esquemas podemos encontrar para que la asignacin inicial (y, de
ser posible, en el transcurso de la ejecucin) sea adecuada?
Consideremos en primer trmino un esquema sencillo: Un sistema con 1024KB de
memoria, compuesta de 256 pginas de 4096 bytes cada una, y basado en
paginacin puramente sobre demanda.
Si el sistema operativo ocupa 248KB, el primer paso ser reservar las 62 pginas
que ste requiere, y destinar las 194 pginas restantes para los procesos a
ejecutar.
Conforme se van lanzando y comienzan a ejecutar los procesos, cada vez que
uno de ellos genere un fallo de pgina, se le ir asignando uno de los marcos
disponibles hasta ocupar que la memoria entera est ocupada; claro est, cuando
un proceso termine su ejecucin, todos los marcos que tena asignados volvern a
la lista de marcos libres.
Una vez que la memoria est completamente ocupada (esto es, que haya 194
pginas ocupadas por procesos), el siguiente fallo de pgina invocar a un
algoritmo de reemplazo de pgina, que elegir una de las 194.17
Este esquema, si bien es simple, al requerir una gran cantidad de fallos de pgina
explcitos puede penalizar el rendimiento del sistema El esquema puede
resultar demasiado flojo, no le vendra mal ser un poco ms ansioso y asignar, de
inicio, un nmero determinado como mnimo utilizable de marcos.
5.4.1 Mnimo de marcos
Si un proceso tiene asignados demasiado pocos marcos, su rendimiento
indudablemente se ver afectado. Hasta ahora hemos supuesto que cada
instruccin puede causar un slo fallo de pgina, pero la realidad es ms
compleja. Cada instruccin del procesador puede, dependiendo de la arquitectura,
desencadenar varias solicitudes.
Todas las arquitecturas proporcionan instrucciones de referencia directa a
memoria (instrucciones que permiten especificar una direccin de memoria para
leer o escribir) Esto significa que todas requerirn que, para que un proceso
funcione adecuadamente, tenga por lo menos dos marcos asignados: En caso de
que se le permitiera solo uno, si la instruccin ubicada en 0x00A2C8 solicita la
carga de 0x043F00, esta causara dos fallos: El primero, cargar al marco la pgina
0x043, y el segundo, cargar nuevamente la pgina 0x00A, necesario para leer la
siguiente instruccin a ejecutar del programa (0x00A2CC, asumiendo palabras de
32 bits).
Algunas arquitecturas, adems, permiten referencias indirectas a memoria, esto
es, nuestra instruccin de carga puede solicitar la direccin que est referenciada
en 0x043F00. El procesador tendra que recuperar esta direccin, y podra
encontrarse con que hace referencia a una direccin en otra pgina (digamos,
0x010F80). Cada nivel de indireccin que se permite aumenta en uno el nmero
de pginas que debemos reservar como mnimo por proceso.
Cada proceso recibir entonces $F_P = \frac{V_P}{V_T} \times m$, donde $F_P$
indica el espacio de memoria fsica que el proceso recibir, $V_P$ la cantidad de
memoria virtual que est empleando, y $m$ la cantidad total de marcos de
memoria disponibles. De este modo, $P_1$ recibir 130 marcos, $P_2$ 7, $P_3$
35 y $P_4$ 20, proporcionalmente a su uso de memoria virtual.
Cabe apuntar que este mecanismo debe observar ciertos parmetros mnimos:
Por un lado, si el mnimo de marcos definido para esta arquitectura es de 4, por
ms que entrara en ejecucin un proceso de 32KB (8 pginas) o aumentara al
doble el grado de multiprocesamiento, ningn proceso debe tener asignado menos
del mnimo definido.
La asignacin proporcional tambin debe cuidar no sobre-asignar recursos a un
proceso obeso: $P_1$ es ya mucho ms grande que todos los procesos del
sistema. En caso de que esta creciera mucho ms, por ejemplo, si multiplicara por
4 su uso de memoria virtual, esto llevara a que se castigara
desproporcionadamente a todos los dems procesos del sistema.
Por otro lado, este esquema ignora por completo las prioridades que hoy en da
manejan todos los sistemas operativos; si quisiramos que las consideraran,
podra incluirse como factor la prioridad, multiplicando junto con $V_P$.
El esquema de asignacin proporcional sufre, sin embargo, cuando cambia el nivel
de multiprogramacin Esto es, cuando se inicia un nuevo proceso o finaliza un
proceso en ejecucin, deben recalcularse los espacios en memoria fsica
asignados a cada uno de los procesos restantes. Si finaliza un proceso, el
problema es menor, pues slo se asignan los marcos y puede esperarse a que se
vayan poblando por paginacin sobre demanda, pero si inicia uno nuevo, es
necesario reducir de golpe la asignacin de todos los dems procesos hasta abrir
suficiente espacio para que quepa.
Por ltimo, el esquema de la asignacin proporcional tambin tiende a
desperdiciar recursos: Si bien hay procesos que mantienen un patrn estable de
actividad a lo largo de su ejecucin, muchos otros pueden tener periodos de
mucho menor requisitos. Por ejemplo, un proceso servidor de documentos pasa la
mayor parte de su tiempo simplemente esperando solicitudes, y podra reducirse a
un uso mnimo de memoria fsica, sin embargo, al solicitrsele un documento, se
le deberan poder asignar ms marcos (para trabajar en una rfaga) hasta que
termine con su tarea. Veremos este punto en breve, al hablar del conjunto activo
5.4.3 mbitos del algoritmo de reemplazo de pginas
Para responder a los problemas que la anterior seccin nos deja abiertos, se
puede discutir el mbito en que operar el algoritmo de reemplazo de pginas.
Reemplazo local
Mantenemos tan estable como sea posible el clculo hecho por el esquema de
asignacin que estemos empleando. Esto significa que cuando se presente un
fallo de pgina, las pginas que sern consideradas para su intercambio sern
nicamente aquellas pertenecientes al mismo proceso que el que caus el fallo.
Un proceso tiene asignado su espacio de memoria fsica, y se mantendr estable
mientras el sistema operativo no tome alguna decisin por cambiarlo.
Reemplazo global
Los algoritmos de asignacin determinan el espacio asignado a los procesos al ser
inicializados, e influyen a los algoritmos de reemplazo (por ejemplo, dando mayor
peso para ser elegidas como pginas vctima a aquellas que pertenezcan a un
proceso que excede de su asignacin en memoria fsica).
Los algoritmos de reemplazo de pginas operan sobre el espacio completo de
memoria, y la asignacin fsica de cada proceso puede variar segn el estado del
sistema momento a momento.
Reemplazo global con prioridad
Es un esquema mixto, en el que un proceso puede sobrepasar su lmite siempre
que le robe espacio en memoria fsica exclusivamente a procesos de prioridad
inferior a l. Esto es consistente con el comportamiento de los algoritmos
planificadores, que siempre dan preferencia a un proceso de mayor prioridad por
sobre de uno de prioridad ms baja.
El reemplazo local es ms rgido y no permite aprovechar para mejorar el
rendimiento los periodos de inactividad de algunos de los procesos. En
contraposicin, los esquemas basados en reemplazo global puede llevar a
rendimiento inconsistente: Dado que la asignacin de memoria fsica sale del
control de cada proceso, puede que la misma seccin de cdigo presente tiempos
de ejecucin muy distintos si porciones importantes de su memoria fueron
paginadas a disco.
5.5 Hiperpaginacin
Cuando (bajo un esquema de reemplazo local) un proceso tiene asignadas
demasiado pocas pginas para llevar a cabo su trabajo y genera fallos de pgina
con tal frecuencia que le imposibilita realizar trabajo real, o (bajo un esquema de