Você está na página 1de 18

Gestin de memoria UNIX

UNIX es un sistema operativo diseado para ser instalado sobre una


gran variedad de mquinas. Ya que la gestin de la memoria es muy
dependiente del soporte hardware disponible, nos encontraremos
con que existen diferentes formas de gestin de memoria en UNIX.
As, las primeras implementaciones de UNIX, sobre mquinas PDP-11,
no trabajaban con memoria virtual. Las implementaciones
posteriores proporcionan memoria virtual con paginacin por
demanda combinado con swapping de procesos. A continuacin
describiremos la gestin de la memoria en el System V. Para cada
entrada de la tabla de pginas se considera la direccin fsica del
marco de pgina, bits de proteccin (r, w, x), bit de validez, bit de
referencia, bit de pgina modificada, y un contador de antigedad de
la pgina. Estrictamente, slo la direccin fsica y el bit de validez
deben estar obligatoriamente soportados por hardware.

Intercambio (Swapping)

Asignacin del espacio de intercambio El ncleo asigna grupos


de bloques contiguos Usa una estructura, MAPA, para la gestin
de espacio libre. Cada entrada tiene: una direccin de bloque
asignable nmero de bloques contiguos disponibles a partir del
anterior Algoritmo de asignacin: Primer ajuste

Intercambio de procesos al dispositivo O Razones por las que el


ncleo necesita espacio en MP Procesos intercambiados deben
volver a MP Llamada al sistema fork Intercambio por
expansin: aumento regin pila o datos O Cuando el ncleo
decide intercambiar un proceso: a) Decrementa la cuenta de
referencias de cada regin y la intercambia si es 0 b) Asigna
espacio en el dispositivo de intercambio y bloquea al proceso c)
Guarda la direccin de intercambio de la regin en la entrada de
la Tabla de Regiones

Asociacin del espacio de los procesos en el


intercambio

Intercambio por expansin

Intercambio de procesos a MP

El intercambiador (proceso 0) Intercambia procesos a MP e


intenta intercambiar procesos a disco si necesita espacio en MP
Se bloquea si no hay trabajo Se ejecuta en modo supervisor El
reloj lo desbloquea cada sg y el ncleo cada vez que se bloquee
un proceso y despus se planifica (prioridad + alta) O Requisito
de estancia: Un proceso ejecutable tiene que estar residente en
MP al menos 2 sg. antes de ser intercambiado Igual para los
procesos ejecutables pero intercambiados

Asignacin del Espacio para


Intercambio por parte del
Kernel

Direccin map que indica qu map usar + nmero unidades pedidas:

xito la direccin

Fracaso 0

Asignar espacio para intercambio:

El kernel busca en mapa 1 entrada con suficiente espacio para la peticin.

Si peticin consume todos los recursos de la entrada del mapa:

El kernel quita la entrada del array.

Mapa Una entrada menos.

En caso contrario

Ajusta direccin y unidades acorde a cantidad recursos asignadosEl kernel busca posicin adecuada en el mapa por
la direccin

Casos posibles:

Recursos liberados llenan un hueco en el mapa Combinar todos los recursos en una entrada en el mapa.

Recursos liberados llenan parcialmente un hueco en el mapa y son contiguos a alguna entrada adyacente El kernel ajusta la
direccin y unidades de la entrada apropiada de acuerdo a recursos liberados.

Recursos liberados llenan parcialmente un hueco en el mapa y no son contiguos a ninguna entrada El kernel crea nueva
entrada en el mapa para los recursos liberados y la inserta en la posicin apropiada.

Ejemplo. Figura 3.2


Dispositivo de swap con 10000 bloques empezando en la direccin 1 (a).
Secuencia de peticiones y liberaciones:
El kernel asigna 100 unidades del recurso (b).
El k ernel recibe una peticin de 50 (c).
Recibe una ltima peticin de 100 unidades (d).
Libera 50 unidades empezando en la direccin 101 (e).
Libera 100 unidades empezando en la direccin 1 (f).
Demanda 200 unidades (g).
Libera 350 empezando en direccin 151. Se asignaron por separado 0 (h).
Direccin

101

Direccin

251

Direccin
1
251

Unidade
s
Direccin
1
9900

Unidade Direccin
s

9750

Direccin
1
h

Unidade Direccin
1
s
10000 451

151

Unidade Direccin
s
101
150
251
9750

Unida

des
10000

Unida

des
9850

Unida

des

50
9750

Unida

des
150
9550

Intercambiar Procesos fuera


de Memoria.
El kernel intercambia procesos al swap si necesita espacio en memoria:

