Administración Memoria Virtual en Linux y IOS
Administración Memoria Virtual en Linux y IOS
Administración Memoria Virtual en Linux y IOS
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.
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.
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 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
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).
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.
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).
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.
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
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).
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.
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.
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