Administración y manejo de la memoria_Parte1

25
Adaptado por: GIOVANNI ANDRÉS TOVAR CLAVIJO Sistemas Operativos ADMINISTRACIÓN Y MANEJO DE LA MEMORIA

Transcript of Administración y manejo de la memoria_Parte1

Page 1: Administración y manejo de la memoria_Parte1

Adaptado por:

GIOVANNI ANDRÉS TOVAR CLAVIJO

Sistemas Operativos

ADMINISTRACIÓN Y MANEJO DE LA MEMORIA

Page 2: Administración y manejo de la memoria_Parte1

Administración y manejo de la memoria

Relocalización

Encadenamiento

Carga

Sin intercambio ni paginación

Segmentación

Algoritmos de sustitución de paginas

Aspectos de diseño para sistemas de paginación

Page 3: Administración y manejo de la memoria_Parte1

Introducción

La memoria física de un computador es comúnmente dividida en dos áreas,memoria del monitor residente y memoria del usuario. El problemaprincipal de este esquema es el proporcionar una protección eficiente queevite que programas del usuario modifiquen (accidentalmente ointencionalmente) código o datos del monitor residente, ya que esto dejaríafuera de acción al sistema operativo. Existen varias soluciones a esteproblema, pero el mas común es el de utilizar un registro limite de direccióncomúnmente llamado "registro barrera" (fence register), en el cual se colocala dirección de la primera posición de memoria que un programa del usuariopuede utilizar.

Cada dirección generada por una instrucción o dato de un programa, escomparada con el contenido del registro barrera. Si la dirección generada esmayor o igual que la barrera, entonces la direcci6n es valida ya quecomprende alguna localidad de la memoria del usuario. En caso contrario,se trata de una referencia ilegal, por lo que se genera una interrupción alS.O. para que maneje este tipo de error (generalmente imprime un letrero yaborta el programa)

Page 4: Administración y manejo de la memoria_Parte1

Introducción

La dirección del registro de barrera puede ser cambiado según lasnecesidades de memoria, por ejemplo si crece el monitor residente alactualizarlo.

Otro problema a considerar es la carga en memoria de los programas delusuario. Aunque la dirección de la memoria del computador empieza en00000, la primera dirección del programa del usuario no puede ser 00000,sino la primera direcci6n mas allá de la barrera. Una de las formas decorregir esto es al tiempo de compilación, ya que si se conoce la direcci6n dela barrera, se pueden generar direcciones absolutas que comiencen y seextiendan a partir de la barrera. Sin embargo, si la dirección de la barreracambia, es necesario recompilar el programa para poder ser corridonuevamente.

Page 5: Administración y manejo de la memoria_Parte1

Relocalización

Una mejor alternativa al método de direcciones absolutas, consiste engenerar direcciones relativas o re localizables, las cuales no toman encuenta el valor de la barrera al momento de compilación, sino que lacorrecci6n es diferida hasta el tiempo de carga o de ejecución delprograma. En el primer método, al momento de cargar el programaen memoria, el valor de la barrera es sumado a todas las direccionesen que debería cargarse cada instrucción o dato del programa, asícomo también a las direcciones a las que hace referencia cadainstrucci6n (variables del programa), de tal forma que siempre setengan direcciones a partir de la barrera.

Este método funciona siempre y cuando la barrera no cambie durantela ejecución del programa, sino solamente antes de correr el programa(p.e. entre programa y programa). Debido a esta condición de barreraestática, se dice que se tiene "Relocalización Estática". En muchoscasos, los sistemas operativos cuentan con partes transitorias que sepueden eliminar y volver a cargar.

Page 6: Administración y manejo de la memoria_Parte1

Relocalización

Por ejemplo, en los casos en que algún manejador de dispositivo no se utilicefrecuentemente, puede ser quitado para utilizar ese espacio de memoriapara programas del usuario, y volver a cargarlo cuando sea requerido poralgún programa en ejecución. Este esquema, hace que sea necesario cambiarla direcci6n de la barrera incluso durante la ejecución de un programa. Unasolución a este problema es cargar el programa en memoria igual que en elmétodo anterior, sumándole el valor de la barrera a todas las direccionesgeneradas por el compilador, excepto a las direcciones a que hacenreferencia las instrucciones del programa (variables); estas son dejadas talcual. La corrección es hecha hasta el momento en que al ser ejecuta cadainstrucción en la CPU y se genere un intento de accesar la memoria.

En ese momento, a la direcci6n generada le es sumado el valor de la barrera yluego es enviada a la memoria. Por lo tanto, el usuario siempre trabaja condirecciones lógicas (las generadas por el compilador), y el hardware derelocalización se encarga de generar direcciones físicas.

