You are on page 1of 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
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
cpu

cache

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.
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ímite
Un 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 SO SO SO

P5 P5 P5 P10 intenta P5
entrar
P8 sale P9 entra P9 P9

P8

P2 P2 P2 P2
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 SO SO SO

P5 P5 P5 P5
P8 sale P9 entra P9 P10 entra P9

P8 P10

P2 P2 P2 P2
Particionamiento variable
Fragmentación
La 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ón

El espacio lógico de los
procesos 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áginas

Cada 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
K
J L
I A

H B
G C
F D
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.
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áximo
Los 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

You might also like