Está en la página 1de 35

SO

IV

Administracin de memoria

Unidad 4: Administracin de Memoria Administracin de memoria [SW] En un sistema monoprogramado, la memoria principal se divide en dos partes: Una para el sistema operativo (monitor residente o ncleo). Otra para el programa que se ejecuta en ese instante. En un sistema multiprogramado, la parte de usuario de la memoria debe subdividirse an ms para hacer sitio a varios procesos. La tarea de subdivisin la lleva a cabo el SO y se conoce como Administracin o Gestin de Memoria. Administrador de Memoria [T] La parte del SO que administra la memoria se llama Administrador de Memoria. Su labor consiste en llevar un registro de las partes de memoria que se estn utilizando y aquellas que no, con el fin de asignar espacio en memoria a los procesos cuando stos la necesiten y liberarlo cuando terminen, as como administrar el intercambio entre la memoria principal y el disco, en los casos en que la memoria principal no pueda albergar a todos los procesos. Estrategias de la administracin Los sistemas de administracin de memoria se pueden clasificar en dos tipos: las que utilizan intercambio y paginacin y las que no. 4. Estrategias de la Administracin 4.1. Monoprogramacin sin intercambio y paginacin [T]

Tiene slo un proceso en memoria en cada instante. El usuario carga toda la memoria con un solo programa que utiliza toda la mquina. Implica que los procesos deban contener controladores de E/S para cada uno de los dispositivos que utilice. La memoria se divide entre el SO y el proceso de un solo usuario. 1. El SO podra estar en la parte inferior de la memoria RAM. 2. En la ROM, en la parte superior de la memoria. 3. Los controladores de dispositivos podran estar en la parte superior de la ROM y el resto del sistema en la parte inferior de la memoria.

Si el sistema est organizado de esta forma, slo se puede ejecutar un proceso a la vez. El usuario escribe un comando en la terminal y el SO carga el programa solicitado desde el disco a la memoria y lo ejecuta. Cuando el

31

SO

IV

Administracin de memoria

proceso termina, el SO enva un indicador al terminal y espera otro comando para cargar otro proceso que se escribe encima del anterior.

31

SO

IV

Administracin de memoria

Multiprogramacin Modo de operacin que permite la ejecucin intercalada de dos o ms programas en un solo procesador. [SW] [T] Razones de la multiprogramacin: Facilita la programacin de una aplicacin al dividirla en dos o ms procesos. Permite proporcionar servicios a varios usuarios simultneamente teniendo varios procesos cargados en memoria. Disminuye el tiempo de ocio del procesador. 4.2. Multiprogramacin con Particiones Fijas [SW] El esquema ms sencillo de gestin de memoria es dividirla en regiones con lmites fijos. Existen dos alternativas de particin esttica, emplear particiones de igual tamao, o bien de tamaos distintos. Las particiones estticas de igual tamao plantean dos dificultades: Un programa puede ser demasiado grande para caber en una particin. Entonces el programador deber cargar slo un mdulo del programa. El uso de la memoria principal es extremadamente ineficiente. Cualquier programa, sin importar lo pequeo que sea, ocupar una particin completa. Por ejemplo, un programa de 2MB, ocupara una particin de 8MB. El bloque de datos cargados es ms pequeo que la particin, lo que implica que se malgasta el espacio interno de esa particin, esto se denomina fragmentacin interna. Ambos problemas pueden reducirse, aunque no solventarse, si se emplean particiones de distintos tamaos.

31

SO

IV

Administracin de memoria

4.2.1. Algoritmo de ubicacin Con particiones del mismo tamao, la ubicacin de un proceso en memoria resulta trivial. Con particiones de distinto tamao hay dos maneras de asignar los procesos a las particiones: Una es asignar cada proceso a la particin ms pequea en la que quepa (se supone que se conoce el tamao de los procesos, lo que no siempre es cierto. Si no se conoce el tamao del proceso, las nicas alternativas son la superposicin o la memoria virtual). Se tiene una cola de planificacin para cada particin. La ventaja es que se minimiza la fragmentacin interna. Esta tcnica es ptima desde el punto de vista de la particin, no desde el punto de vista del sistema global. Otra es emplear una nica cola para todos los procesos. Cuando se va a cargar un proceso en la memoria, se selecciona la particin ms pequea disponible que pueda albergar el proceso.

Desventajas del empleo de particiones fijas: El nmero de particiones especificadas en el momento de a generacin del sistema limita el nmero de procesos activos. Los tamaos de particin tambin se programan en el momento de la generacin del sistema, los procesos pequeos generan mucha fragmentacin interna. Si se conocen de antemano el tamao de los procesos, podra ser una tcnica razonable, pero es generalmente ineficiente.

31

SO 4.3.

IV

Administracin de memoria

Anlisis de sistemas con multiprogramacin

31

SO 4.4.

IV

Administracin de memoria

Requisitos de asignacin de memoria

4.4.1. Reubicacin [SW] Se busca poder cargar y descargar los procesos activos en la memoria principal para maximizar el uso del procesador, manteniendo una gran reserva de procesos listos para ejecutarse. Una vez que se ha descargado el programa en disco, cuando vuelva a ser cargado, se puede necesitar reubicar el proceso en un rea distinta de memoria. El SO tiene que conocer la ubicacin de la informacin de control del proceso, de la pila de ejecucin, el punto de inicio de ejecucin del proceso. El procesador debe ocuparse de referencias a memoria dentro del programa. Adems el SO y el procesador deben ser capaces de traducir las referencias a la memoria (direcciones lgicas) a las direcciones fsicas reales. [I] Otro problema a considerar es la carga de los programas de usuario. Los programas de usuario se ubicarn por detrs de la direccin del registro valla. Una alternativa es utilizar cdigo reubicable. Se posterga el ligado hasta el tiempo de carga. Si cambia la valla, slo habr que recargar el cdigo. [DP] Cuando Proceso suspendido es reingresado a memoria, puede que ubicacin distinta a la anterior (reubicacin). Se deben traducir las referencias a la memoria encontradas en el cdigo del programa a las direcciones fsicas reales. 4.4.2. Asignacin [SW] La asignacin de direcciones especficas a las referencias a memoria se puede realizar en tiempo de compilacin, carga o ejecucin. Si se retrasa el clculo de direcciones absolutas hasta la ejecucin, el mdulo de carga se trae a la memoria con todas las referencias de forma relativa. La direccin absoluta no se calcula hasta que se ejecuta una instruccin. Le clculo de direcciones dinmico proporciona una completa flexibilidad. Un programa puede cargarse en cualquier regin de la memoria principal, ms tarde, ser descargado, para ser posteriormente cargado en una posicin diferente.

31

SO

IV

Administracin de memoria

4.4.3. Proteccin [DP] El cdigo de un proceso no puede hacer referencia a posiciones de memoria de otros procesos sin permiso. Antes de que un proceso acceda a buscar una instruccin o un dato debe comprobarse si tiene el acceso permitido. [SW] El cdigo de un proceso no puede hacer referencia a posiciones de memoria de otros procesos sin permiso. Por lo tanto, todas las referencias a la memoria generadas por un proceso deben comprobarse durante la ejecucin para asegurar que slo hacen referencia al espacio de memoria destinado a dicho proceso. Un proceso de usuario no puede acceder a ninguna parte del SO. El programa de un proceso no puede bifurcarse hacia una instruccin de otro proceso. Sin un permiso especial, el programa de un proceso no puede acceder al rea de datos de otro proceso. El procesador debe ser capaz de abortar estas instrucciones en el momento de la ejecucin. Es el procesador y no el SO el que debe satisfacer las exigencias de proteccin de la memoria. El SO no puede anticiparse a todas las referencias de memoria que har el programa. Slo es posible evaluar una referencia a memoria durante la ejecucin. El hardware del procesador debe poseer dicha capacidad. 4.4.4. Uso compartido o Compartimiento [DP] Permite el acceso de varios procesos a la misma zona de la memoria principal. Es mejor permitir a cada proceso que acceda a la misma copia del programa, en lugar de tener cada uno su propia copia aparte. [SW] Los procesos que cooperan en una tarea pueden necesitar el acceso compartido a la misma estructura de datos. El compartimiento o uso compartido consiste en permitir el acceso de varios procesos a la misma zona de memoria principal. Si una serie de procesos estn ejecutando el mismo programa, resultara beneficioso permitir que cada proceso acceda a la misma copia del programa, en vez de tener cada uno su propia copia. El sistema de gestin de memoria debe permitir acceso controlados a las reas compartidas de la memoria sin comprometer la proteccin. 4.4.5. Organizacin Lgica [DP] La mayora de los programas se organizan en mdulos. Los mdulos pueden escribirse y compilarse independientemente. Pueden otorgarse distintos grados de proteccin (slo lectura, slo ejecucin) a los mdulos. Compartir mdulos. [SW] La mayora de los programas se organizan en mdulos, algunos no son modificables (slo lectura, slo ejecucin) y otros contienen datos que se pueden modificar. Si el SO y el HW pueden tratar de forma efectiva los programas y datos en forma de mdulos, se tendrn las siguientes ventajas: 1. Los mdulos pueden escribirse y compilarse independientemente mientras que el sistema resuelve las referencias de un mdulo a otro.