Page 7: Administración y manejo de la memoria_Parte1

Relocalización

Por ejemplo si la barrera se encuentra en 1700, cualquier intento de accesarla localidad 0000, será automáticamente relocalizada a 1700. Un acceso a lalocalidad 515, será relocalizada a la 2215.

A este sistema se le llama relocalización dinámica ya que la barrera puedeser cambiada en cualquier momento. Por lo tanto, si es necesario cambiar labarrera, solo es necesario cambiar el contenido del registro base, y trasladarel programa del usuario a las nuevas localidades de memoria relativas a lanueva barrera, y continuar con la ejecuci6n del programa.

Sin embargo, si cargamos mas de un programa en el área del usuario, lossistemas anteriormente vistos ya no proporcionan la protección debida, yaque si bien el S. 0. queda protegido, los programas de los usuarios no.

Page 8: Administración y manejo de la memoria_Parte1

Relocalización

Si ejecutamos el programa del usuario, es posible que este pueda modificarel código o los datos de los programa 2 y 3. Si movemos la barrera hasta elinicio del programa 2, el programa 1 queda protegido al igual que el monitor;sin embargo, el programa 3 queda aun desprotegido.

Una solución a este problema, es utilizar dos registros para delimitarplenamente la memoria del programa en ejecución.

MONITOR

Usuario 1

Usuario 2

Usuario 3

Barrera

0

Page 9: Administración y manejo de la memoria_Parte1

Relocalización

Los limites se implementan con registros igual que anteriormente. De estamanera, si el programa en ejecución es el 2, el monitor y el programa 1quedan protegidos por el limite inferior, mientras que el programa 3 quedaprotegido por el limite superior. Una vez finalizada la ejecución delprograma 1, los registros son movidos al programa 2, y así sucesivamente .

Este esquema de cambio de barreras obviamente requiere un sistema derelocalización dinámica.

MONITOR

Usuario 1

Usuario 2

Usuario 3

Barrera

0

Límite Inferior

Límite Superior

Page 10: Administración y manejo de la memoria_Parte1

Relocalización

El registro de limite checa por el limite superior que puede generar unprograma antes de ser relocalizado dinámicamente por el registro basemientras que el limite inferior queda definido por la dirección 0000 quegeneran los compiladores.

El use del esquema anteriormente mencionado u otros similares permitentener mas de un usuario residente en memoria simultáneamente, ya que esposible dividir la memoria en múltiples regiones llamadas particiones.

Dos posibles métodos se derivan de este esquema:

Múltiples particiones contiguas fijas

Múltiples particiones contiguas variables.

Page 11: Administración y manejo de la memoria_Parte1

Múltiples particiones contiguas fijas

En esta opción, se seleccionan regiones fijas de memoria para crearprocesos, por ejemplo una región de 10 K bytes para procesos muypequeños, regiones de 20 K para procesos de tamaño promedio, y 50 K paraprocesos grandes.

Cuando un proceso llega del exterior, es puesto en la cola de procesos ospool manejada por el asignador de procesos, cuando le toca su turno(generalmente FIFO), la cantidad de memoria que requiere es tomada encuenta y es comparada contra las regiones de memoria vacías; si el procesopuede ser cargado en alguna de ellas lo hace, pero si no, entonces busca elsiguiente que pueda ser cargado en las regiones disponibles. Para saber queregiones de memoria están disponibles, se implementa una lista llamada"cola de regiones de memoria disponibles", en la cual se anota la cantidad dememoria del hueco libre y la direcci6n donde inicia.

Page 12: Administración y manejo de la memoria_Parte1

Múltiples particiones contiguas fijas

El asignador de procesos también busca optimizar el desperdicio dememoria; es decir, no cargar programas muy pequeños en regiones muygrandes ya que estas son fijas. A este desperdicio se le llama fragmentacióninterna.

MONITOR33 K

Región de 15kProceso de 12k

Región de 30kProceso de 25k

Región de 50kProceso de 40k

0

128 k

COLA DE PROCESOS

7K 50K 40K 15K 12K 25K

Page 13: Administración y manejo de la memoria_Parte1

Múltiples particiones contiguas fijas

Como puede verse, el primer proceso puede ser cargado en la región de 30Kcon una fragmentación de 5K, el de 12K en la de 15K con fragmentación de 3,el de 15K tendrá que esperar a que se desocupe la región de 15K (o decidircargarla en la de 40K con gran fragmentación), la de 40K puede ser cargadaen la de 50K con un desperdicio de 10K, y las de 50K y 7K tendrán queesperar a que alguna regi6n adecuada se desocupe.

