La inanición de recursos (conocida en inglés como resource starvation) es un problema crítico en la computación concurrente donde un proceso es privado perpetuamente de los recursos necesarios para completar su trabajo. Este fenómeno ocurre cuando un proceso no puede avanzar porque el sistema, de manera constante, asigna los recursos requeridos a otros procesos.
Causas de la Inanición
La inanición puede originarse por diversas razones, desde errores de diseño hasta ataques malintencionados:
- Errores en algoritmos: Fallos en los algoritmos de planificación (scheduling) o de exclusión mutua.
- Fugas de recursos: Cuando el sistema pierde el control sobre la memoria o handles, reduciendo la disponibilidad para otros procesos.
- Ataques de Denegación de Servicio (DoS): Acciones intencionadas, como una bomba fork, que consumen todos los recursos del sistema para bloquear a los demás.
Planificación y Prioridades
Generalmente, la inanición es el resultado de un algoritmo de planificación excesivamente simplista. Por ejemplo, si un sistema multitarea alterna constantemente entre las dos primeras tareas mientras ignora una tercera, esa tercera tarea sufre de inanición de tiempo de CPU.
El Problema de la Prioridad
Muchos planificadores de sistemas operativos utilizan el concepto de prioridad de procesos. En un esquema simple, un proceso de alta prioridad (A) se ejecutará antes que uno de baja prioridad (B). Si el proceso A nunca cede el control, el proceso B podría no ejecutarse nunca.
Esto puede llevar a una situación llamada inversión de prioridad: ocurre cuando un proceso de prioridad muy alta (X) depende de un resultado que debe generar el proceso de baja prioridad (B), pero B no puede ejecutarse porque el proceso A (de prioridad media) está ocupando el recurso. En consecuencia, el proceso más importante del sistema queda bloqueado.
Inanición vs. Deadlock (Interbloqueo)
Es común confundir la inanición con el deadlock, pero son conceptos distintos:
| Característica | Inanición (Starvation) | Interbloqueo (Deadlock) |
|---|---|---|
| Estado | El proceso espera un recurso que se asigna continuamente a otros. | Dos o más procesos esperan recursos ocupados entre sí, quedando todos congelados. |
| Causa | Planificación injusta o prioridades mal gestionadas. | Dependencia circular de recursos. |
| Garantía | La ausencia de inanición es una garantía de liveness más fuerte que la ausencia de deadlock. |
Soluciones y Prevención
Para evitar que los procesos queden relegados indefinidamente, los sistemas modernos implementan diversas estrategias:
- Planificación Equitativa: Algoritmos diseñados para garantizar que ningún proceso carezca perpetuamente de recursos.
- Técnica de Envejecimiento (Aging): Esta es una solución eficaz donde el sistema aumenta gradualmente la prioridad de los procesos que han estado esperando en la cola durante mucho tiempo. De este modo, eventualmente, cualquier proceso, sin importar su prioridad inicial, alcanzará una prioridad lo suficientemente alta como para ser atendido.