31

SO

IV

Administracin de memoria

2. Pueden otorgarse distintos grados de proteccin a los distintos mdulos (slo lectura, slo ejecucin). 3. Es posible introducir mecanismos por medio de los cuales los procesos puedan compartir mdulos, lo que facilita al usuario especificar el compartimiento que desea. La herramienta que ms fcilmente satisface estas necesidades es la segmentacin. 4.4.6. Organizacin Fsica [DP] La memoria disponible para un programa y sus datos puede ser insuficiente: La superposicin permite que varios mdulos sean asignados a la misma regin de memoria. El programador no conoce cunto espacio habr disponible. [SW] La memoria del computador se organiza en al menos dos niveles: memoria principal y secundaria. La memoria principal disponible para un programa y sus datos puede ser insuficiente. Para lo cual el programador debe emplear superposicin (overlaying): el programa y los datos se organizan de tal forma que puede haber varios mdulos asignados a la misma regin de memoria, con un programa principal responsable del intercambio de mdulos segn se necesite. El programador no conoce durante la codificacin cunto espacio habr disponible o dnde estar este espacio. La tarea de mover informacin entre los dos niveles de memoria debe ser responsabilidad del sistema. Esta tarea es la esencia de la gestin de memoria. 4.5. Intercambio [T] El traslado de procesos de la memoria principal al disco y viceversa se denomina intercambio. 4.5.1. Multiprogramacin con particiones variables [DP] Las particiones son variables en nmero y longitud. Al proceso se le asigna exactamente tanta memoria como necesite. Finalmente, hay varios huecos en la memoria. Este fenmeno se denomina fragmentacin externa. Se debe usar la compactacin para desplazar los procesos que estn contiguos, de forma que toda la memoria libre quede junta en un bloque. [S] Con las particiones dinmicas, las particiones son variables en nmero y longitud. Cuando se carga un proceso en la memoria principal, se le asigna exactamente tanta memoria como necesita y no ms. Este mtodo comienza bien, pero finalmente desemboca en una situacin en la que hay un gran nmero de huecos pequeos en la memoria. La memoria comienza a estar ms fragmentada y su rendimiento decae. Este fenmeno se conoce como fragmentacin externa: la memoria externa a todas las particiones se fragmenta cada vez ms. 4.5.2. [SW] Compactacin

31

SO

IV

Administracin de memoria

La compactacin es una tcnica para vencer la fragmentacin externa. De vez en cuando, el SO desplaza los procesos para que estn contiguos, toda la memoria libre queda junta en un solo bloque. Es un procedimiento que consume tiempo, desperdicia tiempo de procesador. La compactacin necesita reubicacin dinmica, mover un programa de una regin a otra de la memoria sin invalidar las referencias a la memoria del programa.

31

SO 4.5.3.

IV Administracin de espacio libre

Administracin de memoria

4.5.3.1. Administracin de memoria con mapas de bits [T] Con un mapa de bits, la memoria se divide en unidades de asignacin. A cada unidad de asignacin le corresponde un bit en el mapa de bits, el cual toma valor 0 si la unidad est libre, 1 si est ocupada o viceversa. Un mapa de bits es una forma sencilla para llevar un registro de las palabras de la memoria en una cantidad fija de memoria, puesto que el tamao del mapa slo depende del tamao de la memoria y el tamao de la unidad de asignacin. El problema es que la bsqueda en un mapa de bits de ciertas cadenas es una operacin lenta, por lo que los mapas no se utilizan con frecuencia.

4.5.3.2. Administracin de memoria con listas ligadas [T] Se tiene una lista ligada de los segmentos de memoria asignados o libres, en donde un segmento puede ser un proceso hueco entre dos procesos. Cada entrada a la lista, especifica un hueco o proceso, la direccin donde comienza, su longitud y un puntero a la siguiente entrada. Un proceso que termina tiene, por lo general, dos vecinos (excepto cuando se encuentre en la parte superior o inferior de la memoria). stos pueden ser procesos o huecos, por lo que se producen las 4 combinaciones de la figura:

(a) la actualizacin de la lista requiere reemplazar el proceso por un hueco. (b) y (c) la lista se acorta en una entrada. (d) al sacar el proceso, la lista queda vaca.

31

SO

IV

Administracin de memoria

4.5.3.2.1. Algoritmos de asignacin o ubicacin [T] Cuando los procesos y huecos se mantienen en una lista, se pueden utilizar diversos algoritmos para asignar espacio de memoria a estos procesos. Suponemos que el administrador de memoria conoce la cantidad de memoria por asignar. Primero en ajustarse El administrador de memoria revisa toda la lista hasta encontrar un espacio lo suficientemente grande. El espacio se divide en dos partes, una para el proceso y otra para la memoria no utilizada, salvo en el caso de un ajuste perfecto. Es rpido, busca lo menos posible. Siguiente en ajustarse En vez de comenzar desde el principio de la lista, comienza a buscar desde el ltimo punto en el cual se detuvo. Mejor ajuste Busca en toda la lista y toma el mnimo hueco adecuado. En vez de asignar un hueco grande que podra necesitarse ms adelante, el mejor ajuste intenta encontrar el hueco ms cercano al tamao real necesario. *El mejor en ajustarse es ms lento que el primero en ajustarse, ya que debe pasar por toda la memoria; y produce mayor desperdicio de memoria, puesto que tiende a generar muchos huecos pequeos, sin utilidad. Peor ajuste Toma siempre el hueco ms grande disponible, de forma que el hueco obtenido sea suficientemente grande para ser til. La simulacin ha demostrado que el pero ajuste tampoco es una buena idea. *Estos cuatro algoritmos pueden agilizarse si se tienen dos listas independientes, una para los procesos, otra para los huecos. De esta forma, todos ellos pueden dedicarse a inspeccionar los huecos, no los procesos. La primer palabra de cada hueco podra contener el tamao del hueco, y la segunda el puntero a la siguiente palabra. Esta lista de huecos, podra ordenarse por tamaos. El precio que se paga por ese aumento de velocidad al momento de asignar la memoria, es la complejidad adicional y la disminucin de velocidad al liberar la memoria, ya que un segmento liberado debe ser eliminado de la lista de procesos e insertarse en la lista de huecos. Ajuste rpido Tiene listas independientes para alguno de los tamaos que se necesiten ms frecuentemente. La bsqueda de de un hueco del tamao solicitado es ms rpida, pero al ordenar por tamao los huecos y terminar o intercambiarse un proceso, la bsqueda de vecinos para ver si es posible la fusin es una operacin cara. Si no se lleva a cabo la fusin, la memoria se fragmentar con rapidez en un gran nmero de huecos pequeos e intiles. [S] Cuando llega el momento de cargar o traer un proceso a memoria principal, si hay libre ms de un bloque de memoria de tamao suficiente, el SO debe decidir cul asignar. Existen 3 algoritmos de ubicacin:

31

SO

IV

Administracin de memoria

