GNU/Linux >> Tutoriales Linux >  >> Linux

Gestión de memoria de Linux:intercambio, cachés y VM compartida

Este artículo es parte de nuestra serie actual de descripción general del kernel de UNIX.

En el artículo anterior de la serie kernel, discutimos sobre la memoria virtual de Linux y la paginación bajo demanda.

Aunque la memoria virtual y la paginación bajo demanda son los componentes básicos del sistema de administración de memoria de Linux, existen otros conceptos que hacen que la administración de memoria de Linux sea muy poderosa.

En este artículo intentaremos tocar la base de algunos de estos conceptos (intercambio, almacenamiento en caché y memoria virtual compartida).

Yo. Cambio de Linux

Supongamos que hay una situación en la que un proceso necesita tener una de sus páginas virtuales en la memoria física, pero la memoria física no tiene espacio para traer más páginas.

¿Qué pasará en este caso?

Bueno, el sistema operativo tendrá que manejar esta situación al permitir que esta página esté en la memoria física. Pero para que esto suceda, se debe descartar una página que ya reside en la memoria física.

Ahora, si la página que se va a descartar es de una imagen ejecutable o un archivo de datos y la página no se ha escrito, entonces se puede descartar fácilmente cuando sea necesario, la misma página se puede recuperar fácilmente en la memoria física desde el mismo ejecutable. imagen o archivo de datos.

Pero supongamos que la página que el sistema operativo va a descartar es en la que se ha escrito, entonces este tipo de página se conoce como página sucia.

Una página sucia tiene que ser preservada para ser utilizada en alguna etapa posterior. Cuando las páginas sucias se descartan de la memoria física, se guardan en un archivo especial conocido como archivos de intercambio. Esto se conoce como intercambio .

El tiempo necesario para acceder a una página de intercambio es bastante considerable si se compara con la velocidad del procesador.

Entonces vemos que el sistema operativo debe tener un buen algoritmo de intercambio para decidir entre descartar o intercambiar. Un algoritmo de intercambio ineficiente puede conducir a un fenómeno en el que el sistema operativo está tan ocupado intercambiando archivos y luego volviendo a leer en la memoria física que en realidad dedica mucho menos tiempo al trabajo real que exigen los procesos. Este fenómeno se conoce como golpeteo. .

Además, un conjunto de páginas que un proceso usa continuamente se conoce como conjunto de trabajo. Un buen algoritmo de intercambio rara vez permitiría que el sistema operativo entrara en problemas y también se aseguraría de que el conjunto de trabajo de todos los procesos esté siempre presente en la memoria física.

Linux decide qué páginas se mantendrán en la memoria y qué páginas se eliminarán utilizando un esquema de 'Usado menos recientemente ‘.

En este esquema, cada página en la memoria física tiene una edad asociada. La edad cambia según se acceda o no a la página. Si se accede con frecuencia a la página, se supone que esa página es bastante joven, mientras que si no se accede a una página, esa página se vuelve más antigua. Las páginas más antiguas se ofrecen para intercambiarse/descartarse de la memoria física.

II. cachés

Para aprovechar al máximo el sistema, se están desarrollando procesadores y sistemas operativos rápidos. Aunque esto es bueno, un aspecto que hace que el procesador, el sistema operativo y su interacción sean más rápidos es el concepto de cachés.

Algunas de las cachés importantes en Linux se describen a continuación.

1. Caché de intercambio de Linux

Como ya se mencionó anteriormente, solo se intercambian las páginas sucias, ya que necesitamos conservar las páginas que se han modificado. Además, supongamos que si una página se modificó y se intercambió, ahora si la misma página se devolvió a la memoria física y ahora es necesario intercambiarla nuevamente, pero la página no se ha modificado más, entonces no hay necesidad de intercambiar esto. página. Simplemente deséchelo ya que esta versión de la página ya está en el archivo de intercambio. Esto ahorra una buena cantidad de tiempo que de otro modo se habría desperdiciado.

