Está en la página 1de 5

Gestión de la memoria

En un sistema operativo moderno, la gestión de la memoria corre a cargo de un subsitema básico


que se encarga de:

 Presentar a los procesos un espacio de memoria contiguo, aunque se estén utilizando


diferentes espacios (memoria principal y memoria secundaria)

 Optimizar la manera en la que se utiliza la memoria:

 Los datos e instrucciones con los que se trabaja deben estar en memoria principal

 Los datos e instrucciones con los que no se trabaja pueden estar descargados a
memoria secundaria

 Se debe evitar los fallos de página (necesitar algo que está en memoria secundaria, lo
que nos obliga a esperar a que se traiga hasta memoria principal)

 Se debe utilizar la memoria principal disponible para acelerar la entrada/salida (buffers y


caché)

Entre los problemas que debe solucionar la gestión de memoria se encuentran:

Reubicación:
Como la memoria disponible estará compartida por varios procesos, el programador no
puede conocer mientras programa qué área de memoria se asignará al proceso que está
programando. Cuando se ejecute el programa, el SO asignará un bloque de memoria libre,
que podrá ser diferente en cada ejecución.

Protección:
No resulta conveniente que un proceso pueda acceder (para leer y/o modificar) al espacio
de memoria asignado a otro proceso. El SO debe garantizar la protección de memoria, de
manera que se eviten accesos indebidos accidentales o intencionados.

Compartición:
En ocasiones algunos procesos necesitan intercambiar datos. Estos procesos pueden
querer compartir un área de memoria a la que ambos tengan acceso. El sistema de gestión
de memoria debe permitir en estos casos que los procesos autorizados accedan al bloque
de memoria que comparten, de manera similar a como el sistema de ficheros permite a
través de los permisos que varios usuarios compartan un fichero.

Organización lógica:
Normalmente en un sistema informático la memoria principal está organizada de forma
lineal como una secuencia de posiciones de memoria. Del mismo modo la memoria
secundaria se puede ver como una secuencia de bloques. Esta organización física no se
corresponde con la visión del programador que estructura su programa en diferentes
módulos. El sistema gestor de memoria debe permitir organizar lógicamente partes de la
memoria para acercarse a la visión del programador. La técnica que más fácilmente
sastisface esta necesidad es la segmentación.

Organización física:
Físicamente la memoria está organizada en dos espacios claramente diferenciados:
 Memoria principal rápida, volátil y escasa

 Memoria secundaria lenta, persistente y abundante


De manera que el SO debe gestionar el trasvase de información entre los dos espacios
descargando al programador de esta tarea.
Memoria virtual
Gracias a la memoria virtual, un sistema operativo moderno presenta al usuario un espacio de
memoria contiguo que puede ser mayor que la cantidad de memoria principal instalada. Esto se
consigue al utilizar dinámicamente memoria secundaria para guardar información que
aparentemente está en memoria principal (cuando se necesita dicha información hay que llevarla de
nuevo a memoria principal). Al espacio de memoria secundaria que guarda datos que aparentan
estar en memoria principal se le llama espacio de trasiego o intercambio, en el caso de GNU/Linux,
espacio swap.
El uso de memoria virtual:

 Permite que la cantidad de espacio dedicado a los procesos no esté limitado por la cantidad de
memoria principal instalada. Es posible tener cargados más procesos y es posible cargar
procesos más grandes.

 Reduce la velocidad de ejecución. Cuando se ejecutan procesos que corren en memoria


secundaria no se puede igualar la velocidad de proceso que se conseguiría si se utilizase
memoria principal.

 El SO debe gestionar la traducción de direcciones entre el espacio de memoria virtual y físico.


Para este fín el SO se apoya en hardware específico como la MMU (unidad de gestión de
memoria, normalmente integrada en la CPU).

Cercanía de referencias
Cuando se ejecuta un proceso, la práctica demuestra que no todas sus partes tienen el mismo peso.
En cualquier proceso hay bucles, las instrucciones que están en un bucle se pueden ejecutar
muchas más veces que el resto de instrucciones. Si el SO utiliza memoria virtual, puede mantener
en memoria principal, como conjunto residente, la información con la que se trabaja más a menudo.
En este caso puede que tener el resto de información del proceso en memoria secundaria no
represente una gran pérdida de rendimiento.