Mejor Ajuste (best-fit): elige el bloque de tamao ms prximo al solicitado. Primer Ajuste (first-fit): comienza recorriendo la memoria desde el principio y elige el primer bloque disponible que sea suficientemente grande. Siguiente Ajuste (next-fit): recorre la memoria desde el lugar de la ltima ubicacin y elige el siguiente bloque disponible que sea suficientemente grande. Cul de estos mtodos es mejor, depender de la secuencia de intercambios y del tamao de estos procesos. El algoritmo del primer ajuste no slo es el ms sencillo, generalmente es el mejor y ms rpido. El algoritmo del siguiente ajuste tiende a generar resultados peores que el del primer ajuste, llevar frecuentemente a la asignacin de bloques libres del final de la memoria, el bloque de memoria libre ms grande, que suele aparecer al final del espacio de memoria, se divide rpidamente en fragmentos pequeos. Con el siguiente ajuste har falta una compactacin ms frecuente. El primer ajuste puede poblar el extremo inicial de pequeas particiones libres que es necesario recorrer en pasadas siguientes. El de mejor ajuste proporciona en general los peores resultados, buscando el hueco ms pequeo, el resultado es que la memoria principal se llena rpidamente de huecos pequeos como para satisfacer las solicitudes, se debe compactar ms frecuentemente que con los otros algoritmos. 4.5.3.3. Sistemas de colegas o sistemas de asociados. [SW] En un sistema de colegas, los bloques de memoria disponibles son de tamao 2K. Si se hace una solicitud de tamao s tal que 2U-1 < s <= 2U (siendo 2U el tamao de bloque ms grande disponible, generalmente el tamao de la memoria entera), entonces el bloque entero se asigna: En otro caso, el bloque se divide en dos colegas de igual tamao. Este proceso contina hasta que el bloque ms pequeo sea mayor o igual que s generndose. void conseguir_hueco (int i) { If ( i == (U+1)) <fallo>; if (< vacia lista_i >) { conseguir:hueco ( i + 1 ); < dividir el hueco en colegas >; < poner colegas en lista_i >; } < asignar proceso al primer hueco de lista_i >; } Ejemplo

31

SO

IV

Administracin de memoria

En un SO actual, la memoria virtual basada en paginacin y segmentacin es superior a un sistema de colegas. Sin embargo, el sistema de colegas ha encontrado su aplicacin en sistemas paralelos como un eficiente medio de asignar y liberar programas en paralelo. Una forma modificada del sistema de colegas se utiliza en la asignacin de memoria en el ncleo de UNIX. 4.5.4. Direccin lgica, relativa, fsica. Soporte de HW para la reubicacin. [SW] Direccin lgica: referencia a una direccin de memoria, se debe hacer una traduccin a una direccin fsica antes de acceder a memoria. Direccin relativa: caso particular de la direccin lgica, la direccin se expresa como una posicin relativa a algn punto conocido. Este tipo de direcciones incluyen contenidos del registro de instruccin, direcciones

31

SO

IV

Administracin de memoria

que aparecen en instrucciones de bifurcacin, llamada y direcciones de datos de instrucciones de carga o almacenamiento. Direccin fsica o absoluta: posicin real en la memoria principal. Traduccin de direcciones Cuando un proceso pasa a estado Ejecutando, se carga con la direccin en el registro base. Existe tambin un registro lmite, que indica la posicin final del programa. A lo largo de la ejecucin del proceso, se encuentran direcciones relativas. Estas direcciones relativas pasan por dos etapas: 1. Se aade el valor del registro base a la direccin relativa para obtener una direccin absoluta. 2. Le direccin obtenida se compara con el valor del registro lmite. Si esa direccin est dentro de los lmites, se ejecuta la instruccin. Sino, se genera una interrupcin al SO que debe dar respuesta al error.

4.5.5. Administracin del intercambio entre memoria y disco. [S] Un proceso tiene que estar en memoria para ejecutarse, pero podra intercambiarse temporalmente de la memoria a un almacenamiento auxiliar y luego traerse otra vez a la memoria para continuar su ejecucin. Cada vez que el planificador de CPU decide ejecutar un proceso, llama al despachador. ste comprueba que el siguiente proceso de la cola est en la memoria; si no es as, y no hay una regin de memoria libre, el despachador intercambia a disco un proceso que s est en la memoria y trae el proceso deseado. A continuacin, el despachador vuelve a cargar los registros como siempre y transfiere el control al proceso seleccionado. El tiempo de conmutacin de contexto en sistemas de intercambio es relativamente alto. La parte principal del tiempo de intercambio es el tiempo de transferencia, el cual es directamente proporcional a la cantidad de memoria que se intercambia. *Restricciones: si queremos intercambiar un proceso, ste debe estar totalmente inactivo y no tener E/S pendientes. Actualmente, el intercambio estndar se emplea en pocos sistemas, ya que requiere demasiado tiempo de intercambio y ofrece muy poco tiempo de ejecucin como para ser una solucin de gestin de memoria razonable.

31

SO

IV

Administracin de memoria

Una modificacin de intercambio se usa en muchas versiones de UNIX, normalmente no est activado, pero se inicia si hay muchos procesos en ejecucin y estn ocupando una cantidad umbral de memoria.

4.6.

Memoria virtual

[T] La idea fundamental detrs de la memoria virtual es que el tamao combinado del programa, datos y la pila puede exceder la cantidad de memoria fsica disponible. El SO mantiene aquellas partes del programa que se utilicen en cada momento en la memoria principal y el resto permanece en el disco. [SW] No ser necesario que todas las pginas o segmentos de un proceso estn en memoria durante la ejecucin. Si tanto el fragmento (pgina o segmento) que contiene la siguiente instruccin a leer como la parte que contiene los prximos datos a acceder estn en la memoria principal, la ejecucin podr continuar. El SO comienza trayendo slo unos fragmentos, incluido el fragmento que contiene el comienzo del programa. Se llamar conjunto residente del proceso a la parte del proceso que est realmente en memoria principal. Cuando el proceso se ejecuta, todo ir perfectamente mientras las referencias a memoria estn en posiciones que pertenezcan al conjunto residente. Si el procesador encuentra una direccin lgica que no est en memoria, genera una interrupcin que indica un fallo de acceso a memoria. El SO pone al proceso en estado Bloqueado y emite una solicitud de lectura de E/S al disco. El SO puede mandar a que otro proceso se ejecute mientras se realiza la operacin de E/S. Una vez que el fragmento deseado se ha trado a la memoria principal, se devuelve el control al SO que coloca al proceso en estado de Listo. Ventajas: Se pueden mantener ms procesos en memoria principal, lo cual permite una multiprogramacin ms efectiva. Se carga slo algunos fragmentos de un proceso en particular, dejando espacio para ms procesos. Esto conduce a una utilizacin ms eficiente del procesador, ya que es ms probable que al menos uno de los procesos est en estado Listo. Releva al usuario de las restricciones de espacio de la memoria principal. Un proceso puede ser ms grande que toda la memoria principal. Hiperpaginacin (thrashing) [SW]

31

SO

IV

Administracin de memoria

Si se expulsa un fragmento justo antes de ser usado, se tendr que traer de nuevo el fragmento de manera casi inmediata. Demasiados intercambios de fragmentos conducen al problema de hiperpaginacin: el procesador consume ms tiempo intercambiando fragmentos que ejecutando instrucciones de usuario. La forma de evitar la hiperpaginacin, en esencia, es que el SO intente adivinar qu fragmentos se usarn con mayor probabilidad en un futuro prximo. Estos argumentos se basan en el Principio de cercana. Principio de cercana [SW] Este principio afirma que las referencias a los datos y al programa dentro de un proceso tienden a agruparse. Entonces sera posible hacer predicciones inteligentes sobre qu fragmentos de un proceso se necesitaran en un futuro cercano y as evitar la hiperpaginacin. Las referencias a memoria tienden a agruparse, despus de un largo perodo de tiempo, las agrupaciones cambian, pero en un perodo corto de tiempo, el procesador estar trabajando principalmente con grupos fijos de referencia de memoria. Excepto en instrucciones de bifurcacin o llamada, las cuales constituyen slo una pequea fraccin de todas las instrucciones, la ejecucin de un programa es secuencial. La prxima instruccin a leer estar inmediatamente a continuacin de la ltima instruccin leda. Las estructuras iterativas constan de un pequeo nmero de instrucciones que se repitan muchas veces. Durante la duracin de la iteracin, la ejecucin se realiza sobre una pequea seccin contigua del programa. En muchos programas, las instrucciones involucran el procesamiento de vectores o secuencias de registros. Cercana espacial es la tendencia del procesador para acceder a instrucciones secuenciales, y la tendencia de un programa para acceder a posiciones de datos secuenciales. Cercana temporal es la tendencia del procesador para acceder a posiciones de memoria que han sido utilizadas recientemente. 4.6.1. Paginacin [I] Una solucin al problema de fragmentacin externa es permitir que el espacio de direcciones lgicas de un proceso no sea contiguo. Una manera de hacer esto es por medio de la paginacin. [SW] *Paginacin: transferencia de pginas entre la memoria principal y la memoria secundaria. *Pgina: en el almacenamiento virtual, es un bloque de longitud fija que dispone de una direccin virtual y que se transfiera como una unidad entre la memoria principal y la memoria secundaria. 4.6.1.1. Mtodo bsico [SW] (Cuadro 8.1 pg. 326) La memoria principal est dividida en bloques pequeos de tamao fijo llamados marcos (frames). La memoria lgica tambin se divide en bloques del mismo tamao que los marcos, llamados pginas. El compilador o el sistema de gestin de memoria dividen los programas en pginas.

