administración de memoria por el sistema operativo

43
Gestión de memoria - RAM - Registros de memoria - Ejecutables - Asignación continua y dinámica - Fragmentación - Compactación - Overlays - Fragmentación - Paginación - TLB - Algoritmos - Swapping - Segmentación

Upload: darioleonz

Post on 04-Jul-2015

3.307 views

Category:

Documents


3 download

DESCRIPTION

Explicamos desde la RAM hasta los distintos métodos para manejar memoria

TRANSCRIPT

Gestión de memoria- RAM- Registros de memoria- Ejecutables- Asignación continua y dinámica- Fragmentación- Compactación- Overlays- Fragmentación- Paginación- TLB- Algoritmos- Swapping- Segmentación

Gestión de memoria principal, Que es la memoria

Cuando hablamos de memoria principal de un ordenador hablamos de la memoria RAM, memoria de acceso aleatorio (Random Acess Memory), La RAM es un medio físico que almacena temporalmente toda la lógica del ordenador: el sistema operativo, los programas que estamos ejecutando y otros datos para su funcionamiento.

Mas sobre la memoria RAM

RAM es donde el ordenador guarda los datos que está utilizando en el momento actual.Se llama de acceso aleatorio porque el procesador accede a la información que está en la memoria en cualquier punto sin tener que acceder a la información anterior y posterior.Es la memoria que se actualiza constantemente mientras el ordenador está en uso y que pierde sus datos cuando el ordenador se apaga.

¿Por qué memoria RAM?

La memoria es utilizada en vez del medio de almacenamiento tradicional como el disco duro porque la velocidad de los discos duros es muy lento en comparación con la memoria RAM, mover datos entre la memoria RAM y los registros de la CPU es una de las operaciones que debe desempeñar una CPU que consumen más tiempo, simplemente porque la memoria RAM es mucho más lenta que la CPU.

Cache (introducción)

Una solución parcial a este problema es incluir una Memoria caché en la CPU. La memoria caché es similar a la memoria RAM, excepto que es muy rápida comparada con la memoria normal, y se usa en forma diferente. Problema de esto es el precio de implementar esta solución.

Jerarquía de memoria

Ocurre que el cache es mucho mas rápido que la memoria principal pero es mucho mas caro, existen distintos niveles de cache dados incluso por su cercanía al procesador.Ejemplo: L1 es cache nivel 1 porque esta en el CPU, un L2 puede estar o en el CPU o cercano a el y L3 estar ligada a la memoria RAM.

cpu

cache

Memoria

Memoria

Algunos conceptos:Dirección base: Dirección que sirve de base a otras direcciones.Dirección relativa: Dirección usada para hacer referencia a otra dirección a partir de la dirección base.Dirección absoluta: Identifica una dirección única de memoria.

Registros base y límiteUn par de registros base y límite definen el espacio de direcciones lógicas

Unidad de gestión de memoria (MMU)

La MMU (Memory-Management Unit) es un dispositivo hardware que transforma las direcciones virtuales en físicas.

Con la MMU el valor del registro de re-ubicación (registro base) es añadido a cada dirección generada por un proceso de usuario en el momento en que es enviada a la memoria.

El programa de usuario trabaja con direcciones lógicas; nunca ve las direcciones físicas reales.

Reubicación dinámica mediante registro

Administrador de memoria

Su labor consiste en llevar un registro de las partes de memoria que se están utilizando y aquellas que no, con el fin de asignar espacio en memoria a los procesos cuando éstos la necesiten y liberándola cuando terminen, así como administrar el intercambio entre la memoria principal y el disco en los casos en los que la memoria principal no le pueda dar capacidad a todos los procesos que tienen necesidad de ella.

Como funciona un ejecutable

Los ejecutables son archivos que tienen una extensión (exe o elf) estos tienen direcciones relativas en memoria.Pueden ser creados por compilación o por ensamblado.Compilación: Es el proceso por el cual se traduce una conjunto de instrucciones llamado código fuente a código objeto, generalmente se refiere compilado para hacer referencia al proceso de enlazado que transforma el código objeto en un ejecutable.El termino ensamblado refiere a proceso de compilación sin enlazado de un código fuente escrito en assembler, para el proceso de ensamblado es necesario hacer el proceso de enlazado aparte.