Fork: Asignar espacio para el proceso hijo (crea un nuevo proceso).

Brk: Incremento tamao del segmento de datos de un proceso.

Crecimiento pila proceso.

Para intercambiar procesos que haba intercambiado al dispositivo de


swap.

Todos los casos son iguales: (1) Se decrementa contador de referencia de


cada regin del proceso; (2) Lleva la regin al swap si el contador de
referencia el igual a 0; (3) Salva direccin de swap de la regin en la tabla
de regiones.
Diferencia Primer caso no libera la copia en memoria ocupada por el
proceso.

FORK: Padre no encuentra suficiente memoria para crear el contexto del


proceso hijo El kernel intercambia el proceso hijo al swap, no libera la
memoria ocupada por padre.
Fin swap: (1) El proceso hijo existir en el dispositivo de swap; (2) El proceso
padre lo pondr en el estado listo para ejecutarse y volver a modo usuario;
(3) El swapper lo lleva a memoria cuando el kernel lo planifique (scheduler).

. Intercambiar Procesos entre


Memoria Principal y swap

Proceso 0, swapper (proceso del kernel) nico capaz de mover procesos entre memoria y swap.
Comportamiento:

Fin inicializacin del sistema swapper empieza un bucle infinito.

nica tarea que tiene que hacer el swapper es intercambiar procesos desde swap: (1) Examina
procesos listos para ejecutarse en rea de swap y selecciona el que haya estado ms tiempo
intercambiado; (2) Si tiene suficiente memoria libre disponible asigna memoria fsica, lee el proceso
desde el dispositivo de swap y libera la memoria en el mismo; (3) Si no tiene suficiente espacio en
memoria principal, intenta intercambiar procesos al dispositivo de swap.

Si no hay procesos para intercambiar a memoria, o ninguno de los procesos que hay en memoria
pueden ser intercambiados al dispositivo de swap swapper se duerme, y se despierta: (1) El reloj, lo
despertar una vez cada segundo en este estado (dormido); (2) el kernel si otro proceso va a dormir;
y

(3) vuelve a empezar desde el principio buscando ms procesos.

Criterios del swapper para elegir un proceso para echarlo (intercambiarlo) de memoria: (1) Examina
cada uno de los procesos que estn en memoria; (2) No examina ni Zombies, ni procesos bloqueados
en memoria; (3) Prefiere Dormidos a listos para ejecutarse; (4) Elegir de los Dormidos los que
menos f(prioridad, tiempo que proceso lleva en memoria) tengan; (5) Elegir de los listos para
ejecutarse los que menos f(nice, tiempo que el proceso haya estado en memoria) tengan.

Estructuras de Datos para


Paginacin por Demanda
(UNIX)

Estructuras de datos para la gestin de memoria a bajo nivel y demanda de


pginas (sistema de paginacin):

Tabla de pginas Normalmente, hay una tabla por proceso, con una entrada
para cada pgina de la memoria virtual del proceso.

Descriptores de bloques de disco Asociado a cada pgina de un proceso hay


una entrada en la tabla que describe la copia en el disco de la pgina virtual.

Tabla de marcos de pgina (pfdata) Describe cada marca de la memoria real y


est indexada por el nmero de marco.

Tabla de uso de swap Existe una tabla de uso de swap por cada dispositivo de
intercambio, con una entrada para cada pgina en dicho dispositivo.

El kernel asigna espacio para pfdata una vez durante la vida del sistema,
aunque para las otras estructuras le asigna y desasigna espacio
dinmicamente. Cada regin contiene tablas de pginas para acceder a
memoria fsica.

GESTIN DE MEMORIA EN
LINUX

Visin General

Linux comparte muchas de las caractersticas de los esquemas de gestin de


memoria de otras implementaciones UNIX, pero tiene sus caractersticas propias y
nicas, aunque hay que destacar que el esquema de gestin de memoria de Linux
es bastante complejo.

En lo que respecta a memoria virtual, el direccionamiento de memoria virtual de


Linux, hace uso de una estructura de tabla de pginas con tres niveles, formada
por los siguientes tipos de tablas (cada tabla individual es del tamao de una
pgina): (1) Directorio de pginas un proceso activo tiene un solo directorio de
pginas que es del tamao de una pgina. Cada entrada en el directorio de
pginas apunta a una pgina del directorio intermedio de pginas. Para un proceso
activo, el directorio de pginas tiene que estar en la memoria principal; (2)
Directorio intermedio de pginas este directorio puede ocupar varias pginas y
cada entrada de este directorio apunta a una pgina de la tabla de pginas; (3)
Tabla de pginas esta tabla de pginas tambin puede ocupar varias pginas, y
cada entrada de la tabla de pgina hace referencia a una tabla virtual del proceso.

