Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sistema Operativo
Sistema Operativo
Administracin de Memoria
La Administracin de memoria se refiere a los distintos mtodos y operaciones que se encargan de obtener la mxima utilidad de la memoria, organizando los procesos y programas que se ejecutan de manera tal que se aproveche de la mejor manera posible el espacio disponible. Para poder lograrlo, la operacin principal que realiza es la de trasladar la informacin que deber ser ejecutada por el procesador, a la memoria principal. Actualmente esta administracin se conoce como Memoria Virtual ya que no es la memoria fsica del procesador sino una memoria virtual que la representa. Entre algunas ventajas, esta memoria permite que el sistema cuente con una memoria ms extensa teniendo la misma memoria real, con lo que esta se puede utilizar de manera ms eficiente. Y por supuesto, que los programas que son utilizados no ocupen lugar innecesario.
Administracin Bsica
Los sistemas de administracin de memoria se pueden dividir en dos clases, los que trasladan procesos entre la memoria y el disco durante la ejecucin (intercambio y paginacin) y los que no lo hacen.
1 .1
La multiprogramacin facilita la programacin de una aplicacin al dividirla en dos o ms procesos. La mayora de los procesos tardan cierto tiempo en la espera de datos de dispositivos E/S. Un modelo para el uso y aprovechamiento de la CPU es el modelo probabilstico dado por la frmula: Uso de la CPU = 1 - pn
1.2
El objetivo en todo esto es tener mas de un proceso en memoria a la vez, solucin posible sera dividir la memoria en n partes al inicio de una sesin de uso de la mquina, pero an as se obtiene el desperdicio de particiones grandes con una tarea pequea, la respuesta puede ser tener particiones pequeas tambin. Las tareas que van llegando se forman hasta que una particin adecuada est disponible, en cuyo momento la tarea se carga en esa particin y se ejecuta hasta terminar.
1 .3
El objetivo en todo esto es tener mas de un proceso en memoria a la vez, solucin posible sera dividir la memoria en n partes al inicio de una sesin de uso de la mquina, pero an as se obtiene el desperdicio de particiones grandes con una tarea pequea, la respuesta puede ser tener particiones pequeas tambin. Las tareas que van llegando se forman hasta que una particin adecuada est disponible, en cuyo momento la tarea se carga en esa particin y se ejecuta hasta terminar.
Intercambio
El objetivo del intercambio es dar cabida a la ejecucin de mas aplicaciones de las que pueden residir simultneamente en la memoria del sistema: Consiste en trasladar el cdigo y los datos de un proceso completo de memoria al sistema de almacenamiento secundario , para cargar otro previamente almacenado, no permite a un proceso utilizar ms memoria RAM de la que realmente existe en el sistema. Esta tcnica puede ser ineficiente ya que se tiene que hacer el intercambio completo del proceso, aunque ste solo vaya a ejecutar una pequea porcin del cdigo. Durante el intercambio un proceso puede ser sacado temporalmente de memoria y llevado a un lugar especial del disco y posteriormente vuelto a memoria y continuada su ejecucin... El lugar de almacenamiento temporal suele ser un espacio suficientemente grande como para acomodar copias de las imgenes de memoria de todos los usuarios.
Sistema operativo residente, normalmente en la parte baja de memoria con los vectores de interrupcin. Procesos de usuario en la parte alta.
Primer ajuste: Consiste en asignar el primer hueco con capacidad suficiente. La bsqueda puede iniciar ya sea al inicio o al final del conjunto de huecos o en donde termin la ltima bsqueda. La bsqueda termina al encontrar un hueco lo suficientemente grande. Mejor ajuste: Busca asignar el espacio ms pequeo de los espacios con capacidad suficiente. La bsqueda se debe de realizar en toda la tabla, a menos que la tabla est ordenada por tamao. Esta estrategia produce el menor desperdicio de memoria posible. Peor ajuste: Asigna el hueco ms grande. Una vez ms, se debe de buscar en toda la tabla de huecos a menos que est organizada por tamao. Esta estrategia produce los huecos de sobra ms grandes, los cuales pudieran ser de ms uso si llegan procesos de tamao mediano que quepan en ellos.
Se ha demostrado mediante simulacros que tanto el primer y el mejor ajuste son mejores que el peor ajuste en cuanto a minimizar tanto el tiempo del almacenamiento. Ni el primer o el mejor ajuste es claramente el mejor en trminos de uso de espacio, pero por lo general el primer ajuste es ms rpido.
Memoria virtual
La memoria virtual es una tcnica de administracin de la memoria real que permite al sistema operativo brindarle al software de usuario y a s mismo un espacio de direcciones mayor que la memoria real o fsica. La mayora de los ordenadores tienen cuatro tipos de memoria: registros en la CPU, la memoria cach (tanto dentro como fuera del CPU), la memoria fsica (generalmente en forma de RAM, donde la CPU puede escribir y leer directa y razonablemente rpido) y el disco duro que es mucho ms lento, pero tambin ms grande y barato.
Muchas aplicaciones requieren el acceso a ms informacin (cdigo y datos) que la que se puede mantener en memoria fsica. Esto es as sobre todo cuando el sistema operativo permite mltiples procesos y aplicaciones ejecutndose simultneamente. Una solucin al problema de necesitar mayor cantidad de memoria de la que se posee consiste en que las aplicaciones mantengan parte de su informacin en disco, movindola a la memoria principal cuando sea necesario. Hay varias formas de hacer esto. Una opcin es que la aplicacin misma sea responsable de decidir qu informacin ser guardada en cada sitio (segmentacin), y de traerla y llevarla. La desventaja de esto, adems de la dificultad en el diseo e implementacin del programa, es que es muy probable que los intereses sobre la memoria de dos o varios programas generen conflictos entre s: cada programador podra realizar su diseo teniendo en cuenta que es el nico programa ejecutndose en el sistema. La alternativa es usar memoria virtual, donde la combinacin entre hardware especial y el sistema operativo hace uso de la memoria principal y la secundaria para hacer parecer que el ordenador tiene mucha ms memoria principal (RAM) que la que realmente posee. Este mtodo es invisible a los procesos. La cantidad de memoria mxima que se puede hacer ver que hay tiene que ver con las caractersticas del procesador. Por ejemplo, en un sistema de 32 bits, el mximo es 232, lo que da 4096 Megabytes (4 Gigabytes). Todo esto hace el trabajo del programador de aplicaciones mucho ms fcil, al poder ignorar completamente la necesidad de mover datos entre los distintos espacios de memoria.
Paginacin
El espacio de direcciones de cada proceso se divide en bloques de tamao uniforme llamados pginas, los cuales se pueden colocar dentro de cualquier para pgina marco disponible en memoria. Cuando las tablas de pginas son muy grandes se puede utilizar un esquema de paginacin de varios niveles para que las pginas se paginen a s mismas. Existen distintos niveles de paginacin y a su vez distintos modelos de computadoras han trabajado con ellas. Paginacin de nivel 1: PDP-11 Paginacin de 2 niveles: la VAX Paginacin de 3 niveles: la SPARC Paginacin de 4 niveles: la 68030
La mayor parte de los sistemas de memoria virtual emplean una tcnica llamada paginacin. En cualquier computadora, existe un conjunto de direcciones de memoria que los Programas pueden producir. Cuando un programa ejecuta una instruccin como: MOVE REG,1000 Lo hace para copiar el contenido de la direccin de memoria 1000 en REG (o viceversa, dependiendo de la computadora). Las direcciones pueden generarse empleando indexacin, registros base, registros de segmento y otros mtodos o tcnicas. Estas direcciones generadas por programas se denominan direcciones virtuales y constituyen el espacio de direcciones virtual. En las computadoras sin memoria virtual, la direccin virtual se coloca directamente en el bus de memoria y hace que se lea o escriba la palabra de memoria fsica que tiene la misma direccin. Cuando se usa memoria virtual, las direcciones virtuales no pasan directamente al bus de memoria; en vez de ello, se envan a una unidad de administracin de memoria (MMU), un chip o coleccin de chips que transforma las direcciones virtuales en direcciones de memoria fsica como se ilustra en la En la figura anterior se muestra la MMU formando parte del chip del CPU porque es lo ms comn en la actualidad. Sin embargo, lgicamente podra ser un chip aparte y en el pasado lo era. El espacio de direcciones virtual se divide en unidades llamadas pginas. Las unidades correspondientes en la memoria fsica se denominan marcos de pgina. Las pginas y los marcos de pgina siempre tienen exactamente el mismo tamao.
Al momento del fallo de pgina el S.O. no tiene forma de saber a qu pgina se hace referencia.
Tasa de falla muy baja: Implica demasiados marcos de pgina asignados. PFF intenta mantener tasa de falla entre lmites aceptables. Desalojamiento de procesos de memoria en caso de muchos procesos con altas tasas de falla.
Segmentacin
La memoria virtual de la que hemos hablado hasta ahora es unidimensional porque las direcciones virtuales van desde O hasta alguna direccin mxima, una direccin tras otra. Para muchos problemas, tener dos o ms espacios de direcciones virtuales independientes puede ser mucho mejor que tener slo uno. Por ejemplo, un compilador tiene muchas tablas que se construyen conforme procede la compilacin, y que pueden incluir: 1. 2. 3. 4. El texto fuente que se est guardando para el listado impreso (en sistemas por lotes). La tabla de smbolos, que contiene los nombres y los atributos de las variables. La tabla que contiene todas las constantes enteras y de punto flotante empleadas. El rbol de anlisis sintctico, que condene el rbol de anlisis sintctico del programa. 5. La pila empleada para llamadas a procedimientos dentro del compilador. Las primeras cuatro tablas crecen continuamente conforme avanza la compilacin. La ltima crece y se encoge de forma impredecible durante la compilacin. En una memoria unidimensional, habra que asignar a estas cinco tablas trozos contiguos del espacio de direcciones virtual, ver Figura.
Figura. En un espacio de direcciones unidimensional con tablas crecientes, una tabla podra chocar contra otra. Consideremos lo que sucede si un programa tiene un nmero excepcionalmente grande de variables. El trozo del espacio de direcciones asignado a la tabla de smbolos podra llenarse, pero podra haber espacio de sobra para otras tablas. Desde luego, el compilador podra limitarse a exhibir un mensaje diciendo que la compilacin no puede continuar debido a un exceso de variables, pero esto no parece justo si hay espacio desocupado en las otras tablas.
Otra posibilidad es hacerla de Robin Hood, tomando espacio de las tablas que tienen mucho espacio y dndolo a las que tienen poco. Es posible efectuar estos movimientos, pero sera anlogo a administrar las propias superposiciones: una molestia en el mejor de los casos y una gran cantidad de trabajo tedioso. Lo que realmente se necesita es una forma de liberar al programador de la tarea de administrar las tablas en expansin y contraccin, del mismo modo como la memoria virtual elimina la preocupacin de tener que organizar el programa en superposiciones. Una solucin directa y en extremo general consiste en proveer a la mquina con muchos espacios de direcciones completamente independientes, llamados segmentos. Cada segmento consiste en una secuencia lineal de direcciones, desde O hasta algn mximo. La longitud de cada segmento puede ser cualquiera desde O hasta el mximo permitido. Los diferentes segmentos pueden, y suelen, tener diferentes longitudes. Es ms, la longitud de los segmentos puede cambiar durante la ejecucin. La longitud de un segmento de pila puede aumentarse cada vez que algo se empila y reducirse cada vez que algo se desempila. Puesto que cada segmento constituye un espacio de direcciones aparte, los distintos segmentos pueden crecer o encogerse de forma independiente, sin afectarse entre s. Si una pila de cierto segmento necesita ms espacio de direcciones para crecer, se le puede conceder, porque no hay nada ms en su espacio de direcciones con lo que pueda chocar. Desde luego, podra llenarse un segmento, pero los segmentos suelen ser muy grandes, as que esta ocurrencia es poco comn. Para especificar una direccin en esta memoria segmentada o bidimensional, el programa debe proporcionar una direccin de dos partes: un nmero de segmento y una direccin dentro de ese segmento. En la Figura 13 se ilustra una memoria segmentada empleada para las tablas de compilador.
Figura . Una memoria segmentada permite a cada tabla crecer o encogerse con independencia de las dems tablas. Cabe mencionar que un segmento es una entidad lgica, de la cual el programador est consciente y que utiliza como entidad lgica. Un segmento podra contener un procedimiento, un arreglo, una pila o una coleccin de variables escalares, pero por lo regular no contiene una mezcla diferentes cosas.