Vinculo de direcciones (address binding)

Los ejecutables funcionan con direcciones relativas, el vinculo de direcciones permite el relacionar las direcciones relativas a direcciones absolutas en RAM.Tiempo de vinculación de direcciones:- Durante la compilación o el ensamblado: Pero en este punto a veces no sabemos donde va a estar cargado el programa.-- Durante el tiempo de carga del programa: Para que el programa sea cargado se debe de conocer donde este debería ser cargado, por lo menos las direcciones iniciales.-- Durante la ejecución: Puede darse el caso en que sea necesario mover el programa de una dirección a otra.

Asignación de memoria de forma contigua

Monousuario:La cantidad de programas depende de la cantidad de memoria RAM que exista para el equipo.Se divide en dos partes: una para el programa que se esta usando y otra para el sistema operativo.

Asignación de memoria de forma contigua

La zona para procesos de usuarios se encuentra dividida a su vez en varias particiones que se asignarán a los procesos

− Particionamiento estático: Las particiones se establecen en el momento de arranque del SO y permanecen fijas durante todo el tiempo

− Particionamiento dinámico: Las particiones cambian de acuerdo a los requisitos de los procesos

Asignación estática de memoria particionada

Asignación estática con múltiples particiones:− Hueco o espacio: Bloque de memoria disponible; hay

espacios de diversos tamaños repartidos por toda la memoria.

− Cuando llega un proceso se le asigna un espacio lo suficientemente grande para que el proceso pueda ser alojado.

− El SO mantiene información sobre:a) Particiones asignadas. b) Particiones libres (huecos).

SO

P5

P8

P2

SO

P5

P2

SO

P5

P2

P9P8 sale P9 entra

P10 intenta entrar

SO

P5

P2

P9

Asignación estática de memoria particionada

Primer ajuste (First-fit): Se asigna el primer espacio lo suficientemente grande.

Mejor ajuste (Best-fit): Se asigna el espacio más pequeño que sea lo suficientemente grande; hay que buscar en la lista entera de espacios (salvo si está ordenada por tamaño).

− Desperdicia el menor espacio posible.

Protección de direcciones con registros base y límite

Asignación dinámica de memoria particionada

Ahora el tamaño y ubicación de las particiones no es fijo, sino que cambia a lo largo del tiempo.

Cuando llega un proceso se le asigna memoria de un espacio lo suficientemente grande para que quepa.

− Con el espacio sobrante se crea una nueva partición libre. En este tipo de asignación las consideraciones de protección son

las mismas que en la asignación estática. La compartición se puede conseguir mediante solapamiento de

particiones.SO

P5

P8

P2

SO

P5

P2

SO

P5

P2

P9P8 sale P9 entra P10 entra

SO

P5

P9

P2

P10

Particionamiento variable

FragmentaciónLa fragmentación es el proceso que se debe ejecutar sobre la memoria que queda desperdiciada, al usar los métodos de gestión de memoria que se vieron en las laminas anteriores. Tanto el primer ajuste, como el mejor y el peor producen fragmentación externa.

La fragmentación es generada cuando durante el reemplazo de procesos quedan espacios entre dos o más procesos de manera no contigua y cada espacio no es capaz de soportar ningún proceso de la lista de espera. Tal vez en conjunto si sea espacio suficiente, pero se requeriría de un proceso de defragmentación de memoria o compactación para lograrlo. Esta fragmentación se denomina fragmentación externa.

Existe otro tipo de fragmentación conocida como fragmentación interna, la cual es generada cuando se reserva más memoria de la que el proceso va realmente a usar. Sin embargo a diferencia de la externa, estos espacios no se pueden compactar para ser utilizados. Se debe de esperar a la finalización del proceso para que se libere el bloque completo de la memoria.

Compactación

Compactación (cont)

La compactación de memoria consiste en fusionar espacios de memoria para crear uno mas grande, dependiendo del tamaño del proceso que este realizando un petición de memoria se otorga una dirección, si el proceso es pequeño se divide el espacio en dos quedando un espacio identificado como un espacio que si es contiguo se une con algún otro para esperar la asignación de memoria a algún otro proceso.