La cercanía de referencias es la característica por la cual, en la práctica, las referencias a la


información de un proceso está condicionada por restricciones locales. Normalmente, excepto en un
salto, tras una instrucción se opera con la siguiente. Del mismo modo, datos contiguos suelen tener
más probabilidad de ser accedidos en secuencia que datos dispersos. Así, el sistema gestor de
memoria del SO puede tener una idea aproximada de qué datos/instrucciones se van a necesitar a
continuación.

Segmentación
La segmentación es una técnica de gestión de memoria que divide dinámicamente la memoria en
diferentes segmentos.

Un segmento:

 Tiene un tamaño que se ajusta a lo que va a contener. Cada segmento puede tener un tamaño
diferente.

 Es un área contigua de memoria, tiene una dirección de inicio (base) y determinado tamaño
(número de posiciones de memoria que ocupa).
Cuando se utiliza segmentación:
 No existe la fragmentación interna, pero sí hay fragmentación externa. Pueden ser necesarias
operaciones de compactación.

 El segmento se adapta a la visión del programador. Un módulo se corresponde con un


segmento.

 Es fácil compartir datos entre procesos. A cada segmento se le puede asignar unos permisos
diferentes, de manera similar a como se realiza la compartición de información en el sistema
de ficheros.

Paginación
La paginación es una técnica de gestión de memoria en la que se divide toda la memoria principal
en marcos de página. Todos los marcos de página tienen el mismo tamaño (típicamente 4K). Los
datos con los que se trabaja están agrupados en páginas, cuando se necesita una página se puede
cargar en cualquier marco de página que esté disponible.

Cuando se utiliza paginación:

 No existe fragmentación externa, pero sí hay una pequeña cantidad de fragmentación interna.

 Las estructuras de control del SO pueden incluir:

 Por cada proceso una tabla de páginas, con una entrada para cada página
correspondiente al proceso.

 Descriptor de bloques de disco, para cada página hay una entrada que indica dónde está
almacenada.

 Tabla de marcos de página, describe el estado de cada marco en memoria principal.

Gestión combinada: Segmentación + Paginación


En algunos SO se utiliza una gestión combinada con segmentación y paginación. Se utiliza la
segmentación para definir áreas de memoria para los procesos (segmento de código, datos y pila).
Dentro de los segmentos se utiliza paginación. De esta manera se consiguen reunir las ventajas de
ambas técnicas.

Traducción de direcciones
Cuando se utiliza memoria virtual, los procesos utilizan referencias lógicas a otras posiciones de
memoria. Sin embargo el SO, para acabar accediendo a los datos correctos, debe traducir las
direcciones lógicas en direcciones físicas. La manera en la que se realiza esta traducción depende
del esquema de gestión que se utilice. Normalmente el procesador cuenta con hardware específico
(la unidad de gestión de memoria, MMU) para realizar este proceso.

Dirección lógica:
Una dirección de memoria virtual. Identifica un dato en el espacio de memoria virtual, pero
dice muy poco sobre dónde se encuentra realmente este dato.
Dirección física:
Una dirección que identifica una posición de memoria principal.

Traducción de direcciones con paginación

Una dirección lógica estará compuesta por el número de página y desplazamiento. Para obtener la
dirección física, se buscará en la tabla de páginas del proceso la entrada que corresponda a la
página buscada, y allí se obtendrá la dirección de memoria física en la que se encuentra cargada la
página. Con el desplazamiento se puede acceder a un dato concreto en el interior de la página.

Suponiendo que un sistema informático utiliza direcciones lógicas de 16 bits, de los que se dedican
6 bits al identificador de página y 10 al desplazamiento:
1. Qué máximo número de páginas puede ocupar un proceso (suponiendo que el SO mantiene
una tabla de páginas independiente por cada proceso) ?

2. Cuantas posiciones de memoria forman una página ?

3. Cuantas posiciones de memoria puede ocupar un proceso ?

4. Qué cantidad máxima de memoria virtual puede ocupar un proceso ?

Traducción de direcciones con segmentación


Cuando se utiliza segmentación, la traducción de direcciones es similar al caso de la paginación,
pero como los segmentos tienen una longitud variable en la tabla de segmentos del proceso no sólo
se guarda la dirección base del segmento, sinó también su longitud.

También podría gustarte