ensayo problemas de la concurrencia.docx

16
PROBLEMAS DE LA CONCURRENCIA DESCRIPCIÓN BREVE Descripción de algunos de los problemas de la programación concurrente Sección D01 Taller de Sistemas operativos

Upload: javier-a-rangel

Post on 13-Dec-2015

215 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Ensayo problemas de la concurrencia.docx

Problemas de la concurrencia

DESCRIPCIÓN BREVEDescripción de algunos de los problemas de la programación concurrente

Sección D01

Page 2: Ensayo problemas de la concurrencia.docx

Introducción

La computación concurrente es la simultaneidad en la ejecución de múltiples tareas interactivas. Estas tareas pueden ser un conjunto de procesos o hilos de ejecución creados por un único programa. Las tareas se pueden ejecutar en una sola unidad central de proceso(multiprogramación), en varios procesadores o en una red de computadores distribuidos. La programación concurrente está relacionada con la programación paralela, pero enfatiza más la interacción entre tareas. Así, la correcta secuencia de interacciones o comunicaciones entre los procesos y el acceso coordinado de recursos que se comparten por todos los procesos o tareas son las claves de esta disciplina.

Desarrollo

Interbloqueos

Definición: Un conjunto de procesos se encuentra en un interbloqueo si cada proceso en el conjunto está esperando un evento que sólo puede ser ocasionado por otro proceso en el conjunto.

Debido a que todos los procesos están en espera, ninguno de ellos producirá alguno de los eventos que podrían despertar a cualquiera de los otros miembros del conjunto, y todos los procesos seguirán esperando para siempre.

En la mayoría de los casos, el evento por el que cada proceso espera es la liberación de algún recurso que actualmente es poseído por otro miembro del conjunto. En otras palabras, cada miembro del conjunto de procesos en interbloqueo está esperando un recurso que posee un proceso en interbloqueo.

Ninguno de los procesos se puede ejecutar, ninguno de ellos puede liberar recursos y ninguno puede ser despertado. El número de procesos y el número de cualquier tipo de recursos poseídos y solicitados es irrelevante. Este resultado se aplica a cualquier tipo de recurso, tanto de hardware como de software. A este tipo de interbloqueo se le conoce como interbloqueo de recursos.

Condiciones necesarias para el interbloqueo

Page 3: Ensayo problemas de la concurrencia.docx

Coffman, Elphick y Shoshani (9171) establecen que deben darse las siguientes cuatro condiciones necesarias para que ocurra un bloqueo mutuo:

- Condición de exclusión mutua: Los procesos exigen un control exclusivo de los recursos que necesitan. Cada recurso se asigna en un momento dado a sólo un proceso, o está disponible.

- Condición de contención y espera: Los procesos mantienen la posesión de los recursos ya asignados a ellos mientras esperan recursos adicionales. Los procesos que actualmente contienen recursos que se les otorgaron antes pueden solicitar nuevos recursos.

- Condición no apropiativa: Los recursos no pueden arrebatarse a los procesos a los cuales están asignados hasta que termine su utilización. Los recursos otorgados previamente no se pueden quitar a un proceso por la fuerza. Deben ser liberados de manera explícita por el proceso que los contiene.

- Condición de espera circular: Existe una cadena circular de procesos en la que cada proceso tiene uno o más recursos que son requeridos por el siguiente proceso en la cadena. Debe haber una cadena circular de dos o más procesos, cada uno de los cuales espera un recurso contenido por el siguiente miembro de la cadena.

Como dichas condiciones son necesarias para que se presente un interbloqueo, la existencia de un bloqueo mutuo implica que se han dado todas y cada una de las cuatro condiciones. 

Prevención del Interbloqueo

- El sistema debe ser capaz de decidir si es seguro otorgar un recurso o si no lo es y asignarlo solo cuando sea seguro.

- Entonces… ¿Existe algún algoritmo que garantice siempre evitar los interbloqueos?

- De hecho existe pero siempre y cuando se tenga la información necesaria.

Page 4: Ensayo problemas de la concurrencia.docx

EVITAR INTEBLOQUEO MEDIANTE ASIGNACION CUIDADOSA DE MEMORIA

• El eje horizontal representa el número de instrucciones ejecutadas por el proceso A.

• El eje vertical representa el número de instrucciones ejecutadas por el proceso B.

• En L1, A solicita una impresora; en I2 necesita un trazador.

• La impresora y el trazador se liberan en

• I3 y en I4, respectivamente.

• El proceso B necesita el trazador de I5 a I7, y la impresora de I6 a I8

Page 5: Ensayo problemas de la concurrencia.docx

Lo importante a considerar aquí es que en el punto t, B está solicitando un recurso.

El sistema debe decidir si lo otorga o no. Si se otorga el recurso, el sistema entrará en una región insegura y en el interbloqueo, en un momento dado.

Para evitar el interbloqueo, B se debe suspender hasta que A haya solicitado y liberado el trazador.