Overlays

Una vez que surgió la multiprogramación, los usuarios comenzaron a explorar la forma de ejecutar grandes cantidades de código en áreas de memoria muy pequeñas, auxiliados por algunas llamadas al sistema operativo. Es así como nacen los overlays.

Overlays

Esta técnica consiste en que el programador divide lógicamente un programa muy grande en secciones que puedan almacenarse el las particiones de RAM. Al final de cada sección del programa (o en otros lugares necesarios ) el programador insertaba una o varias llamadas al sistema con el fin de descargar la sección presente de RAM y cargar otra, que en ese momento residía en disco duro u otro medio de almacenamiento secundario.

Desventajas del overlay

Esta solución requería que el programador tuviera un conocimiento muy profundo del equipo de cómputo y de las llamadas al sistema operativo. Otra desventaja era la potabilidad.

Paginación

La Fragmentación externa creaba desperdicios de espacios, además de llamadas a subrutinas adicionales, por tanto una posible solución para la fragmentación externa es permitir que espacio de direcciones lógicas lleve a cabo un proceso en direcciones no contiguas, así permitiendo al proceso ubicarse en cualquier espacio de memoria física que esté disponible, aunque esté dividida. Una forma de implementar esta solución es a través del uso de un esquema de paginación. La paginación evita el considerable problema de ajustar los pedazos de memoria de tamaños variables que han sufrido los esquemas de manejo de memoria anteriores. Dado a sus ventajas sobre los métodos previos, la paginación, en sus diversas formas, es usada en muchos sistemas operativos.

PaginaciónEl espacio lógico de losprocesos se divide en páginas de tamaño fijo.La memoria se divide en marcos, del mismo tamaño que las páginas.Las páginas se asignan a marcos, posiblemente de manera no contigua.

Paginación, tabla de páginas

Paginación, tabla de páginasCada página tiene un número que se utiliza como índice en la tabla. Si el bit presente / ausente es 0, se provoca un señalamiento (trap) hacia el sistema operativo (referencia que el campo esta en disco). Si el bit es 1, el número de marco que aparece en la tabla de páginas se copia en los bits de mayor orden del registro de salida, junto con el ajuste (offset) de 12 bits. La finalidad de la tabla de páginas es asociar las páginas virtuales con los marcos. En términos matemáticos, la tabla de páginas es una función, cuyo argumento es el número de página virtual y como resultado el número del marco físico. Mediante el resultado de esta función, se puede reemplazar el campo de la página virtual de una dirección virtual por un campo de marco, lo que produce una dirección en la memoria física.

La estructura en las tablas de páginas

Número de marco de la página (Page frame number) : Dirección en físico.Presente/Ausente (Present/absent ): Para saber a quien lo redirecciona.Protección (Protection): 0 para escritura y lectura, 1 para lectura solamente. Modificado (Modified): Si es escrita la memoria el bit es colocado como escrito (sucio), es útil cuando el hardware quiere reclamar por un marco. Referenciado (Referenced): Sirve para verificar que le ha pasado a una marco de la pagina, esto ayuda a evitar un fallo de página. Cache des-habilitado (Caching diasable): Permite al hardware modificarlo o no según su uso.

Paginación a dos niveles

A menudo, los procesos no utilizan todas las páginas del espacio lógico.Las páginas no utilizadas se pueden condensar en entradas de la TPE con V=0. Ejemplo ► Memoria de 4GB y páginas de 4KB► 4 bytes por entrada en TPE y TPI► 10 bits para p1 y 10 para p2► Procesos de 12 MB

Buffer de traducción adelantada (TLB)

Cada referencia a la memoria virtual puede generar dos accesos a la memoria:• Uno para obtener la entrada de la tabla de páginas correspondiente.Otro para obtener el dato deseado.Los esquemas de memoria virtual hacen uso de un cache especial para las entradas de la tabla de páginas:Buffer de Traducción Adelantada (TLB,Translation Lookaside Buffer).Contiene aquellas entradas de la tabla de páginas usadas hace menos tiempo.Funciona del mismo modo que una memoria cache con correspondencia asociativa.