Direccionamiento de Memoria
en Linux

La memoria es uno de los recursos fundamentales para un


proceso. El sistema operativo debe ofrecer la memoria a todos
los procesos por igual de una forma sencilla y uniforme. Al mismo
tiempo, el sistema operativo debe tratar con el hardware real
para realizar dicha funcin, aprovechndolo al mximo. El
direccionamiento es una parte importante de la gestin de
memoria, puesto que influye mucho tanto en la visin de la
misma por parte de un proceso, como en el aprovechamiento del
hardware y el rendimiento del sistema.

Espacios de Direcciones

Tres tipos de direcciones:

Direcciones lgicas. Generadas por el proceso, cada direccin lgica consiste en un selector de
segmento y un desplazamiento (offset) que denota la distancia del principio del segmento a la
direccin actual.

Direcciones lineales (direcciones virtuales). Obtenidas tras aplicar una transformacin a la direccin
lgica por parte de la MMU. 32 bits se pueden utilizar para direccionar 4Gb (es decir 4294967296
direcciones fsicas de memoria). Las direcciones lineales se representan normalmente en
hexadecimal, su rango de valores va desde 0x00000000 hasta 0xffffffff.

Direcciones fsicas. Referencian la memoria fsica. Se obtienen tras aplicar una transformacin por
parte de la MMU.

Las transformaciones y el formato de las direcciones dependen de la arquitectura. En Linux los


espacios de direcciones lgico y lineal son idnticos.

En los procesadores de la arquitectura i386:

El paso de direccin lgica a lineal se denomina segmentacin.

El paso de direccin lineal a fsica se denomina paginacin. Si se deshabilita la paginacin, direccin


fsica = direccin lineal.

La memoria virtual se soporta en la paginacin y en bits de presencia y referencia.

Paginacin en Linux

Para tener en cuenta arquitecturas de 64 bits, la paginacin en


Linux tiene 3 niveles de tablas de pginas en lugar de 2. En los
i386, la tabla de directorio intermedio de tablas de pginas se
obvia.

Linux gestiona la memoria central y las tablas de pginas


utilizadas para convertir las direcciones lineales (virtuales) en
direcciones fsicas. Implementa una gestin de la memoria que
es ampliamente independiente del procesador sobre el que se
ejecuta.

Gestin de Memoria en Linux.

Hemos visto que Linux hace uso de las ventajas de la segmentacin y de los
circuitos de paginacin de los procesadores i386 para traducir direcciones
lgicas en direcciones fsicas. Podemos tambin decir que alguna porcin de
RAM est permanentemente asignada al kernel y utilizada para almacenar el
cdigo del kernel y estructuras de datos esttic as del mismo. La restante
parte de la RAM se denomina memoria dinmica, y sta es un recurso muy
valioso y necesitado no slo por los procesos sino tambin por el propio kernel.
De hecho el rendimiento global del sistema depende fuertemente de cmo de
efic ientemente se gestiona la memoria dinmica. Por tanto, todos los sistemas
operativos multitarea actuales tratan de optimizar el uso de la memoria
dinmica, asignndola slo cuando es estrictamente necesario y liberndola
tan pronto como sea posible. En esta seccin describiremos: estructuras
bsicas del kernel para gestionar la memoria dinmica desde dos puntos de
vista: asignacin de memoria para el kernel y asignacin de memoria para
procesos, poltica de asignacin de la memoria por parte del kernel, el gestor
de faltas de pgina, etc.

Gestin de memoria en
Windows
El gestor de memoria en Windows est hecho para trabajar con paginas que van de los
4kBhasta los 64kB. Cuando se crea un proceso el tamao mximo es de 2GB, este espacio
estdividido en pginas de tamao fijo y poseen uno de los siguientes estados:

Disponible

Reservada

Asignada

Cuando hay espacio disponible en la memoria, el gestor de memoria virtual permite que
losconjuntos residentes de los procesos activos crezcan. Entonces se trae una nueva pgina a
lamemoria sin expulsar ninguna.
Cuando la memoria empieza a escasear, el gestor de memoria virtual mueve las pginas que
sehan utilizado hace ms tiempo de cada uno de los procesos hacia swap, liberando as
memoriaprincipal.
Existen algunas similitudes en cuanto a la gestin de memoria en Windows y Linux
perocuando es necesario liberar memoria Windows lo hace una vez por segundo a diferencia
enLinux que lo hace solo cuando es necesario, esto hace de Linux mas eficiente.

Você também pode gostar