Pregunta

En los sistemas multitarea, algunas condiciones anormales impiden el progreso de los procesos o hilos de ejecución. Me referiré a ambos procesos y subprocesos simplemente como "procesos". Dos de estas condiciones son llamados muertos-cerradura y vivo-cerradura.

El primero se refiere a procesos que están bloqueando entre sí, evitando así que sea de ejecución. La última se refiere a procesos que impiden el uno al otro de progresar, pero en realidad no bloquean la ejecución. Por ejemplo, podrían provocar continuamente entre sí para retrotraer las transacciones, ni nunca ser capaz de acabar con ellos.

Otra condición se conoce como agotamiento de recursos, en el que uno o más recursos finitos, necesarios para el progreso de los procesos, se han agotado por ellos y no pueden ser restaurados a menos que el progreso procesos. Esto también es un caso especial de vivir-cerradura.

Me gustaría saber si hay alguna otra definición, sobre todo un académico, por "hambre" que no se limita a "agotamiento de recursos". Las referencias son especialmente bienvenidos.

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

¿Fue útil?

Solución

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

  • En un livelock, ningún hilo avanza pero mantienen la ejecución. (En un callejón sin salida, ni siquiera se mantienen en ejecución)

  • Cuando morir de hambre, un poco de hilo (s) hacen progreso y un poco de hilo (s) no están ejecutando.

Una buena explicación: http://docs.oracle.com/ JavaSE / tutorial / esencial / concurrencia / starvelive.html . Pero entiendo que la elección de la terminología puede variar.

Cuando se trata de la inanición, la definición que oí es:

Supongamos que es posible especificar una ruta infinita de ejecución (entrelazado) coherente con las hipótesis (semántica de semáforos, comportamiento del programador OS ...) de modo que el hilo T se suspendió en espera de algún recurso y nunca se reanudó, incluso si era posible un número infinito de veces. Entonces T se llama hambre.

Pero la práctica no coincide. Supongamos que dos hilos se ejecutan sección critial en un bucle infinito. Su código de sincronización permite que el primer hilo para entrar en la sección de critial una vez por hora. ¿Es el hambre? Ambos hilos se les permite progresar, pero el primero de ellos está haciendo su trabajo dolorosamente lenta.

La fuente más simple de hambre son débiles semáforos. Si está utilizando una primitiva de sincronización (o la construcción de su propia) que se comporta de manera similar, a continuación, el hambre resultará.

problemas clásicos donde el hambre es bien conocida:

Para más detalles, yo recomiendo de todo corazón El pequeño libro de semáforos (gratis): http: //www.greenteapress .com / semáforos / .

Usted está pidiendo si cada hambre es causada por la espera de algún recurso. Yo diría - Sí.

Un hilo puede ser suspendido:

(1) en la que algunos llaman sistema de bloqueo - a la espera de encendido / adquirir un mutex, semáforos, la variable condicional; escribir (), poll (), etc.

(2) en una operación sin bloqueo -. Como la realización de cálculos

El morir de hambre en (1) se muere de hambre en los recursos (mutex, tampón, etc.).

El morir de hambre en (2) se muere de hambre en la CPU - se puede considerar como un recurso. Si esto ocurre, el problema es con el planificador.

HTH

Otros consejos

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

pronto va a estar hambriento. ;)

Ahora imagina que eres un proceso de baja prioridad y las mujeres embarazadas son los de mayor prioridad. =)

Otra área en la inanición o "bloqueo indefinido" normalmente surge es cuando se habla de algoritmos de programación de prioridad. Un algoritmo de programación de prioridad tiene la posibilidad de dejar algún proceso de baja prioridad en espera indefinidamente. Un flujo constante de procesos de mayor prioridad puede evitar un proceso de baja prioridad para que no penetren a ejecutar.

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

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

Este es un ejemplo acabo de componer sólo para fines de aclaración.

Imagínese un algoritmo que controla el acceso a los ordenadores de una red WAN o algo por el estilo. Este algoritmo podría tener una política que dice "Proporcionar acceso prioritario a aquellos equipos que van a utilizar menos ancho de banda.", Que se parece como una política adecuada, pero entonces lo que ocurre cuando un solo equipo quiere tener acceso a la red para una carga FTP que se enviar varios GB en alguna parte. Con esta política solo, ese equipo va a morir de hambre ya que el algoritmo nunca se seleccionará ese equipo, ya que siempre habrá otros equipos que solicitan el uso de ancho de banda menor.

Eso se llama inanición.

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

Un proceso no recibe un recurso o recursos por más tiempo. Esto no es un callejón sin salida, porque un proceso / S operar sin problema. El envejecimiento se puede utilizar para resolver este problema, un factor de envejecimiento se utiliza para cada solicitud.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top