31

SO

IV

Administracin de memoria

Hay fragmentos en los marcos pero no hay fragmentacin externa. El SO debe mantener una tabla de pginas para cada proceso, indicando en qu marco est cada pgina. El SO debe mantener una lista de marcos libres. El procesador emplea el nmero de pgina y el desplazamiento para calcular las direcciones absolutas. Todas las pginas de un proceso tienen que estar en la memoria principal para que el proceso se ejecute, a menos que se use superposicin. [I] Cuando se va a ejecutar un proceso, sus pginas se cargan desde el almacenamiento auxiliar, en cualquier marco de memoria que est disponible. Cada direccin generada por el procesador se divide en dos partes: un nmero de pgina (p) y un desplazamiento en la pgina (d). El nmero de pgina se utiliza como ndice de una tabla de pginas, la cual contiene la direccin base de cada pgina en la memoria fsica. Esta direccin base se combina con el desplazamiento en la pgina para definir la direccin de memoria fsica que se enva a la unidad de memoria. El tamao de pgina est definido por el hardware y suele ser una potencia de dos que vara entre 512 bytes y 16 Mb por pgina, dependiendo de la arquitectura del computador. Es til que las pginas sean de tamao de potencia de dos, ya que facilita mucho la traduccin de una direccin lgica a un nmero de pgina y el desplazamiento en la pgina. La direccin lgica tiene la estructura

Donde p es el nmero de pgina, es un ndice para la tabla de pginas y d es el desplazamiento dentro de la pgina. Cuando un proceso ingresa en el sistema para ejecutarse, se examina su tamao, expresado en pginas. Cada pgina del proceso requiere un marco, as que si un proceso necesita n pginas, deber haber n marcos libres en la memoria. Si los hay, se asignan al proceso entrante. La primera pgina del proceso se asigna a uno de los marcos asignados, y el nmero de marco se asienta en la tabla de pginas para este proceso. La siguiente pgina se carga en otro marco, su nmero de marco se coloca en la tabla de pginas, y as sucesivamente. Puesto que el sistema operativo administra la memoria fsica, debe tener conciencia de los detalles de su asignacin: qu marcos estn asignados, cules estn libres, cuntos marcos hay en total, etc. Esta informacin se guarda en una estructura de datos llamada tabla de marcos, la cual contiene, por cada marco de pgina fsica, una entrada que indica si el marco est libre u ocupado, y en tal caso a que pgina de que proceso se le asigno. El sistema operativo mantiene una copia de la tabla de pginas de cada proceso, esto le sirve para traducir direcciones lgicas en fsicas cada vez que el sistema operativo deba comprobar manualmente una direccin. 4.6.2. Tablas de pgina [SW] Se debe hacer una traduccin, por medio de la tabla de pgina, de una direccin virtual o lgica formada por un nmero de pgina y

31

SO

IV

Administracin de memoria

desplazamiento a una direccin fsica que est formada por nmero de marco y desplazamiento. En paginacin simple, cada proceso tiene su propia tabla de pginas, cuando se cargan todas las pginas del proceso en memoria principal, se crea y carga en la memoria principal una tabla de pginas. Dado que la tabla de pgina es de longitud variable, dependiendo del tamao del proceso, no es posible suponer que quepa en los registros, debe estar en la memoria principal para ser accesible. [T] La finalidad de la tabla de pgina es asociar las pginas virtuales con los marcos. El diseo ms sencillo (desde el punto de vista conceptual) es tener una sola tabla de pginas, consistente en un arreglo de registros en hardware, con una entrada por cada pgina virtual, ordenadas por el nmero de pgina virtual. Al iniciar un proceso, el SO carga los registros con la tabla de pginas del proceso, tomada de una copia que se conserva en la MP. Durante la ejecucin del proceso, no son necesarias ms referencias a la memoria por parte de la tabla de pginas. Las ventajas de este mtodo residen en que es directo y no necesita de referencias a la memoria durante la asociacin. Una desventaja el hecho de cargar la tabla de pginas en cada cambio de contexto puede disminuir el desempeo. En el otro extremo, la tabla de pginas puede estar totalmente dentro de la memoria principal. Todo lo que necesita el hardware es un solo registro que apunte hacia el inicio de la tabla de pginas. Este diseo permite que el mapa de la memoria sea modificado en un cambio de contexto, volviendo a cargar un registro. Por supuesto, tiene la desventaja de que necesita una o ms referencias la memoria para leer las entradas de la tabla de pginas durante la ejecucin de cada instruccin. Por esta razn, este punto de vista rara vez se utiliza.

4.6.2.1. Tablas de pginas de varios niveles Para evitar el problema de tener todas las tablas en memoria todo el tiempo, se utilizan tablas de pginas con varios niveles. Existe una nica tabla de pginas de primer nivel. Cada entrada de esta tabla apunta a tablas de pginas de segundo nivel, a su vez las tablas de pginas de segundo nivel apuntan a tablas de pginas de tercer nivel, as

31

SO

IV

Administracin de memoria

sucesivamente. Las tablas de pginas del ltimo nivel apuntan directamente a marcos de pgina. A la hora de traducir una direccin lgica, el nmero de pgina contenido en la misma se considera dividido en tantas partes como niveles existan.

4.6.3. [I]

Ejemplos de HW de paginacin

(p) Nro. de pgina y (d) Desplazamiento (p) es un ndice dentro de la tabla de pginas. La tabla de pginas contiene la direccin base de cada pgina en la memoria fsica. Esta direccin base se combina con el desplazamiento para definir la direccin de memoria fisica que se enva a la unidad de memoria. El hard se observa en la Figura 7.20
direcc. lgica cpu p d direcc. fsica f d memoria fsica p f

tabla de pginas

Figura 7.20 Hardware de Paginacin

El modelo de paginacin en memoria se observa en FIGURA 7.21.

31

SO

IV

Administracin de memoria
N de frame 0

pagina 0 pagina 1 pagina 2 pagina 3 mem. lgica

0 1 2 3

1 4 3 7

1 2 3 4 5 6 7

pgina 0

pgina 2 pgina 1

tabla de pgina

pgina 3 mem. fsica

Fig. 7.21 Modelo de paginacin de memoria fsica y lgica

Normalmente, el tamao de pgina es una potencia de 2. En general, si el tamao de pgina es P, entonces una direccin lgica U, produce un N de pgina p y un desplazamiento d mediante: p = U div P d = U mod P div. entera. mod. resto entero.

La seleccin de potencias de 2, hace la traduccin particularmente fcil. Si una pgina es de 2n de tamao, entonces los n-bits de orden inferior de una direccin lgica designan el desplazamiento (d) y el resto de los bits de orden superior, designan el N de pgina. As, si el tamao de pgina es una potencia de dos, podemos evitar la divisin. (Figura 7.22). Mquina Atlas DEC-10 Sigma 7 Nova 3/D XDS-940 IBM/370 Direccin 20 18 17 15 14 24 Bits de pgina 11 9 8 5 3 13 o 12 desplazam. 9 9 9 10 11 11 o 12