Algoritmos de remplazo de páginas

Política de ubicación:– Qué página se va a reemplazar.– Tiene que ser la que tenga una menor posibilidad de ser referenciada en un futuro cercano.– La mayoría de las políticas intentan predecir el comportamiento futuro en función del comportamiento pasado.Bloqueo de marcos:– Cuando un marco está bloqueado, la página cargada en ese marco no puede ser reemplazada.– La mayoría del núcleo del sistema operativo está en marcos bloqueados.– Estructuras de control.– Buffers de E/S.– El bloqueo se consigue asociando un bit de bloqueo a cada marco.

Algoritmos de remplazo de páginas

Política óptima:– Selecciona para reemplazar la página que tiene que esperar una mayor cantidad de tiempo hasta que se produzca la referencia siguiente.– Es imposible de implementar porque requiere que el sistema operativo tenga un conocimiento exacto de los sucesos futuros.Política de la usada menos recientemente (LRU):– Reemplaza la página de memoria que no ha sido referenciada desde hace más tiempo.– Debido al principio de cercanía, ésta sería la página con menor probabilidad de ser referenciada en un futuro cercano.– Una solución sería etiquetar cada página con el momento de su última referencia.

Algoritmo de remplazo de páginas

Política de primera en entrar primera en salir(FIFO):– Trata los marcos asignados a un proceso como un buffer circular.– Es una de las políticas de reemplazo más sencillas de implementar.– Se reemplaza la página que ha estado más tiempo en la memoria.– Estas páginas pueden necesitarse de nuevo y en un plazo de tiempo corto.Algoritmo aleatorio

Este algoritmo consiste simplemente en reemplazar aleatoriamente cualquier página de la memoria principal, sin hacer ningún esfuerzo de predicción.Es el algoritmo más sencillo dado que no requiere tener ninguna información, sin embargo, por no hacer uso de dicha información sobre el comportamiento del proceso, no puede lograr un buen desempeño.

Algortimo del reloj

Cuando se presenta un fallo de página, el algoritmo revisa la página a la que está apuntando la manecilla. Si el bit de referencia es 0, la página es reemplazada con la nueva y la manecilla avanza una posición. Si el bit es 1, entonces se limpia (cambia a 0) y la manecilla avanza a la siguiente página y así sucesivamente hasta encontrar una con bit 0.

K

BH

IJ L

A

C

D

G

F

Memoria virtual

La memoria virtual se llama así porque el programador o administrador ve una cantidad de memoria mucho mayor que la real, y en realidad se trata de la suma de la memoria de almacenamiento primario y una cantidad determinada de almacenamiento secundario. El sistema operativo, en su módulo de manejo de memoria, se encarga de intercambiar programas enteros, segmentos o páginas entre la memoria real y el medio de almacenamiento secundario.Esta tecnología apareció en 1960 en la universidad de Manchester (Inglaterra), en el sistema Atlas.

Swapping

Vista Esquemática del Intercambio

Swapping

Como podemos ver en la figura anterior, el swapping ocurre cuando procesos deben ser pasados a memoria virtual por la necesidad de ejecutar nuevos procesos.Para que el swapping sea exitoso deberíamos tener la posibilidad de un particionamiento variable, lo cual permitiría que los procesos puedan tener distintos tamaños en memoria dependiendo del tipo de aplicativo que se este usando, pero esto puede traer el problema de compactar memoria que puede llevar pequeños tiempos de ejecución sobre el equipo.

Segmentación

Son espacios independientes de direcciones.Cada segmento tiene una serie lineal de direcciones desde 0 hasta un tamaño máximoLos segmentos tienen longitudes distintas y pueden variar según la ejecución.Facilita el uso de procedimientos o datos compartidos entre varios procesos, ejemplo (shared DLL´s).En paginación esto es mas difícil de implementar o se simula.

Segmentación (cont)

La mayor diferencia es su tamaño variable.Después de varias ejecuciones la memoria quedara divida en bloques y en espacios para solucionar esto se utiliza compactación o fragmentación externa.El SO mantiene una tabla de segmentos para cada proceso.Cada entrada contiene:La dirección física inicial de este segmento.La longitud del segmento por protección