Administración Memoria Virtual en Linux y IOS

Descargar como odt, pdf o txt
Descargar como odt, pdf o txt
Está en la página 1de 10

Administración memoria virtual en Linux y iOS

De la memoria virtual de Linux

En lo que respecta a memoria virtual, hace uso de una estructura de tabla de páginas
con tres niveles, formada por los siguientes tipos de tablas (cada tabla individual es del
tamaño de una página):  (Gestión de memoria en Linux, mayo 14, 2018)

Directorio de páginas: un proceso activo tiene un solo directorio de páginas que es del
tamaño de una página. Cada entrada en el directorio de páginas apunta a una página
del directorio intermedio de páginas. Para un proceso activo, el directorio de páginas
tiene que estar en la memoria principal. 

Directorio intermedio de páginas: este directorio puede ocupar varias páginas y cada


entrada de este directorio apunta a una página de la tabla de páginas. 

Tabla de páginas: esta tabla de páginas también puede ocupar varias páginas, y cada
entrada de la tabla de página hace referencia a una tabla virtual del proceso.

Para utilizar esta estructura de la tabla de páginas a tres niveles, una dirección virtual
en Linux se ve como un conjunto de cuatro campos. El campo más a la izquierda (más
significativo) se utiliza como índice en el directorio de páginas. El siguiente campo sirve
como índice en el directorio intermedio de páginas. El tercer campo sirve como índice
en la tabla de páginas. Y el cuarto y último campo, indica el desplazamiento dentro de
la página seleccionada de la memoria.
EL BUDDY SYSTEM (ALOCACIÓN)

El kernel debe establecer una estrategia robusta y eficiente para asignar grupos de
marcos de páginas contiguos. Por ello, el objetivo principal del Buddy system es evitar
la fragmentación externa.
Desarrolla un sistema que controla los marcos de página contiguos y evita en lo posible
dividir un bloque libre grande para una asignación pequeña.

El principio básico del Buddy System es el siguiente:

A cada petición de asignación, se usa la lista no vacía que contiene los grupos de
marcos de página de tamaño inmediatamente superior al tamaño especificado, y se
selecciona un grupo de páginas de esta lista.

Este grupo se descompone en dos partes: los marcos de página correspondientes al


tamaño de memoria especificado, y el resto de marcos de página que siguen
disponibles.

 Este resto puede insertarse en las otras listas. Al liberar un grupo de marcos de
página, el kernel intenta fusionar este grupo con los grupos disponibles, con el objetivo
de obtener un grupo disponible de tamaño máximo

PAGINACIÓN POR DEMANDA

La técnica de cargar sólo páginas virtuales en memoria conforme son accedidas es


conocida como Paginación por Demanda.

 Linux utiliza la paginación por demanda para cargar imágenes ejecutables en la


memoria virtual de un proceso.
Siempre que se ejecuta un proceso, se abre el fichero que la contiene y su contenido
se asocia en la memoria virtual del proceso. Esto se hace modificando las estructuras
de datos que describen el mapa de memoria del proceso y se conoce como asociación
de memoria. Sin embargo, sólo la primera parte de la imagen se copia realmente en
memoria física.
 El resto de la imagen se deja en disco. Conforme se va ejecutando, se generan fallos
de página y Linux utiliza el mapa de memoria del proceso para determinar qué partes
de la imagen ha de traer a memoria para ser ejecutadas

El proceso que se sigue es el siguiente:

1. Se intenta leer la página requerida

2. Si la página requerida ya esta en memoria, simplemente se lee.

3. Si no está en memoria, revisa si la referencia es válida.

4. Si la referencia es inválida, se aborta.

5. Si la referencia es válida, se intenta cargar la


página.

6. Cuando la página sea cargada, se reintenta la instrucción.

PAGINACIÓN POR ANTIGÜEDAD (LRU - LEAST RECENTLY USED) 

