stringtranslate.com

Sin memoria

Se muestra la pantalla de falta de memoria en un sistema que ejecuta Linux Mint 9 (kernel 2.6.32)

Sin memoria ( OOM ) es un estado a menudo no deseado del funcionamiento de la computadora 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 del 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 a consideraciones de costo. Dado que la llegada de la memoria virtual abrió la puerta al uso del espacio de intercambio, la 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 descontrolada (bloqueo) cuando esa expectativa no se cumple; los más antiguos a menudo asignaban memoria solo una vez, verificaban si tenían suficiente para hacer todo su trabajo y luego esperaban que no hubiera más. Por lo tanto, fallaban inmediatamente con un mensaje de error de "memoria agotada" (OOME) o funcionaban como se esperaba. [ cita requerida ]

Los primeros sistemas operativos, como MS-DOS, carecían de compatibilidad con la multitarea . A los programas se les asignaba memoria física que podían usar según sus necesidades. La memoria física era a menudo un recurso escaso y, cuando se agotaba con aplicaciones como las que tenían la funcionalidad de terminar y permanecer en el sistema , no se podían iniciar más aplicaciones hasta que se cerraran las que estaban en ejecución.

Los sistemas operativos modernos proporcionan memoria virtual, en la que se asigna a los procesos un rango de memoria, pero donde la memoria no se corresponde directamente con 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 memoria física, su agotamiento es poco frecuente y, por lo general, existen otros límites impuestos por el sistema operativo al consumo de recursos. [ cita requerida ]

Como predice la ley de Moore , la cantidad de memoria física en todos los ordenadores ha crecido casi exponencialmente, aunque esto se compensa en cierta medida con el aumento de tamaño de los programas y archivos. En algunos casos, un ordenador 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 , suele dejar el ordenador inutilizable hasta que se cierran algunos programas o se reinicia la máquina. Debido a estas razones, rara vez se encuentran mensajes de falta de memoria en las aplicaciones de los ordenadores modernos. [ cita requerida ]

Sin embargo, todavía es posible encontrar una condición OOM en una computadora moderna. El caso típico de OOM en 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 una 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 terminando uno o más procesos, un mecanismo conocido como OOM Killer . [1] [2] Linux 4.6 (lanzado en mayo de 2016) introdujo cambios en situaciones OOM, mejorando la detección y la confiabilidad. [3] [4] La conciencia de cgroup en OOM killer se implementó en el kernel de Linux 4.19 lanzado en octubre de 2018, que agrega la capacidad de matar un cgroup como una sola unidad. [5]

Debido a la activación tardía de OOM Killer en algunos sistemas Linux, [6] existen varios demonios y parches de 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 a nivel de sistema, algunos sistemas limitan la cantidad de memoria que puede utilizar cada proceso. Generalmente, es una cuestión de política, pero 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 alta gama (como aquellos con la extensión de dirección física habilitada) vienen con 8 gigabytes o más de memoria de sistema, aunque cualquier proceso individual solo puede acceder a 4 GB de la misma 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 que funcione bien debería manejar esta situación.

Referencias

  1. ^ Asesino de OOM de Linux
  2. ^ "Cómo configurar el eliminador de falta de memoria de Linux" . Consultado el 19 de febrero de 2015 .
  3. ^ "Hacia un manejo más predecible y confiable de la falta de memoria [LWN.net]". lwn.net .
  4. ^ "Linux_4.6 - Principiantes del kernel de Linux". kernelnewbies.org .
  5. ^ "Linux_4.19 - Principiantes del kernel de Linux". kernelnewbies.org .
  6. ^ "kernel de linux - ¿Es posible hacer que el asesino de OOM intervenga antes?". Super User . Consultado el 7 de marzo de 2021 .
  7. ^ rfjakob (7 de marzo de 2021), rfjakob/earlyoom, GitHub , consultado el 7 de marzo de 2021
  8. ^ Avramov, Alexey (5 de marzo de 2021), hakavlad/nohang, GitHub , consultado el 7 de marzo de 2021
  9. ^ "linux-psi.git - Métricas de presión de recursos de Linux". git.cmpxchg.org . Consultado el 7 de marzo de 2021 .
  10. ^ facebookincubator/oomd, Facebook Incubator, 3 de marzo de 2021 , consultado el 7 de marzo de 2021

Enlaces externos