Articulo de referencia

fuga de recursos

En informática , una fuga de recursos es un tipo particular de consumo de recursos por parte de un programa informático en el que este no libera los recursos que ha adquirido. E...

En informática , una fuga de recursos es un tipo particular de consumo de recursos por parte de un programa informático en el que este no libera los recursos que ha adquirido. Esta condición suele ser consecuencia de un error en el programa. Las fugas de recursos típicas incluyen fugas de memoria y fugas de identificadores , especialmente fugas de identificadores de archivos, aunque la memoria a menudo se considera por separado de otros recursos. [ 1 ]

Ejemplos de recursos disponibles en cantidades limitadas para el sistema operativo incluyen sockets de Internet , descriptores de archivo , entradas de la tabla de procesos e identificadores de proceso (PID). Las fugas de recursos suelen ser un problema menor, que causa como máximo una leve ralentización y se soluciona una vez que los procesos finalizan. En otros casos, las fugas de recursos pueden ser un problema grave, causando escasez de recursos y una ralentización o inestabilidad severa del sistema, pudiendo provocar el bloqueo del proceso que causa la fuga, de otros procesos o incluso del sistema. [ 2 ] Las fugas de recursos a menudo pasan desapercibidas con cargas ligeras y tiempos de ejecución cortos, y estos problemas solo se manifiestan con cargas pesadas del sistema o sistemas que permanecen en funcionamiento durante largos períodos de tiempo. [ 3 ]

Las fugas de recursos son especialmente problemáticas cuando se trata de recursos disponibles en cantidades muy pequeñas. La fuga de un recurso único, como un bloqueo , es particularmente grave, ya que provoca una escasez inmediata de recursos (impide que otros procesos lo adquieran) y causa un interbloqueo . La fuga intencionada de recursos puede utilizarse en un ataque de denegación de servicio , como una bomba fork , por lo que las fugas de recursos representan una vulnerabilidad de seguridad .

Causas

Las fugas de recursos generalmente se deben a errores de programación: los recursos que se han adquirido deben liberarse, pero como la liberación a menudo ocurre mucho después de la adquisición, y pueden ocurrir muchas cosas mientras tanto (por ejemplo, que se lance una excepción o que el programa termine de forma anormal), es fácil que la liberación no se produzca.

Un ejemplo muy común es no cerrar archivos que se han abierto, lo que provoca una fuga de identificador de archivo; esto también ocurre con las tuberías . Otro ejemplo común es que un proceso padre no llame a wait en un proceso hijo , lo que deja al proceso hijo completado como un proceso zombie , provocando una fuga de una entrada en la tabla de procesos .

Prevención y mitigación

Las fugas de recursos pueden prevenirse o corregirse mediante la gestión de recursos : las técnicas de programación o las construcciones del lenguaje pueden prevenir las fugas liberando los recursos rápidamente, mientras que un proceso independiente puede recuperar los recursos que se hayan filtrado. Muchas fugas de recursos se corrigen mediante la recuperación de recursos por parte del sistema operativo después de que el proceso finaliza y realiza una exitllamada al sistema .

Por lo tanto, las fugas de recursos son principalmente un problema para los procesos de larga duración, ya que los recursos fugados que poseen los procesos que aún se están ejecutando a menudo no se recuperan; y para los procesos que adquieren y pierden rápidamente muchos recursos.

Véase también

Referencias

  1. ^ Deitel, Harvey M.; Deitel, Paul J. (2005), C# para programadores (2ª  ed.), Prentice Hall Professional, pág.  443, ISBN 9780132465915.
  2. Russinovich, Mark; Solomon, David; Ionescu, Alex (2012), Windows Internals, Part 1 (6.ª ed.), Pearson Education, p. 279, ISBN   9780735671300.
  3. ^ Gregory, Kate (1998), Uso de Visual C++ 6 , Que Publishing, p. 590 , ISBN  9780789715395.