Linux utiliza la técnica de paginación por antigüedad (LRU) para escoger de forma
equitativa y justa las páginas a ser intercambiadas o descartadas del sistema.
Este esquema implica que cada página del sistema ha de tener una antigüedad que ha
de actualizarse conforme la página es accedida.
Cuanto más se accede a una página más joven es; por el contrario cuanto menos se
utiliza más vieja e inútil.
Las páginas viejas son las mejoras candidatas para ser intercambiadas (Principio de
Localidad Temporal).

INTERCAMBIO (SWAPPING) EN LINUX 

Si un proceso necesita cargar una página de memoria virtual a memoria física y no hay
ninguna página de memoria física libre, el sistema operativo tiene que crear espacio
para la nueva página eliminando alguna otra página de memoria física.

Si la página que se va a eliminar de memoria física provenía de un archivo imagen o de


un archivo de datos sobre el que no se ha realizado ninguna escritura, entonces la
página no necesita ser guardada.

Tan sólo se tiene que desechar y si el proceso que la estaba utilizando la vuelve a
necesitar simplemente se carga nuevamente desde el archivo imagen o de datos.
Por otra parte, si la página había sido modificada, el sistema operativo debe conservar
su contenido para que pueda volver a ser accedido.

Este tipo de página se conoce como página modificada (dirty page) y para poderla
eliminar de memoria se ha de guardar en un dispositivo de intercambio (dispositivo de
swap).

Si el algoritmo utilizado para decidir qué páginas se descartan o se envían a disco


(algoritmo de intercambio) no es eficiente, entonces se produce hiperpaginación
(thrashing). En este estado, las páginas son continuamente copiadas a disco y luego
leídas, con lo que el sistema operativo está demasiado ocupado para hacer trabajo útil.

CACHÉS EN LINUX PARA LA GESTIÓN DE LA MEMORIA

 Linux emplea varios cachés para la gestión de la memoria:

Buffer Caché
Contiene buffers de datos que son utilizados por los gestores de dispositivos de
bloques. Estos buffers son de tamaño fijo (por ejemplo 512 bytes) y contienen bloques
de información que ha sido bien leída de un dispositivo de bloques o que ha de ser
escrita.
El buffer caché (caché de disco formado por buffers, que almacena un único bloque de
disco) está indexado vía el identificador de dispositivo y el número de bloque deseado,
índice que es utilizado para una rápida localización del bloque.

CACHÉ DE PÁGINAS 

Este caché es un caché de disco formado por páginas, y cada página en el caché
corresponde a varios bloques de un archivo regular (normal) o de un archivo de
dispositivo de bloque (el número de bloques contenidos en una página depende del
tamaño del bloque).

Todos los bloques son contiguos desde un punto de vista lógico (es decir, ellos
representan una parte íntegra de un archivo regular o de un archivo de dispositivo de
bloque).
Este se utiliza para acelerar el acceso a imágenes y datos en disco.

CACHE DE INTERCAMBIO O SWAP 

Sólo las páginas que han sido modificadas (dirty) se guardan en el dispositivo de
intercambio. Mientras no vuelvan a ser modificadas después de haber sido guardadas
en el dispositivo de intercambio, la próxima vez que necesiten ser descartadas (swap
out) no será necesario copiarlas al dispositivo de intercambio pues ya están allí.
Simplemente se les elimina. En un sistema con mucho trasiego de páginas, esto evita
muchas operaciones de disco innecesarias y costosas.

CACHES HARDWARE 

Es un caché normalmente implementada en el propio procesador; la caché de entradas


de tabla de página.
En este caso, el procesador no necesita siempre leer la tabla de páginas directamente,
sino que guarda en este caché las traducciones de las páginas conforme las va
necesitando.

Estos son los  Buffer de Traducción Adelantada (TLB) que contienen copias de las


entradas de la tabla de páginas de uno o más procesos del sistema.

De la memoria virtual de iOS

Memoria virtual:
Como ya sabemos el kernel de Mac OSX se encuentra basado en mach, el cual combina
la memoria virtual paginada de accent y la comunicación entre procesos (IPC)  lo que
permite grandes transferencias de datos a través del mapeo de memoria copy on write
(COW).