MONITOR33 K

Región de 15kProceso de 12k

Región de 30kProceso de 25k

Región de 50kProceso de 40k

0

128 k

COLA DE PROCESOS

7K 50K 40K 15K 12K 25K

Page 14: Administración y manejo de la memoria_Parte1

Múltiples particiones contiguas variables

El problema con particiones fijas es determinar los mejores tamaños deregiones para minimizar la fragmentación interna y externa. Sin embargo,con un conjunto de procesos dinámicos, es poco probable llegar a unacondición optima. La solución a este problema es permitir que las regionesvaríen de tamaño dinámicamente.

Esta solución es llamada múltiples particiones contiguas variables. Estaforma de manejo de memoria consiste en tener una cola de regiones dememoria que están disponibles. Al inicio se tiene un solo bloque dememoria para programas del usuario que resulta de cargar el SistemaOperativo en la memoria disponible. Cuando los procesos llegan, se checaen la cola de regiones de memoria disponibles si se puede cargar el proceso.Si la regi6n es muy grande, solo se asigna la necesaria y el resto es puesto enla cola de regiones de memoria disponibles.

Page 15: Administración y manejo de la memoria_Parte1

Múltiples particiones contiguas variables

Por ejemplo asuma que los siguientes procesos requieren servicio (memoriatotal 256K):

Si el algoritmo usado es del tipo primero en llegar primero en salir, podemoscargar a memoria los 3 primeros procesos:

COLA DE PROCESOS

No. de procesos Memoria Requerida (K) Tiempo Ráfaga

12345

60100307050

10520815

Page 16: Administración y manejo de la memoria_Parte1

Múltiples particiones contiguas variables

COLA DE PROCESOS

No. de procesos Memoria Requerida (K) Tiempo Ráfaga

12345

60100307050

10520815

MONITOR

Proceso 1

Proceso 2

Proceso 3

###############

0

256 K

40 K

100 K

200 K

230 K

Page 17: Administración y manejo de la memoria_Parte1

Múltiples particiones contiguas variables

La cola de regiones de memoria disponible queda con un hueco de 26K; sinembargo, en ese hueco no es posible cargar ya ninguno de los procesospendientes, por lo que se dice que tenemos una fragmentación externa de26K. Al terminar el proceso 2, regresa a la cola de regiones de memoriadisponibles un área de 100K en la cual podemos cargar el proceso 4 de 70K,regresando a la cola el área restante de 30K.

La cola de regiones de memoria disponibles queda: 26, 30 con susrespectivas direcciones de inicio. Como el proceso 5 no se puede cargar, nosdeja una fragmentación externa de 56K. El siguiente en terminar es elproceso 1, permitiéndonos cargar el proceso 5 en el área de 60K dejado por elproceso 1, y poniendo en la cola de regiones de memoria disponibles el áreano usada (10K). La cola de regiones de memoria nos queda: 26, 30, 10 con susrespectivas direcciones.

Page 18: Administración y manejo de la memoria_Parte1

Múltiples particiones contiguas variables

Como ya no hay procesos que cargar, no podemos afirmar que se tenga unafragmentación externa de 66K. Esto dependerá de que se pueda cargar o noel siguiente proceso que llegue. En caso negativo, entonces se tieneefectivamente una fragmentación externa de 66K.

El esquema anterior, requiere de una estrategia para asignar los huecos dememoria disponibles.

En general se tienen 3 algoritmos:

"Primero en ajustar" (first-fit)

"Mejor en ajustar" (best-fit)

"Peor en ajustar" (worst-fit).

Page 19: Administración y manejo de la memoria_Parte1

Múltiples particiones contiguas variables

"PRIMERO EN AJUSTAR" (First Fit). Carga el programa en el primerhueco suficientemente grande que encuentra en la lista de regiones dememoria disponibles. Es el algoritmo mas rápido.

"MEJOR EN AJUSTAR" (Best Fit). Busca por el hueco de memoria quemenos fragmentaci6n produzca. Si la lista de regiones de memoriadisponibles es mantenida en orden ascendente, es fácil y rápido encontrar lamas adecuada. De otra manera debemos buscar toda la lista.

"PEOR EN AJUSTAR" (Wosrt Fit). Carga el programa en el hueco masgrande que encuentra y deja en la lista de regiones disponibles el tamaño delresto de la memoria no usada. Esta estrategia a veces rinde mejoresresultados que la de mejor en caber, ya que produce huecos grandes defragmentaci6n que pueden ser mejor utilizados que fragmentaciones muypequeñas. Es adecuado mantener la lista ordenada de mayor a menor parareducir el tiempo de búsqueda. El hardware usado para este sistema esexactamente el mismo; es decir, dos registros que delimitan perfectamenteel área del programa a ejecutar.