Ahora, para implementar el concepto anterior, Linux hace uso de la memoria caché de intercambio.

  • Un caché de intercambio no es más que una lista de entradas de la tabla de páginas con una entrada por página física.
  • Cada entrada corresponde a una página intercambiada junto con la información sobre el archivo de intercambio en el que se guarda la página junto con su ubicación exacta en el archivo de intercambio.
  • Si alguna entrada de la tabla de páginas en el caché de intercambio es distinta de cero, entonces representa una página que se mantiene en un archivo de intercambio y esa página no se ha modificado más.
  • Si una página tiene su entrada en el caché de intercambio y se modifica más, entonces se elimina su entrada del caché de intercambio.
  • De esta manera, el caché contiene información solo en aquellas páginas que no se modificaron desde la última vez que se intercambiaron.

Entonces vemos que el caché de intercambio ayuda mucho a aumentar la eficiencia del mecanismo de intercambio.

2. Caché de hardware

Como ya hemos discutido en el artículo anterior, un procesador lee las entradas de la tabla de páginas para convertir la dirección virtual en dirección física. Por lo general, un procesador almacena la información de las entradas de la tabla de páginas en un caché de hardware. .

Esta memoria caché de hardware consta de búferes de búsqueda de traducción o TLB s.

Cada vez que un procesador necesita traducir una dirección virtual, intenta obtener la información de entrada de la tabla de páginas de los TLB. Si encuentra la entrada, continúa, pero si el procesador no puede encontrar dicha entrada, le dice al sistema operativo que se ha producido una falla de TLB y le pide al sistema operativo que arregle las cosas.

Para entregar esta información de falla de TLB al sistema operativo, se utiliza algún tipo de mecanismo de excepción que depende del procesador. Ahora, el sistema operativo encuentra la entrada correcta y actualiza la entrada TLB con ella. Cuando se elimina la excepción (después de que el sistema operativo corrige el problema), el procesador vuelve a intentar buscar la entrada en los TLB y esta vez encuentra una entrada válida.

3. Caché de búfer de Linux

Un caché de búfer contiene búferes de datos que utilizan los controladores de dispositivos de bloque.

Un controlador de dispositivo de bloque es uno que opera en un bloque de datos, es decir, se puede acceder leyendo o escribiendo fragmentos fijos o bloques de datos. Se indexa una caché de búfer. El identificador del dispositivo se utiliza con fines de indexación.

La caché de búfer hace que la lectura/escritura sea muy eficiente y rápida. Por ejemplo, considere un dispositivo de bloque, por ejemplo, un disco duro. Leer/escribir un disco duro requiere E/S de archivo, lo cual es bastante costoso si lo hacemos en el disco duro cada vez que se realiza una lectura o escritura. Este caché de búfer que se encuentra en el medio, ahorra tiempo ya que las lecturas y escrituras se realizan en este y el resto se encarga del caché.

Para ver el intercambio, la memoria, la página, el bloque de E/S, las trampas, los discos y la actividad de la CPU, puede usar herramientas como vmstat o sar.

III. Memoria virtual compartida

Cuando se escribe el código, los desarrolladores tienen mucho cuidado de que ninguna parte del código se repita innecesariamente. Por ejemplo, las funciones se usan en programas para que se pueda llamar a la misma pieza de código en cualquier momento desde dentro del código.

Un grupo de funciones que se pueden usar comúnmente se agrupan en bibliotecas. Ahí viene el concepto de memoria compartida que una vez se carga en la memoria y puede ser utilizada por múltiples procesos.

Memoria virtual facilita que los procesos compartan memoria, esto se debe a que la dirección física se asigna a través de tablas de páginas y esto es muy posible que el mismo número de marco de página física se pueda asignar en la tabla de páginas de múltiples procesos. Este concepto se conoce como memoria virtual compartida .


Linux
  1. Uso de memoria de Linux

  2. Cómo eliminar búferes de memoria y caché en Linux

  3. ¿Recuperar el uso de la CPU y el uso de la memoria de un solo proceso en Linux?

  4. ¿Cómo configurar swappiness en Linux Memory Management?

  5. Memoria inactiva de Linux

Supervisión de memoria y CPU de Plesk

Cómo verificar la memoria compartida de Linux usando el comando ipcs

Gestión de paquetes de Linux con YUM y RPM

Gestión de memoria de Linux:memoria virtual y paginación de demanda

¿Qué son la memoria alta y la memoria baja en Linux?

Ubuntu Linux:procesamiento de memoria de intercambio y uso de memoria