Fig. 7.22 N de direcciones de bits para varias computadoras con paginac. Para un ejemplo concreto, observemos la Figura 7.23. Usamos un tamao de pgina de 4 palabras y una memoria fsica de 32 palabras (8 pginas).

31

SO

IV

Administracin de memoria
0

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

a b c d e f g h i j k l m n o p

0 5 1 6 2 1 3 2

i j k l m n o p

12 Tabla de pginas 16

memoria lgica 20 a b c d 24 e f g h 28

memoria fsica

Figura 7.23 Ejemplo de paginacin para una memoria de 32 palabras con pginas de 4 palabras

La direccin lgica 0 es pgina 0 y desplazamiento 0. Indexando en la tabla de pginas, encontramos que la pgina 0 est en la celda 5. As la direccin lgica 0 se mapea a la direccin fsica 20 (= 5 x 4 + 0). La direccin lgica 4, mapea a la direccin lgica (6x4 + 0 =) 24. Es importante notar que la paginacin en s misma es un tipo de reubicacin dinmica. Cada direccin lgica se mapea por el hardware de paginacin a alguna direccin fsica. 4.6.4. Memoria asociativa o buffer [SW] La mayora de los esquemas de memoria virtual hacen uso de una cach especial para las entradas de las tablas de pginas, llamada generalmente Buffer de Traduccin Adelantada (TLB Translation Lookaside Buffer). Esta cach contiene aquellas entradas de la tabla de pginas usadas hace menos tiempo. Dada una direccin virtual, el procesador examinar primero la TLB. Si la entrada de la tabla de pginas buscada est presente (un acierto en la TLB), se obtiene el nmero de marco y se forma la direccin real. Si no se encuentra la entrada de la tabla de pginas buscada (un fallo en la TLB), el procesador emplea el nmero de pgina como ndice para buscar en la tabla de pginas del proceso y examinar la entrada correspondiente de la tabla de pginas. Si se encuentra activo el bit de presencia es que la pgina est en la memoria principal y el procesador puede obtener el nmero de marco de la entrada de la tabla de pginas para formar la direccin real. Si el bit de presencia no est activo, la pgina buscada no est en la memoria principal y se produce un fallo en el acceso a la memoria, llamado fallo de pgina. Entonces, se invoca al SO que carga la pgina necesaria y actualiza la tabla de pginas.

31

SO

IV

Administracin de memoria

Puesto que la TLB contiene slo algunas de las entradas de la tabla de pginas completa, no se puede indexar. El procesador debe estar equipado con el HW que permita consultar simultneamente varias entradas de la TLB para determinar si hay una coincidencia en el nmero de pgina. Esta tcnica se denomina correspondencia asociativa. El mecanismo de la memoria virtual debe interactuar con el sistema de la cach de la MP. El sistema de memoria consulta la TLB para ver si encuentra la entrada de la tabla de pginas correspondiente. Si es as, la direccin real (fsica) se genera combinando el nmero de marco con el desplazamiento. Si no, se accede a la entrada de la tabla de pginas. Una vez que se ha generado la direccin real se consulta la cach para ver si est presente el bloque que contiene dicha palabra. Si lo est, es devuelto a la CPU. Si no, se toma la palabra de la MP.

4.6.5. Tablas de pgina invertidas Consideremos las dos tablas de pginas de la figura. La de la izquierda es una tabla convencional de pginas para un proceso, ordenada por nmero de pgina virtual. El hardware extrae el nmero de pgina virtual de la direccin virtual y lo utiliza como ndice de la tabla de pginas. Con la

31

SO

IV

Administracin de memoria

pgina virtual k, se selecciona la k-sima entrada y su marco se utiliza para construir la direccin fsica. La tabla de la derecha no est ordenada por la direccin virtual. En lugar de eso, la i-sima entrada contiene informacin relativa a la pgina que utiliza en ese momento el i-simo marco para pgina. El nmero de entradas en esta tabla es igual al nmero de marcos en memoria fsica, que es independiente del nmero de pginas en el espacio de direcciones virtuales. Esta tabla se llama tabla de pginas invertidas.

4.7.

Gestin de memoria virtual

4.7.1. Polticas de reemplazo de pginas [SW] Cuando todos los marcos de memoria principal estn ocupados y es necesario traer una nueva pgina para atender a un fallo de pgina, la poltica de reemplazo se encarga de seleccionar la pgina a reemplazar de entre las que estn actualmente en la memoria. 4.7.2. Algoritmos de reemplazo de pgina [SW] Existen ciertos algoritmos bsicos que se emplean para la seleccin de una pgina a reemplazar. 4.7.2.1. ptimo [SW] La poltica ptima selecciona para reemplazar la pgina que tiene que esperar una mayor cantidad de tiempo hasta que se produzca la referencia siguiente. Esta poltica genera el menor nmero de fallos de pginas, pero es imposible de implementar puesto que requiere que el SO tenga conocimiento exacto de los acontecimientos futuros. Sin embargo, sirve como estndar con el que comparar los otros algoritmos.

31

SO

IV

Administracin de memoria

4.7.2.2.

Uso No Reciente (NRU Not Recently Used)