Page 20: Administración y manejo de la memoria_Parte1

Múltiples particiones contiguas variables

COMPACTACIÓN :

En la última parte del ejemplo, existe una fragmentación de 66K compuestapor 3 huecos de 10, 30 y 26K, los cuales son mas difíciles de usar que sifueran un solo bloque de 66K. Sin embargo, es posible compactar lamemoria haciendo que todos los huecos disponibles se junten ya sea en laparte de abajo o del medio de la memoria.

Para efectuar la compactación, es necesario cambiar de localidad losprocesos, por lo que este sistema solo es posible si el hardware cuenta conrelocalización dinámica; ya que de otra forma, los procesos no podríantrabajar en sus nuevas direcciones.

Page 21: Administración y manejo de la memoria_Parte1

Paginación

El sistema de particiones variables sufre del problema de fragmentaciónexterna ya que un proceso debe ser cargado en memoria contigua. Esteproblema puede ser resuelto por compactación o por paginación.Paginación permite que un programa sea cargado en memoria no contigua;es decir, en varios fragmentos fijos no contiguos .

Es importante notar que paginación es por si misma una forma derelocalización dinámica. Un aspecto importante de paginación es la claraseparación entre la memoria desde el punto de vista del usuario y lamemoria %Ica actual. El usuario ve la memoria como un espacio contiguo,conteniendo solo su programa. En realidad, el programa del usuario estadisperso a través de toda la memoria %Ica, la cual también contiene otrosprogramas. La traducción entre ambas memorias es realizada por la tabla depaginas que es manejada por el sistema operativo. Paginación viene a ser unesquema de múltiples particiones fijas no contiguas.

Page 22: Administración y manejo de la memoria_Parte1

Paginación

ASIGNACION DE MEMORIA EN PAGINACION.

En el sistema de paginación, cuando un proceso nuevo llega al dispositivo despool, es seleccionado por el asignador de procesos para ser cargado amemoria. Primero comprueba su requerimiento de memoria en paginas. Enseguida busca en la lista de cuadros de memoria disponibles para ver si esposible cargar el proceso. Cada pagina requiere un cuadro, por lo que si elproceso consta de N paginas, deberá haber N cuadros de la memoria físicapara poder cargarlo.

El sistema de paginación esta exento de fragmentación externa, ya que todoslos cuadros pueden ser otorgados a cualquier proceso que lo necesite. Sinembargo, es posible tener fragmentaci6n interna ya que los cuadros son detamaño fijo y si un programa no logra llenar la pagina completa, se tendráun desperdicio. El peor caso es cuando un programa requiere de n paginasmas una palabra, ya que casi toda la pagina quedara vacía.

Page 23: Administración y manejo de la memoria_Parte1

Segmentación

Segmentación es otro método de administración de memoria, el cualpermite cargar un programa en memoria no contigua. Este método es masnatural ya que generalmente un programa esta constituido por un programaprincipal y varios subprogramas separados, por lo que cada una de estasentidades puede ser guardada en un segmento de memoria individual detamaño exacto según lo requiera cada uno. Lo anterior indica que lossegmentos deben de ser de longitud variable, en contraste con paginación endonde las paginas son de longitud fija. Cada segmento tiene un nombre onumero y una longitud. El usuario por esto especifica cada dirección por doscantidades: un nombre de segmento y un desplazamiento.

Dado que ahora una dirección dentro de un programa del usuario (direcciónlógica), debe especificarse como una direcci6n de 2 dimensiones, y dado quela memoria física es aun un arreglo de una sola dimensi6n, es necesarioimplementar un dispositivo que mapee o convierta una direcci6n de dosdimensiones en otra de una sola dimensi6n. Esto se hace por medio de latabla de segmentos.

Page 24: Administración y manejo de la memoria_Parte1

Segmentación

FRAGMENTACION EN PAGINACION.

El asignador de procesos debe encontrar y cargar en memoria todos lossegmentos de un programa del usuario. Esta situación es similar apaginación excepto que los segmentos son de longitud variable, (las paginasson todas del mismo tamaño), por lo que la fragmentación interna puede serdespreciable. Sin embargo, se puede tener fragmentación externa cuandotodos los segmentos disponibles son demasiado pequeños para cargar ciertoprograma.

Segmentación viene a ser un esquema de múltiples particiones no contiguasvariables.

Page 25: Administración y manejo de la memoria_Parte1