stringtranslate.com

Sin memoria

Visualización de pantalla sin memoria en el sistema que ejecuta Linux Mint 9 (kernel 2.6.32)

Sin memoria ( OOM ) es un estado de funcionamiento de la computadora a menudo no deseado en el que no se puede asignar memoria adicional para que la utilicen los programas o el sistema operativo. Un sistema de este tipo no podrá cargar ningún programa adicional y, dado que muchos programas pueden cargar datos adicionales en la memoria durante la ejecución, estos dejarán de funcionar correctamente. Esto suele ocurrir porque se ha asignado toda la memoria disponible, incluido el espacio de intercambio en disco.

Historia

Históricamente, la condición de falta de memoria era más común de lo que es ahora, ya que las primeras computadoras y sistemas operativos estaban limitados a pequeñas cantidades de memoria física de acceso aleatorio (RAM) debido a la incapacidad de los primeros procesadores para manejar grandes cantidades de memoria. , así como consideraciones de costos. Desde que la llegada de la memoria virtual abrió la puerta al uso del espacio de intercambio, esta condición es menos frecuente. Casi todos los programas modernos esperan poder asignar y desasignar memoria libremente en tiempo de ejecución, y tienden a fallar de manera incontrolada (bloqueo) cuando no se cumple esa expectativa; los mayores a menudo asignaban memoria sólo una vez, comprobaban si tenían suficiente para hacer todo su trabajo y luego no esperaban recibir más. Por lo tanto, fallarían inmediatamente con un mensaje de error "sin memoria" (OOME) o funcionarían como se esperaba. [ cita necesaria ]

Los primeros sistemas operativos, como MS-DOS, carecían de soporte para realizar múltiples tareas . A los programas se les asignó memoria física que podían usar según lo necesitaran. La memoria física era a menudo un recurso escaso y, cuando la agotaban aplicaciones como aquellas con funcionalidad de terminación y permanencia residente , no se podían iniciar más aplicaciones hasta que se cerraban las aplicaciones en ejecución.

Los sistemas operativos modernos proporcionan memoria virtual, en la que los procesos reciben un rango de memoria, pero donde la memoria no corresponde directamente a la RAM física real. La memoria virtual puede estar respaldada por RAM física, un archivo de disco a través de mmap (en derivados de Unix ) o MapViewOfFile (en Windows), o espacio de intercambio, y el sistema operativo puede mover páginas de memoria virtual según sea necesario. Debido a que la memoria virtual no necesita estar respaldada por una memoria física, su agotamiento es raro y, por lo general, el sistema operativo impone otros límites al consumo de recursos. [1]

Como predice la ley de Moore , la cantidad de memoria física en todas las computadoras ha crecido casi exponencialmente, aunque esto se ve compensado hasta cierto punto por el aumento de tamaño de los programas y archivos. En algunos casos, una computadora con soporte de memoria virtual donde la mayoría de los datos cargados residen en el disco duro puede quedarse sin memoria física pero no sin memoria virtual, lo que provoca una paginación excesiva . Esta condición, conocida como thrashing , generalmente inutiliza la computadora hasta que se cierran algunos programas o se reinicia la máquina. Debido a estos motivos, las aplicaciones de las computadoras modernas rara vez encuentran un mensaje de falta de memoria. [ cita necesaria ]

Sin embargo, todavía es posible encontrar una condición OOM en una computadora moderna. El caso típico de OOM en las computadoras modernas ocurre cuando el sistema operativo no puede crear más memoria virtual porque todos sus dispositivos de respaldo potenciales se han llenado o el usuario final los ha desactivado. La condición puede surgir debido a la copia en escritura después de fork().

Recuperación

Los núcleos de sistemas operativos como Linux intentarán recuperarse de este tipo de condición OOM finalizando uno o más procesos, un mecanismo conocido como OOM Killer . [2] [3] Linux 4.6 (lanzado en mayo de 2016) introdujo cambios en situaciones OOM, mejorando la detección y la confiabilidad. [4] [5] El reconocimiento de cgroup en OOM Killer se implementó en el kernel de Linux 4.19 lanzado en octubre de 2018, lo que agrega la capacidad de eliminar un cgroup como una sola unidad. [6]

Debido a la activación tardía de OOM Killer en algunos sistemas Linux, [7] existen varios demonios y parches del kernel que ayudan a recuperar la memoria de la condición OOM antes de que sea demasiado tarde.

Límites de memoria por proceso

Además de los límites de memoria física de todo el sistema, algunos sistemas limitan la cantidad de memoria que puede utilizar cada proceso. Generalmente es una cuestión de política, esta limitación también puede ocurrir cuando el sistema operativo tiene un espacio de direcciones mayor que el disponible a nivel de proceso. Algunos sistemas de 32 bits de gama alta (como aquellos con extensión de dirección física habilitada) vienen con 8 gigabytes o más de memoria del sistema, aunque cualquier proceso solo puede acceder a 4 GB en un modelo de memoria plana de 32 bits .

Un proceso que excede su límite por proceso y luego intenta asignar más memoria encontrará una condición de error. Por ejemplo, la función estándar de C para asignar memoria malloc()devolverá NULL y una aplicación con buen comportamiento debería manejar esta situación.

Referencias

  1. ^ "Guía completa sobre cómo actualizar Ram". wincah.com . 2023.
  2. ^ Asesino de OOM de Linux
  3. ^ "Cómo configurar el asesino de la falta de memoria de Linux" . Consultado el 19 de febrero de 2015 .
  4. ^ "Hacia un manejo de la falta de memoria más predecible y confiable [LWN.net]". lwn.net .
  5. ^ "Linux_4.6: novatos en el kernel de Linux". kernelnewbies.org .
  6. ^ "Linux_4.19: novatos en el kernel de Linux". kernelnewbies.org .
  7. ^ "kernel de Linux: ¿es posible hacer que el asesino de OOM intervenga antes?". Superusuario . Consultado el 7 de marzo de 2021 .
  8. ^ rfjakob (7 de marzo de 2021), rfjakob/earlyoom, GitHub , consultado el 7 de marzo de 2021
  9. ^ Avramov, Alexey (5 de marzo de 2021), hakavlad/nohang, GitHub , consultado el 7 de marzo de 2021
  10. ^ "linux-psi.git: métricas de presión de recursos de Linux". git.cmpxchg.org . Consultado el 7 de marzo de 2021 .
  11. ^ facebookincubator/oomd, Facebook Incubator, 3 de marzo de 2021 , consultado el 7 de marzo de 2021

enlaces externos