COW: es una técnica de gestión de recursos utilizada en la programación informática


para implementar de manera eficiente una operación de "duplicado" o "copia" en
recursos modificables. (Gestión de procesos y memoria en iOS, octubre 26, 2017)

A partir de accent, mach también se basó para proporcionar la abstracción de un


objeto en memoria, que representa un repositorio de datos y se encuentra con un
almacén de respaldo en el disco duro.

El diseño de VM de Mach tiene los siguientes aspectos dignos de mención:

1) Una separación limpia entre partes dependientes de la máquina e independientes


de la máquina. Solo la última parte tiene información completa relacionada con VM.
2)Espacios de direcciones virtuales amplios y dispersos para cada tarea, y totalmente
compartidos por todos los hilos dentro de esa tarea o proceso.
3) Integración de la gestión de la memoria y la comunicación entre procesos. Mach
proporciona basado en IPC interfaces para trabajar con espacios de direcciones de
tareas. Estas interfaces son especialmente flexibles al permitir una tarea para
manipular el espacio de direcciones de otro.
4)Operaciones optimizadas de copia virtual a través de copy-on-write simétrico o
asimétrico (COW).
Paginación.

Mach divide un espacio de direcciones de memoria en páginas, con las páginas siendo
usualmente del mismo tamaño que las que dicta la arquitectura de la CPU (páginas
residentes o marcos). Aún así tiene la posibilidad de crear páginas más grandes que las
nativas del hardware y en este caso se usan varios marcos de memoria.

Cada programa se divide entonces en páginas, y dependiendo del patrón de uso de


memoria de cada programa y algunos otros factores, puede que ninguna, algunas o
incluso todas las páginas del mismo estén guardadas en memoria principal a través de
páginas residentes.

El kernel mantiene una tabla hash de las páginas residentes para realizar su búsqueda,
y se encarga de hacer puente entre la página residente y la página encontrada en
memoria virtual.

Distribución de las páginas residentes:

Existen tres colas que comprenden las páginas residentes o marcos:


 La cola de libres: contiene marcos libres disponibles para su asignación
inmediata

 La cola de inactivos: contiene marcos que el kernel puede desalojar fácilmente


en caso de necesitarlo

 La cola de activos: estos pasan a la cola de inactivos antes de ser desalojados

Reemplazo de páginas:

El kernel usa una política de reemplazo de páginas denominada FIFO con segunda
chance, que se asemeja a un comportamiento LRU. Se implementa por medio de una
cola FIFO (cola de activas) , si una pagina inactiva es referenciada vuelve a la cola de
activas y se le puede dar una segunda chance a una página en la cola de inactivas,
evitando que pase a libres, dependiendo de su frecuencia de referenciación.
Fallos de página:
Cuando una página referenciada no está entre las páginas residentes, se presenta un
fallo de memoria. Ahí pueden ocurrir dos casos, que se presente un fallo de memoria
denominado "suave" cuando la página se encuentra en cache, o un fallo de memoria
"duro" cuando definitivamente se debe de acudir a memoria virtual para cargar el
proceso.
Referencias:
| https://kulslide.com/download/gestion-de-memoria-en-linux-
_5a059f4cd64ab24a780cf929_pdf

| https://www.tldp.org/LDP/tlk/mm/memory.html

| http://cursos.clavijero.edu.mx/cursos/182_so/modulo3/imagenes/tema3.3.1_clip_i
mage008.jpg

| https://www.maketecheasier.com/manage-swap-usage-linux/
  Addison. (2006). Mac OS X Internals: A Systems Approach. Disponible
en: http://venom630.free.fr/pdf/OSXInternals.pdf

 https://developer.apple.com/library/content/documentation/Darwin/Conce
ptual/KernelProgramming/Architecture/Architecture.html

 https://www.freebsd.org/doc/en/books/design-44bsd/overview-process-
management.html

También podría gustarte