ESTADOS SEGUROS E INSEGUROS

“Se dice que un estado es SEGURO si hay cierto orden de programación en el que se puede ejecutar cada proceso hasta completarse, incluso aunque todos ellos solicitaran de manera repentina su número máximo de recursos de inmediato. “

EJEMPLO estado Seguro

Page 6: Ensayo problemas de la concurrencia.docx

EJEMPLO estado Inseguro

- Vale la pena observar que un estado inseguro no es un estado en interbloqueo.

- La diferencia entre un estado seguro y uno inseguro es que, desde un estado seguro, el sistema puede garantizar que todos los procesos terminarán; desde un estado inseguro, no se puede dar esa garantía.

ALGORITMO DEL BANQUERO

Page 7: Ensayo problemas de la concurrencia.docx

Aunque en teoría el algoritmo es maravilloso, en la práctica es en esencia inútil, debido a que los procesos raras veces saben de antemano cuáles serán sus máximas necesidades de recursos.

Además, el número de procesos no está fijo, sino que varía en forma dinámica a medida que los nuevos usuarios inician y cierran sesión. Por otro lado, los recursos que se consideraban disponibles pueden de pronto desvanecerse (las unidades de cinta se pueden descomponer). Por ende, en la práctica pocos (si acaso) sistemas existentes utilizan el algoritmo del banquero para evitar interbloqueos.

Al parecer parece imposible tratar con el tema de interbloqueos, si tendría que saber información por adelantado para poder resolver el problema…

Bueno antes de darse por vencido veremos 4 opciones que quizá nos otorguen una pista. A continuación:

- Exclusión Mutua- Contención y espera- Condición no apropiativa- Condición de espera circular

Exclusión MUTUA

Si ningún recurso se asignara de manera exclusiva a un solo proceso, nunca tendríamos interbloqueos. No obstante, es igual de claro que al permitir que dos procesos escriban en la impresora al mismo tiempo se producirá un caos

Evite asignar un recurso cuando no sea absolutamente necesario, y trate de asegurarse que la menor cantidad posible de procesos reclamen ese recurso.

CONTENCION Y ESPERA

Si podemos evitar que los procesos que contienen recursos esperen por más recursos, podemos eliminar los interbloqueos. Una forma de lograr esta meta es requerir que todos los procesos soliciten todos sus recursos antes de empezar su ejecución. Si todo está disponible, al proceso se le asignará lo que necesite y podrá ejecutarse hasta completarse. Si uno o más recursos están ocupados, no se asignará nada y el proceso sólo esperará.

CONDICION NO APROPIATIVA

Page 8: Ensayo problemas de la concurrencia.docx

Si a un proceso se le ha asignado la impresora y está a la mitad de imprimir su salida, quitarle la impresora a la fuerza debido a que el trazador que necesita no está disponible es algo engañoso como máximo, e imposible en el peor caso. Sin embargo, ciertos recursos se pueden virtualizar para evitar esta situación Sin embargo, no todos los recursos se pueden virtualizar

Por ejemplo, los registros en las bases de datos o las tablas dentro del sistema operativo se deben bloquear para poder utilizarse, y ahí es donde se encuentra el potencial para el interbloqueo.

ESPERA CIRCULAR

Sólo queda una condición. La espera circular se puede eliminar de varias formas. Una de ellas es simplemente tener una regla que diga que un proceso tiene derecho sólo a un recurso en cualquier momento. Si necesita un segundo recurso, debe liberar el primero. Para un proceso que necesita copiar un enorme archivo de una cinta a una impresora, esta restricción es inaceptable.

Detección

Recordemos lo que es un interbloqueo

Un conjunto de procesos se encuentra en un interbloqueo si cada proceso en el conjunto está esperando un evento que solo puede ser ocasionado por otro proceso del conjunto.

Page 9: Ensayo problemas de la concurrencia.docx

Detección de interbloqueos con un recurso de cada tipo.

Para comprender mejor este concepto vamos a proponer un caso simple: un sistema en el que solo exista un recurso de cada tipo. Este sistema podría tener un escáner, un grabador de CD, un trazador, y una unidad de cinta, entendiendo que solo tenemos un recurso por cada clase.

Page 10: Ensayo problemas de la concurrencia.docx

Para un sistema así, podemos utilizar el gráfico de al lado. Si este gráfico contiene uno o más ciclos, existe un interbloqueo. Cualquier proceso que forme parte de un ciclo está en interbloqueo. Si no existen ciclos, el sistema no está en interbloqueo.

Un ejemplo más complejo

Tenemos un sistema con siete procesos, A a G, y seis recursos, R a W. El estado del sistema se describe a continuación.

1. El proceso A contiene al recurso R y quiere al recurso S.

2. El proceso B no contiene ningún recurso pero quiere al recurso T.

3. El proceso C no contiene ningún recurso pero quiere al recurso S.

4. El proceso D contiene al recurso U y quiere al recurso S y al recurso T.

