La escasez de recursos es un problema que se presenta en la computación concurrente donde a un proceso se le niegan perpetuamente los recursos necesarios para procesar su trabajo. [ 1 ] La escasez puede ser causada por errores en un algoritmo de planificación o exclusión mutua , pero también puede ser causada por fugas de recursos y puede ser causada intencionalmente a través de un ataque de denegación de servicio como una bomba fork .
Cuando la inanición es imposible en un algoritmo concurrente , se dice que el algoritmo es libre de inanición , libre de bloqueo [ 2 ] o que tiene derivación finita [ 3 ] . Esta propiedad es una instancia de vivacidad y es uno de los dos requisitos para cualquier algoritmo de exclusión mutua; el otro es la corrección . El nombre "derivación finita" significa que cualquier proceso (parte concurrente) del algoritmo es derivado como máximo un número finito de veces antes de que se le permita el acceso al recurso compartido [ 3 ] .
Programación
La inanición de recursos suele deberse a un algoritmo de planificación demasiado simplista . Por ejemplo, si un sistema multitarea (mal diseñado) alterna constantemente entre las dos primeras tareas mientras que una tercera nunca llega a ejecutarse, entonces la tercera tarea está sufriendo una falta de tiempo de CPU . El algoritmo de planificación, que forma parte del núcleo , debería asignar los recursos de forma equitativa; es decir, debería asignarlos de manera que ningún proceso carezca permanentemente de los recursos necesarios.
Muchos planificadores de sistemas operativos emplean el concepto de prioridad de procesos. Un proceso A de alta prioridad se ejecutará antes que un proceso B de baja prioridad. Si el proceso A se bloquea y nunca cede el control, el proceso B (en algunos sistemas) nunca se planificará, sufriendo inanición. Si existe un proceso X de prioridad aún mayor, que depende del resultado del proceso B, es posible que X nunca finalice, aunque sea el proceso más importante del sistema. Esta situación se denomina inversión de prioridad . Los algoritmos de planificación modernos suelen incluir código para garantizar que todos los procesos reciban una cantidad mínima de cada recurso importante (generalmente tiempo de CPU) para evitar que alguno sufra inanición.
En las redes informáticas, especialmente en las redes inalámbricas, los algoritmos de planificación pueden sufrir de escasez de recursos. Un ejemplo es la planificación de rendimiento máximo .
La inanición suele ser causada por un interbloqueo, ya que provoca que un proceso se congele. Dos o más procesos se bloquean cuando cada uno de ellos no hace nada mientras espera un recurso ocupado por otro programa en el mismo conjunto. Por otro lado, un proceso está en inanición cuando espera un recurso que se asigna continuamente a otros procesos. La ausencia de inanición es una garantía más fuerte que la ausencia de interbloqueo: un algoritmo de exclusión mutua que debe elegir permitir el acceso de dos procesos a una sección crítica y elige uno arbitrariamente está libre de interbloqueo, pero no de inanición. [ 3 ]
Una posible solución al problema de inanición es utilizar un algoritmo de planificación con cola de prioridad que también emplee la técnica de envejecimiento . El envejecimiento es una técnica que consiste en aumentar gradualmente la prioridad de los procesos que esperan en el sistema durante un tiempo prolongado. [ 4 ]
Véase también
Referencias
- ↑ Tanenbaum, Andrew (2001). Sistemas operativos modernos . Prentice Hall. págs. 184–185 . ISBN 0-13-092641-8.
- ↑ Herlihy, Maurice ; Shavit, Nir (2012). El arte de la programación multiprocesador . Elsevier. pág. 24. ISBN 9780123977953.
- 1 2 3 Raynal, Michel (2012). Programación concurrente: algoritmos, principios y fundamentos . Springer Science & Business Media. págs. 10–11 . ISBN 978-3642320279.
- ↑ Galvin, Peter (2010). Conceptos de sistemas operativos . Edición de Wiley India. pág. 193. ISBN 978-81-265-2051-0.
- Concurrencia (informática)
- Algoritmos de planificación de procesadores
- Problemas en informática