[T] Para que el SO recoja estadsticas tiles acerca de las pginas que s se utilizan y las que no, se emplean dos bits de estado asociados a cada pgina R y M. R se activa si se hace referencia a la pgina en cuestin (se lee o escribe en ella). M se activa cuando se escribe en la pgina (es decir, cuando se modifica). Los bits R y M se pueden utilizar para construir el siguiente algoritmo de reemplazo: al iniciar un proceso, el SO asigna un valor 0 a los dos bits R y M de todas las pginas. En forma peridica (en cada interrupcin de reloj), se limpia el bit R, para distinguir las pginas que no tienen referencias recientes de las que s. En un fallo de pgina, el SO inspecciona todas las pginas y las divide en cuatro categoras, segn los valores de los bits R y M: 1. Clase 0: no se ha hecho referencia, ni ha sido modificada. 2. Clase 1: no se ha hecho referencia, ha sido modificada. 3. Clase 2: se ha hecho referencia, no ha sido modificada. 4. Clase 3: se ha hecho referencia, ha sido modificada. El algoritmo NRU elimina una pgina en forma aleatoria de la primera clase no vaca con el nmero ms pequeo. 4.7.2.3. Used) Usada menos recientemente (LRU Least Recently

[T] Al ocurrir un fallo de pgina, se elimina la pgina que no haya sido utilizada durante el tiempo ms grande. Para implementar LRU es necesario mantener una lista ligada de todas las pginas en la memoria, en donde la pgina de uso ms reciente est al principio de la lista y la de uso menos reciente al final. La desventaja est en que la lista debe actualizarse en cada referencia a memoria. 4.7.2.4. Primero en entrar, primero en salir (FIFO First In First Out) La primer pgina que fue almacenada en memoria es la seleccionada para ser reemplazada. La lgica est en reemplazar la pgina que ms tiempo ha estado en memoria, ya que una pgina introducida hace mucho en memoria puede haber cado en desuso. Este razonamiento puede ser incorrecto, porque habr registros del programa o datos que son muy usados a lo largo de la vida del programa. Con el algoritmo FIFO, estas pginas se cargarn y expulsarn repatidas veces. 4.7.2.5. Segunda oportunidad [T] Una modificacin simple del FIFO que evita deshacerse de una pgina de uso frecuente, inspecciona el bit R de la pgina ms antigua. Si es 0, la pgina es tanto antigua como bno utilizada, por lo que reemplaza en forma inmediata. Si el bit es 1, el bit se limpia, la pgina se coloca al final de la lista de pginas y su tiempo de carga se actualiza, como si hubiera llegado en ese momento a la memoria. Despus contina la bsqueda. Los que hace el algoritmo de segunda oportunidad es buscar una pgina antigua sin referencias durante el anterior intervalo de tiempo. Si todas las

31

SO

IV

Administracin de memoria

pginas tienen alguna referencia, el algoritmo funciona como un simple FIFO. 4.7.2.6. Reloj [T] Aunque le algoritmo de segunda oportunidad es razonable, es ineficiente e inecesario, ya que desplaza en forma constante las pginas en una lista. Un mejor enfoque es mantener las pginas en una lista circular, con la forma de reloj, como se muestra en la figura. Una manecilla apunta hacia la pgina ms antigua. Al ocurrir un fallo de pgina, se inspecciona la pgina a la que apunta la manecilla. Si su bit R=0, la pgina se reemplaza y se inserta la nueva pgina en su lugar en el reloj y la manecilla avanza una posicin. Si R=1, este bit se limpia y la manecilla avanza a la siguiente pgina. Este proceso contina hasta encontrar una pgina con R=0. Difiere del algoritmo de segunda oportunidad slo por la implantacin.

4.8. Modelacin de Algoritmos de Paginacin [T] Durante varios aos se ha trabajado en los modelos para los algoritmos de reemplazo de pginas desde un de vista terico. 4.8.1. Anomala de Belady [wiki] Podra parecer que mientras ms marcos para pginas tenga la memoria, menos fallos de pgina tendra un programa, pero este no siempre es el caso. La anomala de Belady es un efecto descubierto y demostrado en 1969 por el cientfico de la computacin hngaro Laszlo Belady, por el cual es posible tener ms fallos de pgina al aumentar el nmero de marcos en la memoria fsica utilizando el mtodo FIFO como algoritmo de reemplazo de pginas. Antes de esta fecha, se crea que incrementar el nmero de marcos fsicos siempre llevara a un descenso del nmero de fallos de pgina o, en el peor de los casos, a mantenerlos. As, pues, antes del descubrimiento de la anomala de Belady, el algoritmo FIFO era aceptable. El siguiente es un ejemplo de la anomala de Belady. Utilizando tres marcos ocurren 9 fallos de pgina. Aumentando a cuatro marcos obtenemos 10 fallos de pgina. Las pginas tienen referencias en el orden: 0 1 2 3 0 1 4 0 1234

31

SO

IV

Administracin de memoria

4.8.2. Algoritmo de pilas [T] Un sistema de paginacin se puede caracterizar mediante 3 elementos: 1. La cadena de referencia del proceso en ejecucin. 2. El algoritmo de reemplazo de pgina. 3. El nmero de marcos para pgina disponibles en la memoria, m. Se tiene una matriz M que lleva un registro de del estado de la memoria. Tiene un nmero de elementos n, igual al nmero de pginas virtuales del proceso. La matriz M se divide en dos partes: 1. La parte superior, con m entradas, correspondiente a la cantidad de marcos en MP, contiene todas las pginas que se encuentran por el momento en la memoria. 2. La parte inferior, con n-m pginas, contiene todas las pginas con al menos una referencia, pero que no se encuentran por el momento en memoria Al comenzar la ejecucin, el proceso empieza a emitir las pginas en la cadena de referencias. En cada emisin, se verifica si la pgina se encuentra actualmente en memoria (en la parte superior de M). Si existe un espacio libre en la memoria, la pgina se carga y entra a la parte superior M. Si la memoria est completamente ocupada, se llama al algoritmo para el reemplazo de pginas, lo que ocurre es que una pgina pasa de la parte superior de M a la parte inferior y la pgina necesaria entra en la parte superior. El siguiente ejemplo utiliza el algoritmo LRU:

Para resumir las propiedades de este modelo, diremos que:

31

SO

IV

Administracin de memoria

1. En cada referencia a una pgina, sta siempre se desplaza al principio de la parte superior de M. 2. Si la pgina a la cual se hace referencia ya estaba en M, todas las dems pginas se desplazan una posicin hacia abajo. 3. Una transicin de la parte superior a la inferior corresponde a una pgina que se retira de la MP. Existe una clase de algoritmos con la propiedad: Lo que esta frmula dice es que el conjunto de pginas incluidas en la parte superior de M para una memoria con m marcos despus de r referencias a memoria tambin estn incluidas en M para una memoria con m+1 marcos para pgina. En otras palabras, si incrementamos el tamao de la memoria en la ejecucin ocurre que todas las pginas presentes en la primera ejecucin tambin estn presentes en la segunda, junto con una pgina adicional. Algunos algoritmos como el LRU tienen esta propiedad, pero FIFO no. Los algoritmos con esta propiedad se llaman algoritmos de pilas. Estos algoritmos, no padecen la anomala de Belady, por lo que son muy apreciados por los tericos de memorias virtuales.

4.8.3. La distancia de la cadena [T] Una referencia a una pgina se denota por medio de la distancia desde la parte superior de la pila donde se localiza la pgina de referencia. Por ejemplo, la referencia a la pgina 1 de la ltima columna de la figura anterior es una referencia a una pgina a distancia 3 de la parte superior de la pila (ya que la pgina 1 estaba en el tercer lugar antes de la referencia). Las pginas que no tienen referencia alguna por el momento y que por tanto no estn en la pila, es decir no estn en M, estn a distancia . La cadena de distancias para la figura aparece en la parte inferior de la misma. La distancia no slo depende de la cadena de referencias, sino tambin del algoritmo de paginacin.

En la figura (a), vemos la funcin de densidad de probabilidad para los datos de una distancia de la cadena ficticia d. La mayora de las entradas de la cadena estn entre 1 y k. Con la memoria de k marcos ocurren pocos fallos de pgina. En la figura (b), las referencias estn tan dispersas que la nica forma de evitar un gran nmero de fallos de pgina es darle al programa tantos marcos como pginas virtuales. 4.8.4. Prediccin de la tasa de fallos de pgina [T] Una de las propiedades de la distancia de la cadena es su utilidad para predecir el nmero de fallos de pgina que podran ocurrir con memorias de

31

SO

IV

Administracin de memoria

diversos tamaos. En base a la distancia de la cadena se puede predecir el nmero de fallos de pginas para el proceso en cuestin, con memorias de 1, 2, 3, , n marcos para pgina, donde n es el nmero de pginas virtuales en el espacio de direcciones del proceso. Sea Ci el nmero de ocurrencias de la distancia de la cadena. El vector C aparece en la figura (a). En este ejemplo, 4 veces ocurre que la distancia de la cadena es 1; 3 veces ocurre que la distancia de la cadena es 2, etc.. Sea C el nmero de veces que aparece en las distancias de la cadena. Calculemos ahora el vector F segn la frmula: El valor de Fm es el nmero de fallos de pgina que aparecen como una distancia de la cadena dada y m marcos para pgina.

Por ejemplo, F1=20, lo que indica que con una memoria de 1 marco para pgina, de las 24 referencias en la cadena, todas producen fallos de pginas excepto las 4 de la anterior referencia de pgina. Sea m el nmero de marcos para pgina en la parte superior de M. Ocurre un fallo de pgina siempre que un elemento de las distancias de la cadena sea m+1 o mayor. La suma de la frmula anterior aade el nmero de veces que ocurren tales elementos. 4.9. Aspectos de diseo

4.9.1. El modelo del conjunto de trabajo [T] El conjunto de pginas que utiliza en cierto momento un proceso se llama conjunto de trabajo. Si todo el conjunto de trabajo se encuentra dentro de la memoria, el proceso realiza su ejecucin sin provocar fallos, hasta que pasa a otra fase de la ejecucin (por ejemplo, el siguiente paso del compilador). Muchos sistemas de paginacin intentan llevar un registro del conjunto de trabajo de cada proceso y garantizar que est en la memoria antes de ejecutar dicho proceso. Este punto de vista es el modelo del conjunto de trabajo. Est diseado para reducir en gran medida la proporcin de fallos de pgina. La carga de las pginas antes de que los procesos se ejecuten se llama tambin prepaginacin. 4.9.2. Polticas de asignacin locales vs globales [T] Uno de los principales aspectos asociados con diseo de sistemas de paginacin es la asignacin de memoria entre los procesos ejecutables en competencia.

31

SO

IV

Administracin de memoria

En la figura (a), los procesos A, B y C conforman el conjunto de procesos ejecutables. Supongamos que A tiene un fallo de pgina, debe el algoritmo para el reemplazo de pgina reemplazar una pgina tomando en cuenta slo las seis pginas asignadas en ese momento a A? debe tomar en cuenta todas las pginas en memoria?

Si slo se fija en las pginas A, utilizando LRU, la pgina con menor referencia es A5, y se tiene la situacin de la figura (b). Si se busca la pgina ms pequea de toda la memoria, sin importar a qu proceso pertenezca, la situacin podra ser la de la figura (c). Se dice que el algoritmo de la figura (b) es el algoritmo local, mientras que el de la figura (c) es un algoritmo global para el reemplazo de pginas. Los algoritmos locales corresponden a la asignacin de una cantidad fija de memoria a cada proceso. Los algoritmos globales asignan en forma dinmica los marcos para pgina entre los procesos ejecutables. En general, los algoritmos globales funcionan mejor, en particular cuando el conjunto de trabajo puede variar durante el tiempo de vida del proceso. Si se utiliza un algoritmo local y el conjunto de trabajo crece, se obtiene hiperpaginacin o thrashing. Si el conjunto de trabajo se reduce, los algoritmos locales desperdician memoria. 4.9.3. Tamao de pgina [T] Sea s bytes el tamao promedio de proceso y p bytes el tamao de pgina, supongamos adems que cada dato de la pgina necesita e bytes. El nmero aproximado de pginas necesarias para cada proceso es entonces s/p, lo que ocupa s*e/p bytes de espacio en la tabla de pginas. La memoria desperdiciada por fragmentacin interna en la ltima pgina del proceso es p/2. As, el gasto total de exceso debido a la tabla de pginas y la fragmentacin interna es se/p + p/2 El tamao de la tabla de pginas es grande si el tamao de pgina es pequeo y la fragmentacin interna es grande si el tamao de pgina es grande. El ptimo debe estar en algn punto intermedio. Si obtenemos la primer derivada con respecto de p, obtendremos: -se/p2 + =0

31

SO

IV

Administracin de memoria

A partir de esta ecuacin podemos obtener una frmula para el tamao ptimo de pgina. El resultado es:

4.9.4. Aspectos de implantacin [T] 4.9.4.1. Respaldo de instrucciones Cuando un programa hace una referencia a una pgina que no se encuentra en la memoria, la instruccin que provoc el fallo se detiene y se realiza un sealamiento al SO. Despus de que el SO localiza la pgina necesaria, debe reiniciar la instruccin que provoc el sealamiento. Las instrucciones que utilizan el modo de autoincremento tambin pueden fallar. El incremento se puede dar antes de la referencia a memoria, en cuyo caso el SO debe decrementar el registro antes de volver a iniciar la instruccin. Si el autoincremento se hace despus de la referencia a memoria, el SO deja el registro tal como est. Ciertas mquinas cuentan con un registro en el que se copia el contador del programa justo antes de la ejecucin de cada instruccin. Y otro registro que indica los registros autoincrementados o autodecrementados, as como su valor. Con esta informacin, el SO puede anular todos los efectos de la instruccin que produjo el error, de forma que pueda iniciar todo de nuevo. 4.9.4.2. Cerradura de pginas en memoria Consideremos un proceso que acaba de hacer una llamada al sistema, para ller de cuerto archivo o dispositivo de E/S y esta informacin vaya a almacenarse en un buffer en el espacio de direcciones de usuario de la memoria principal. Mientras se espera a que la E/S concluya, el proceso en s queda suspendido y se permite la ejecucin de otro proceso. Este otro proceso tiene un fallo de pgina. Existe la posibilidad de que la pgina que contiene el buffer de E/S sea elegida para retirarla de la memoria. Si un dispositivo de E/S se encuentra en ese momento en una operacin de transferencia DMA hacia esa pgina, la eliminacin de aquella har que parte de los datos se pierdan y otra parte de los datos se escriba sobre la pgina recin cargada. Una solucin a este problema es cerrar las pginas relacionadas con E/S de forma que no puedan ser eliminadas. Otra solucin, es llevar a cabo todas las operaciones de E/S con buffers al ncleo y despus copiar los datos a las pginas del usuario. 4.9.4.3. Pginas compartidas En un sistema de tiempo compartido, es comn que varios usuarios ejecuten el mismo programa al mismo tiempo (por ejemplo, un editor, un compilador). Y esto es ms eficiente que tener dos o ms copias de la misma pgina. Un problema es que no todas las pginas se pueden compartir. Se pueden compartir las pginas que son de uso exclusivo para lectura, pero las pginas de datos, no. Son necesarias estructuras de datos especiales para llevar a cabo un registro de las pginas compartidas. 4.9.4.4. Almacenamiento de respaldo El algoritmo para la asignacin de espacio en disco utiliza un rea especial del disco con fines de intercambio. El rea de intercambio se administra

31

SO

IV

Administracin de memoria

como una lista de bloques libres. Al iniciar procesos, se les asignan bloques del rea de intercambio. Al finalizar, se libera ese especio en disco. A cada proceso se le asocia la direccin en disco de su rea de intercambio, la cual se conserva en la tabla de procesos. Hay que inicializar el rea de intercambio antes del inicio de un proceso. Una forma para llevar a cabo esto es copiar toda la imagen del proceso en el rea de intercambio, de forma que se pueda recuperar hacia la memoria en caso necesario. El problema es que los procesos pueden cambiar su tamao despus de su inicio. Lo comn es que el texto del programa permanezca fijo, pero el rea de datos y la pila pueden crecer. Sera mejor reservar reas de intercambio independientes para el texto del programa, los datos y la pila, adems de permitir que estas reas consten de ms de un bloque de disco. La alternativa es cargar todo el proceso en la memoria y retirarlo en caso necesario, no se asigna bloques de antemano y se seala el espacio en disco a cada pgina conforme se intercambie y libera el espacio cuando vuelva a intercambiarse. La desventaja es que se necesita una direccin del disco en la memoria, con el fin de llevar un registro de cada una de las pginas del disco. 4.9.4.5. Demonios de paginacin Muchos sistemas de paginacin utilizan un proceso secundario, llamado Demonio de paginacin, el cual duerme todo el tiempo, pero que despierta en forma peridica para inspeccionar el estado de la memoria. Si existen pocos marcos libres, el demonio de paginacin comienza a seleccionar las pginas por eliminar mediante algn algoritmo de reemplazo. Si estas pginas fueron modificadas desde que fueron cargadas, se escriben en el disco. El mantenimiento de una fuente de marcos libres produce un mejor rendimiento que el uso de toda la memoria para despus intentar encontrar un marco en el momento en que es necesario. Al menos, el demonio de paginacin garantiza que todos los marcos libres estn limpios, por lo que no requieren ser escritos con urgencia al disco. 4.9.4.6. Administracin de fallos de pgina Lo que ocurre en un fallo de pgina son los siguientes eventos: 1. El hw hace un sealamiento al ncleo y resguarda el contador de programa en la pila. En algunas mquinas, se resguarda cierta informacin acerca del estado de la instruccin activa en algunos registros especiales de la CPU. 2. Inicia la rutina en cdigo ensamblador con el fin de resguardar los registros generales y la dems informacin voltil y evitar que el SO los destruya. 3. El SO descubre la ocurrencia de un fallo de pgina e intenta determinar la pgina virtual requerida. Con frecuencia, uno de los registros del hw contiene esta informacin. Si no, el SO debe recuperar el contador de programa, buscar la instruccin y analizar en software para hacerse una idea de lo que realizaba al ocurrir el fallo. 4. Una vez determinada la direccin virtual que provoc el fallo, el SO verifica si la direccin es vlida y si la proteccin es consistente con el acceso. Si no, se enva una seal al proceso o se elimina. Si la direccin es vlida y no ocurri un fallo de proteccin, el SO intenta obtener un marco de la lista de marcos libres. Si no existen marcos libres, se ejecuta el algoritmo de reemplazo para seleccionar una vctima.

31

SO

IV

Administracin de memoria

5. Si la pgina seleccionada est sucia, el planificador transfiere la pgina al disco y ocurre un cambio de contexto; se suspende el proceso que provoc el fallo y se permite la ejecucin del otro, hasta que termina la transferencia al disco. En cualquier caso, el marco queda sealado como ocupado. 6. Tan pronto el marco est limpio, el SO examina la direccin en disco donde se encuentra la pgina necesaria y planifica una operacin en disco para recuperarla. Mientras se carga la pgina, el proceso que produjo el fallo contina suspendido y se ejecuta otro proceso de usuario. 7. Cuando el interruptor del disco indica la llegada de la pgina, las tablas de pgina se actualizan. 8. La instruccin que produjo el fallo regresa al estado donde inici y el contador de programa se modifica para que apunte a esa instruccin. 9. El proceso que provoc el fallo se planifica y el SO regresa a la rutina del lenguaje ensamblador. 10. Esta rutina restaura los registros y la dems informacin voltil; por ltimo, regresa al espacio del usuario para continuar la ejecucin, como si no hubiera ocurrido un fallo de pgina. 4.10. Segmentacin [SW] *Segmento: en la memoria virtual un bloque que tiene una direccin virtual. Los bloques de un programa pueden ser de longitud desigual y pueden ser incluso de longitud variable dinmicamente. *Segmentacin: divisin de un programa o aplicacin en segmentos como parte del esquema de memoria virtual. [T] Para muchos problemas, el hecho de tener dos o ms espacios independientes de direcciones virtuales es mucho mejor que tener uno solo. Por ejemplo, un compilado tiene muchas tablas, las cuales se integran al proceder la compilacin, entre stas estn las siguientes: 1. El texto fuente se resguarda para el listado impreso (en los sistemas de procesamiento por lotes). 2. La tabla de smbolos con los nombres y atributos de variables. 3. La tabla que contiene todas las constantes enteras y de punto flotante. 4. El rbol del lxico, con el anlisis sintctico del programa. 5. La pila que se utiliza para las llamadas a los procedimientos dentro del compilador. Cada una de las cuatro primeras tablas crece en forma continua mientras se lleca a cabo la compilacin. La ltima crece y decrece en forma impredecible durante la compilacin. En una memoria unidimensional, estas cinco tablas tendran asignados bloques adyacentes en el espacio de direcciones virtuales. Si un programa que se est compilando tiene un nmero excepcionalmente grande de variables, el bloque de espacio de direcciones asignado para la tabla de smbolos podra llenarse y aunque hubiera espacio en las dems tablas, la compilacin no podra continuar. Una solucin consiste en dotar a la mquina de varios espacios independientes de direcciones, llamados segmentos. Cada segmento tiene una serie direcciones, desde 0 hasta cierto mximo. La longitud de cada segmento puede variar de 0 hasta un mximo permitido. Los distintos segmentos pueden tener longitudes distintas. La longitud de un segmento

31

SO

IV

Administracin de memoria

puede variar durante la ejecucin. La longitud de un segmento de la pila puede crecer si algo entra en la pila y decrecer si algo sale de ella.

Puesto que cada segmento constituye un espacio independiente de direcciones, los distintos segmentos pueden crecer y reducirse en forma independiente, sin afectar a los dems. Para especificar una direccin en esta memoria segmentada o bidimensional, el programa debe proporcionar una direccin con dos partes, un nmero de segmento y una direccin dentro de ste. Un segmento es un objeto lgico, del cual tiene conciencia el programador, por lo que lo utiliza como tal. Un segmento puede contener un procedimiento, un arreglo, una pila, o bien un conjunto de variables escalares, pero por lo general no contiene una mezcla de varios. Ventajas de memoria segmentada: Hace ms sencilla la administracin de las estructuras de datos que crecen o se reducen. Si casa procedimiento ocupa un segmento independiente, con la direccin 0 como direccin inicial, el ligado independiente de los procedimientos compilados es mucho ms sencillo. Si el procedimiento del segmento n se modifica y vuelve a compilar ms tarde, no hay que cambiar los dems procedimientos. Facilita el uso de procedimientos o datos compartidos entre varios procesos. Los distintos segmentos pueden tener distintos tipos de proteccin (slo ejecucin, lectura-escritura). Puesto que cada segmento slo contiene un tipo de objeto, el segmento puede tener la proteccin adecuada para ese tipo particular. 4.10.1. Segmentacin pura [T] La implantacin de la segmentacin difiere del caso de la paginacin en un sentido esencial, las pginas tienen un tamao fijo y los segmentos no. [SW] Cada proceso tiene su propia tabla de segmentos, cuando todos los segmentos se encuentran en la memoria principal, la tabla de segmentos del proceso se crea y se carga en la memoria. Cada entrada de la tabla de segmentos contiene la direccin de comienzo del segmento correspondiente de la memoria principal (base), as como su longitud. Puesto que slo algunos de los segmentos del proceso estarn en memoria principal, se necesita un bit para indicar si el segmento correspondiente est presente en la memoria principal. Si el bit indica que el segmento est en memoria, la

31

SO

IV

Administracin de memoria

entrada incluye tambin la direccin de comienzo (base) y longitud del segmento. Otro bit de control necesario en la entrada de la tabla de segmentos es un bit de modificacin, que indica si el contenido del segmento correspondiente ha sido modificado desde que carg por ltima vez en memoria. Si no ha habido cambios, no ser necesario escribir en el disco el segmento cuando llegue el momento de reemplazarlo. Puede haber tambin otros bits de control, por ejemplo si se gestiona la proteccin o la comparticin en el nivel del segmento. El mecanismo bsico para leer una palabra de la memoria supone la traduccin de una direccin lgica, formada por un nmero de segmento y un desplazamiento, a una direccin fsica mediante una tabla de segmentos. Puesto que la tabla de segmentos tiene longitud variable, en funcin al tamao del proceso, no es posible suponer que quepa en los registros, debe estar en la memoria principal para que sea accesible. Cuando un proceso se est ejecutando, la direccin de comienzo de la tabla de segmentos de este proceso se guardar en un registro. El nmero de segmento de la direccin virtual se emplea como ndice de la tabla para buscar la direccin de la memoria principal correspondiente al comienzo del segmento. Esta se aade al desplazamiento de la direccin virtual para generar la direccin real.

4.10.2. Segmentacin con paginacin [SW] Tanto la paginacin como la segmentacin tienen sus ventajas. La paginacin es transparente al programador, elimina la fragmentacin externa y, de este modo, aprovecha la memoria principal de forma eficiente. Adems, puesto que los fragmentos que se cargan y descargan de la memoria principal son de tamao fijo e iguales, es posible construir algoritmos de gestin de memoria sofisticados que aprovechen mejor el comportamiento de los programas. La segmentacin, que es visible para el programador, tiene la ventaja de gestionar estructuras de datos que pueden crecer, la modularidad y el soporte de la comparticin y la proteccin. En un sistema con paginacin y segmentacin combinadas, el espacio de direcciones de un usuario se divide en varios segmentos segn el criterio

31

SO

IV

Administracin de memoria

del programador. Cada segmento se vuelve a dividir en varias pginas de tamao fijo, que tienen la misma longitud que un marco de memoria principal. Si el segmento tiene menor longitud que la pgina, el segmento ocupar slo una pgina. Desde el punto de vista del programador, una direccin lgica todava est formada por un nmero de segmento y un desplazamiento de segmento. Desde el punto de vista del sistema, el desplazamiento del segmento se ve como un nmero de pgina dentro del segmento y un desplazamiento dentro de la pgina. Asociada con cada proceso existe una tabla de segmentos y varias tablas de pginas, una por cada segmento. Cuando un proceso determinado est ejecutndose, un registro contendr la direccin de comienzo de la tabla de segmentos para ese proceso. Dada una direccin virtual, el procesador emplea la parte de nmero del segmento como ndice en la tabla de segmentos del proceso para encontrar la tabla de pginas de dicho segmento. Entonces, la parte del nmero de pgina de la direccin virtual se usar como ndice en la tabla de pginas para localizar el nmero de marco correspondiente. Este se combina con la parte de desplazamiento de la direccin virtual para generar la direccin real. La entrada de la tabla de segmentos contiene la longitud del segmento. Tambin contiene un campo base, que ahora se refiere a una tabla de pginas. Los bits de presencia y modificacin no son necesarios, puesto que estos elementos se gestionan en la pgina. Puede usarse otros bits de control para comparticin y proteccin. La entrada de la tabla de pginas es bsicamente la misma que se usa en un sistema de paginacin pura. Cada nmero de pgina se convierte en el nmero de marco correspondiente si la pgina est presente en memoria. El bit de modificacin indica si se necesita escribir la pgina en el disco cuando se asigna el marco a otra pgina.

31

También podría gustarte