¿Qué es el hambre?


En sistemas multitarea, algunas condiciones anormales impiden el progreso de la ejecución de procesos o subprocesos. Me referiré a ambos procesos y subprocesos simplemente como "procesos". Dos de estas condiciones se llaman dead-lock y live-lock.

El primero se refiere a los procesos que se bloquean entre sí, impidiendo así su ejecución. Este último se refiere a los procesos que se impiden el progreso entre sí, pero en realidad no bloquean la ejecución. Por ejemplo, podrían continuamente hacer que cada uno de los otros para revertir las transacciones, ni nunca ser capaz de terminarlas.

Otra condición es conocida como inanición de recursos, en la cual uno o más recursos finitos, requeridos para el progreso de los procesos, han sido agotados por ellos y no pueden ser restaurados a menos que los procesos progresen. Este es también un caso especial de live-lock.

Me gustaría saber si hay alguna otra definición, particularmente una académica, para "inanición" que no se limite a " recurso hambre". Las referencias son especialmente bienvenidas.

Y, no, esto no es tarea. :-)

Author: raven, 2009-07-22

6 answers

No diría que el hambre de recursos es un caso especial de un livelock. Por lo general:

  • En un livelock, ningún hilo progresa, pero siguen ejecutándose. (En un punto muerto, ni siquiera siguen ejecutando)

  • Cuando se muere de hambre, algunos subprocesos hacen progreso y algunos subprocesos no se están ejecutando.

Una buena explicación: http://docs.oracle.com/javase/tutorial/essential/concurrency/starvelive.html . Pero entiendo la elección de la terminología puede variar.

Cuando se trata de hambre, la definición que escuché es:

Supongamos que es posible especificar una ruta infinita de ejecución (entrelazado) consistente con suposiciones (semántica de semáforos, comportamiento del programador del sistema operativo...) tal que el hilo T se suspende esperando algún recurso y nunca se reanuda, incluso si era posible infinitamente muchas veces. Entonces T se llama hambriento.

Pero la práctica no coincide con eso. Supongamos que dos subprocesos ejecutan la sección crítica en un bucle infinito. Su código de sincronización permite que el primer hilo entre en la sección crítica una vez por hora. ¿Es hambre? Se permite que ambos hilos progresen, pero el primero está haciendo su trabajo dolorosamente lentamente.

La fuente más simple de inanición son los semáforos débiles. Si está utilizando una sincronización primitiva (o construyendo la suya propia) que se comporta de manera similar, entonces el resultado será la inanición.

Problemas clásicos donde la inanición está bien conocido:

Para más detalles, recomiendo de todo corazón El Pequeño Libro de Semáforos (libre): http://www.greenteapress.com/semaphores/.

Usted está preguntando si cada inanición es causada por la espera de algún recurso. Yo diría yes sí.

Un hilo puede ser suspendido:

(1) en algún sistema de bloqueo llamada en espera en/adquiriendo un mutex, semáforo, variable condicional; write(), poll() etc.

(2) en algunas operaciones no bloqueadas, como realizar cálculos.

Hambriento en (1) está hambriento en recursos (mutexes, buffer sucesivamente.).

Pasar hambre en (2) es pasar hambre en la CPU - se puede considerar como un recurso. Si sucede, el problema es con scheduler.

HTH

 29
Author: sdcvvc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-25 10:57:44

Imagina que estás en una cola para comprar comida en un restaurante, para lo cual las mujeres embarazadas tienen prioridad. Y hay un montón de mujeres embarazadas que llegan todo el tiempo.

Pronto te morirás de hambre. ;)

Ahora imagine que usted es un proceso de baja prioridad y las mujeres embarazadas son de mayor prioridad. =)

 48
Author: Samuel Carrijo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-14 23:55:33

Otra área donde la inanición o el "bloqueo indefinido" suele surgir es cuando se habla de algoritmos de Programación de Prioridades. Un algoritmo de programación de prioridad tiene la posibilidad de dejar un proceso de baja prioridad esperando indefinidamente. Un flujo constante de procesos de alta prioridad puede evitar que un proceso de baja prioridad llegue a ejecutarse.

En el caso de los schedulers de prioridad, la solución es "envejecer". El envejecimiento es la técnica de aumentar gradualmente la prioridad de los procesos que espere en el sistema durante mucho tiempo.

 12
Author: Umair,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-22 01:35:27

La inanición es simplemente cuando un proceso o servicio no está siendo servido, incluso cuando no hay un punto muerto en el sistema.

Este es un ejemplo que acabo de inventar solo para fines de aclaración.

Imaginen un algoritmo que controle el acceso de las computadoras a una WAN o algo así. Este algoritmo podría tener una política que diga " Proporcionar acceso prioritario a aquellos equipos que usarán menos ancho de banda.", que parecerá una política adecuada, pero entonces lo que sucede cuando un solo equipo quiere acceder a la red para una carga ftp que enviará varios GB a algún lugar. Solo con esta política, ese equipo morirá de hambre ya que el algoritmo nunca seleccionará ese equipo, ya que siempre habrá otros equipos que soliciten un uso de ancho de banda más pequeño.

Eso se llama inanición.

 6
Author: Freddy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-22 03:33:25

Work es también un tipo de recurso. Cuando la distribución del trabajo en una configuración productor-consumidor no es justa (o ideal), algunos hilos pueden no obtener suficientes elementos de trabajo para mantenerlos ocupados todo el tiempo.

 1
Author: Christian Klauser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-22 01:29:56

Un proceso no obtiene un recurso o recursos durante más tiempo. Esto no es un punto muerto, porque uno o varios procesos se ejecutan sin problema. El envejecimiento se puede utilizar para resolver este problema, se utiliza un factor de envejecimiento para cada solicitud.

 0
Author: Sachith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-12 06:16:41