5. El proceso E contiene al recurso T y quiere al recurso V.

6. El proceso F contiene al recurso F y quiere al recurso S.

7. El proceso G contiene al recurso V y quiere al recurso U.

Algoritmo

Page 11: Ensayo problemas de la concurrencia.docx

A continuación se describe un algoritmo simple que inspecciona un gráfico y termina al haber encontrado un ciclo, o cuando ha demostrado que no existe ninguno. Se utiliza una lista L, utilizada para guardar los nodos, y una lista de arcos.

1. Para cada nodo N en el gráfico, realizar los siguientes cinco pasos con N como el nodo principal.

2. Inicializar L con la lista vacía y designar todos los arcos como desmarcados.

3. Agregar el nodo actual al final de L y comprobar si el nodo aparece dos veces en L. Si lo hace, el gráfico contiene un ciclo y el algoritmo termina.

4. Del nodo dado, ver si hay arcos salientes desmarcados. De ser así, ir al paso 5; en caso contrario, ir al paso 6.

5. Elegir un arco saliente desmarcado y marcarlo. Después seguirlo hasta el nuevo nodo actual e ir al paso 3.

6. Si este nodo es el inicial, el gráfico no contiene ciclos y el algoritmo termina. En caso contrario, ahora hemos llegado a un punto muerto. Eliminarlo y regresar al nodo anterior; es decir, el que estaba justo antes de éste, hacerlo el nodo actual e ir al paso 3.

Detección de interbloqueo con varios recursos de cada tipo.

Presentaremos un algoritmo basado en matrices para detectar interbloqueos entre n procesos, de P1 a Pn.

- Hagamos m el número de clases de recursos, con E1 recursos de la clase 1, y en general, Ei recursos de la clase i(1 <= i <= m).

- E es el vector de recursos existentes.

- A será el vector de recursos disponibles.

- Necesitamos dos matrices, C la matriz de asignaciones actuales y R, la matriz de peticiones.

- Cij es el número de instancias del recurso j que están contenidas por el proceso i. Rij es el número de instancias del recurso j que desea Pi.

Page 12: Ensayo problemas de la concurrencia.docx

Algoritmo

A medida que el algoritmo progrese se marcarán los procesos, indicando que pueden completarse y, por ende, no están en interbloqueo. Cuando el algoritmo termine, cualquier proceso desmarcado está en interbloqueo.

1. Buscar un proceso desmarcado, Pi, para el que la i-ésima fila de R sea menor o igual que A.

2. Si se encuentra dicho proceso, agregar la i-ésima fila de C a A, marcar el proceso y regresar al paso 1.

3. Si no existe dicho proceso, el algoritmo termina.

Recuperación de Interbloqueos

- Un sistema que pretenda recuperarse del interbloqueo, debe invocar a un algoritmo de detección cuando lo considere oportuno (ej. periódicamente)

- Formas de intentar la recuperación: Terminación de procesos, Expropiación de recursos.

Terminación de procesos

- Matando a todos los procesos implicados (drástico) - Matando a uno de los procesos ¿cuál? el que más recursos libere,

el que menos tiempo lleve en ejecución.

Page 13: Ensayo problemas de la concurrencia.docx

- Retrocediendo la ejecución de algún proceso (rollback), muy complicado de implementar y necesita que el programa esté diseñado para que pueda retroceder.

Expropiación de recursos

- Selección de la víctima - ¿Qué recursos y de que procesos se expropian?

Retroceso

- Si expropiamos un recurso de un proceso, ¿qué hacemos con ese proceso?

- En ambos casos (terminación de procesos o expropiación de recursos) hay que tener cuidado de no provocar la inanición de procesos.

Hay tres tipos de soluciones:

- Prevención: intentan prevenir que aparezca un interbloqueo negando una de las tres condiciones.

- Predicción: hace un reparto cuidadoso de los recursos, intentando predecir cuándo se puede producir un interbloqueo. Intenta que no se dé la cuarta condición.

- Detección y recuperación: permiten el interbloqueo pero periódicamente comprueba el sistema. Si existe interbloqueo, recupera el sistema.

- Las dos primeras utilizan un protocolo que asegura que no se produzca interbloqueos. La tercera, deja que se produzca el interbloqueo, detectarlo y recuperar el sistema. No hacer nada.

CONCLUSION

Page 14: Ensayo problemas de la concurrencia.docx

La programación concurrente ayuda a hacer eficientes los procesos, la atención a estos y así tener programas que funcionen de manera óptima, más rápidos y generen mejores resultados, mas sin embargo estos beneficios tienen un precio y este es la posibilidad de generar conflictos dentro del funcionamiento del sistema pues si las solicitud de recursos no sigue ciertos lineamientos se pueden producir errores que lejos de ayudar perjudiquen el funcionamiento del sistema, tales son los interbloqueos, por ello es muy importante implementar algoritmos que eviten la aparición de interbloqueos