Exclusion Sincronizacion

download Exclusion Sincronizacion

of 46

Transcript of Exclusion Sincronizacion

Unidad 2: Gestin de ProcesosTema 6, Concurrencia: Exclusin mutua y sincronizacin.6.1 Principios generales de concurrencia. 6.2 EM: Soluciones software (Algoritmos de Dekker y Peterson). 6.3 EM: Soluciones hardware. 6.4 Semforos (Problema del Productor / Consumidor).Escuela Universitaria de Informtica (Segovia) 1

6.1 Principios generales de concurrencia.Conceptos generales:Concurrencia: Existencia simultnea de varios procesos en ejecucin. IMPORTANTE: EXISTENCIA SIMULTNEA NO IMPLICA EJECUCIN SIMULTNEA. Paralelismo: Caso particular de concurrencia. Necesidad de sincronizacin y comunicacin. Comunicacin: Necesidad de transmisin de informacin entre procesos concurrentes. Sincronizacin: Necesidad de que las ejecuciones de los procesos concurrentes se produzcan segn una secuenciacin temporal, conocida y establecida entre los propios procesos.Escuela Universitaria de Informtica (Segovia)

2

6.1 Principios generales de concurrencia.Cooperacin entre procesos:Dos tcnicas de operacin: Sistemas multiprogramados con un solo procesador: los procesos se intercalan en el tiempo para dar la apariencia de ejecucin simultnea. Sistemas multiprocesador: adems de intercalarse los procesos se superponen.

Estas tcnicas son ejemplos de procesamiento concurrente y plantean varios problemas: 1. Compartir recursos globales conlleva riesgos. Debemos de ser muy cuidadosos en el orden en que dos procesos modifican independientemente el valor de una variable global que ambos usan. 2. Gestionar la asignacin ptima de recursos. Debemos de impedir que se produzcan situaciones de interbloqueo. 3. Localizar errores de programacin. Escuela Universitaria de Informtica (Segovia) 3

6.1 Principios generales de concurrencia.Cooperacin entre procesos:Veamos un ejemplo sencillo de un procedimiento compartido por varios procesos del mismo usuario: void echo(){ ent = getchar(); sal = ent; putchar(sal); } Implementa la funcin de entrada de un carcter desde teclado. Cada carcter de entrada se almacena en la variable ent, despus se transfiere a la variable sal y se enva a la pantalla. Este procedimiento se comparte por varios procesos del mismo usuario de un sistema monoprocesador, para leer caracteres de teclado y visualizarlos por pantalla. Escuela Universitaria de Informtica (Segovia)

4

6.1 Principios generales de concurrencia.Cooperacin entre procesos:Esta comparticin de cdigo permite la interaccin entre procesos pero puede dar lugar a problemas, tales como aparecen en la secuencia:/*Proceso P1*/ ... ent = getchar(); ... sal = ent; putchar(sal); ... ... /*Proceso P2*/ ... ... ent = getchar (); sal = ent; ... putchar(sal); ...Escuela Universitaria de Informtica (Segovia)

5

6.1 Principios generales de concurrencia.Cooperacin entre procesos:P1 llama a echo() y es interrumpido inmediatamente despus de leer la entrada. P2 se activa y llama a echo() y lo ejecuta hasta el final mostrando el carcter ledo en la pantalla. P1 se reanuda donde lo dej, sin embargo ent contiene un valor diferente al tecleado originalmente, que se transfiere a la variable sal y se visualiza. Resultado: Se pierde el primer carcter y el segundo se visualiza dos veces.Escuela Universitaria de Informtica (Segovia) 6

6.1 Principios generales de concurrencia.Cooperacin entre procesos:El problema es que a las variables ent y sal tienen acceso todos los procesos que llaman al procedimiento echo(). Impongamos la restriccin de que aunque echo sea un procedimiento global slo puede estar ejecutndolo un proceso cada vez. La secuencia anterior queda ahora: P1 llama a echo() y es interrumpido inmediatamente despus de leer la entrada. P2 se activa y llama a echo(). Como P1 estaba usando echo(), P2 se bloquea al entrar al procedimiento y se le suspende mientras espera que quede libre echo(). P1 se reanuda y completa la ejecucin de echo(). Se visualiza el carcter correcto. Cuando P1 abandona echo() se retira el bloqueo sobre P2. Cuando ms tarde se reanude P2 la llamada a echo() se ejecutar con xito. Escuela Universitaria de Informtica (Segovia)

7

6.1 Principios generales de concurrencia.Labores del sistema operativo:1. Seguir la pista de los distintos procesos activos. 2. Asignar y retirar los recursos: Tiempo de procesador. Memoria. Archivos. Dispositivos de E/S. 3. Proteger los datos y los recursos fsicos. 4. Resultados de un proceso independientes de la velocidad relativa a la que se realiza la ejecucin de procesos concurrentes.

Escuela Universitaria de Informtica (Segovia)

8

6.1 Principios generales de concurrencia.Interaccin entre procesos:La interaccin entre procesos se clasifica de acuerdo al nivel de conocimiento que cada proceso tiene de los dems: Los procesos no tienen conocimiento de la existencia de los dems: Independientes, no van a operar juntos, entre ellos se establece una competencia por los recursos (disco, archivos, impresora, ...). Los procesos tienen un conocimiento indirecto de los otros: No se conocen especficamente unos a otros pero comparten el acceso a algunos objetos como el buffer de E/S. Relacin de cooperacin para compartir. Los procesos tienen un conocimiento directo de los otros: Diseados para cooperar trabajando en conjunto en alguna actividad y comunicndose entre ellos.Escuela Universitaria de Informtica (Segovia) 9

6.1 Principios generales de concurrencia.Competencia entre procesos por los recursos:Exclusin mutua: Para que el acceso a ciertos recursos sea exclusivo de un proceso cada vez. A la parte del programa que los utiliza se le llama seccin crtica. Seccin crtica: Cada proceso tiene un segmento de cdigo llamado seccin crtica. No est permitido que ms de un proceso estn simultneamente en su seccin crtica. Un protocolo rige la forma de entrar y salir de la seccin crtica.

Escuela Universitaria de Informtica (Segovia)

10

6.1 Principios generales de concurrencia.Interbloqueo e inanicin:Hacer que se cumpla la exclusin mutua puede dar lugar a dos problemas adicionales: Interbloqueo: Considera dos procesos y dos recursos. Supn que cada proceso necesita acceder a ambos recursos para llevar a cabo una parte de su funcin. Puede suceder que el sistema operativo asigne R1 a P1 y R2 a P2. Cada proceso est esperando uno de los dos recursos. Ninguno liberar el recurso que posee hasta que adquiera el otro y realice su tarea. Inanicin: Supn tres procesos que acceden peridicamente a un recurso. Considera que P1 posee el recurso y que P2 y P3 estn esperando. Cuando P1 haya ejecutado su seccin crtica tanto P2 como P3 podrn solicitar el recurso. Supn que le le concede el acceso a P3 y que, antes de que termine su seccin crtica, P1 solicita acceso de nuevo y as sucesivamente, se puede llegar a una situacin en la que P2 nunca accede al recurso. Escuela Universitaria de Informtica (Segovia) 11

6.1 Principios generales de concurrencia.El problema de la seccin crtica:Cualquier solucin al problema de la seccin crtica debe satisfacer los tres requisitos: Exclusin Mutua: Slo un proceso ejecuta simultneamente su seccin crtica. Progreso: Cuando ningn proceso ejecuta su seccin crtica, algn proceso que lo solicite podr entrar utilizando un protocolo, que impida la entrada simultnea de varios. La decisin de quin entra no se puede posponer indefinidamente. Espera limitada: Ningn proceso debe esperar ilimitadamente la entrada en la seccin crtica.

Escuela Universitaria de Informtica (Segovia)

12

6.1 Principios generales de concurrencia.Requisitos para la Exclusin Mutua:Cualquier solucin que de soporte a la EM debe de cumplir los requisitos: 1. Slo un proceso debe tener permiso para entrar en la seccin crtica por un recurso en un instante dado. 2. Un proceso que se interrumpe en una seccin no crtica debe hacerlo sin interferir con los otros procesos. 3. No pueden permitirse el interbloqueo o la inanicin. 4. Cuando ningn proceso est en su seccin crtica, cualquier proceso que solicite entrar en la suya debe poder hacerlo sin dilacin. 5. No hacer suposiciones sobre la velocidad relativa de los procesos o el nmero de procesadores. 6. Un proceso permanece en su seccin crtica slo por un tiempo finito.

Escuela Universitaria de Informtica (Segovia)

13

6.1 Principios generales de concurrencia.Requisitos para la Exclusin Mutua:Hay tres categoras de soluciones para implementar la Exclusin Mutua: Soluciones por software en los procesos. Soluciones por hardware. Soluciones por software en el sistema operativo.

La estructura general de cualquier mecanismo para implementar la seccin crtica es la siguiente:entrada de la seccin crtica; cdigo (programa) de la seccin crtica; salida de la seccin crtica;

Escuela Universitaria de Informtica (Segovia)

14

6.2 Exclusin Mutua: Soluciones software.Algoritmo de Dekker (alternancia estricta):Idea de partida: No se puede acceder simultneamente (desde varios procesadores) a ninguna localidad de memoria. Espera activa: Se utiliza una variable global turno para controlar la entrada en la seccin crtica. Cualquier proceso que desee entrar en su seccin crtica comprobar primero el valor de la variable turno: Mientras sea distinto al de su identificador de proceso debe esperar. Cuando coincida entrar en la seccin crtica.

Cuando un proceso sale de la seccin crtica, actualiza turno con el cdigo de otro proceso en espera.Escuela Universitaria de Informtica (Segovia) 15

6.2 Exclusin Mutua: Soluciones software.Algoritmo de Dekker (1er intento):Proceso 0 ... /*esperar*/ while (turno!=0); /*seccin crtica*/ ... turno=1; ... Proceso 1 ... /*esperar*/ while (turno!=1); /*seccin crtica*/ ... turno=0; ...

Diseados para poder pasar el control de ejecucin entre ellos, no es una tcnica apropiada para dar soporte al procesamiento concurrente. Cuando hay diferencias grandes de velocidad es el proceso ms lento el que marca el ritmo.Escuela Universitaria de Informtica (Segovia) 16

6.2 Exclusin Mutua: Soluciones software.Algoritmo de Dekker (2 intento):Verifico la seccin crtica del otro proceso y coloco una seal al entrar y salir en su seccin crtica:Proceso 0 ... /*esperar*/ while (seal[1]); seal[0] = cierto; /*seccin crtica*/ ... seal[0] = falso; ... Proceso 1 ... /*esperar*/ while (seal[0]); seal[1]=cierto; /*seccin crtica*/ ... seal[1] = falso; ...

Escuela Universitaria de Informtica (Segovia)

17

6.2 Exclusin Mutua: Soluciones software.Algoritmo de Dekker (2 intento):Se solucionan los problemas anteriores, sin embargo, ahora surgen otros nuevos: Si uno de los procesos falla dentro de su seccin crtica el otro quedar bloqueado permanentemente. No se garantiza la Exclusin Mutua como vemos en la secuencia: 1. P0 ejecuta el while y encuentra seal[1] a falso. 2. P1 ejecuta el while y encuentra seal[0] a falso. 3. P0 pone seal[0] a cierto y entra en su seccin crtica. 4. P1 pone seal[1] a cierto y entra en su seccin crtica.

Ambos procesos estn en su seccin crtica, esto se debe a que esta solucin no es independiente de la velocidad de ejecucin relativa de los procesos.Escuela Universitaria de Informtica (Segovia)

18

6.2 Exclusin Mutua: Soluciones software.Algoritmo de Dekker (3er intento):Proceso 0 ... seal[0] = cierto; /*esperar*/ while (seal[1]); /*seccin crtica*/ ... seal[0] = falso; ... Proceso 1 ... seal[1]=cierto; /*esperar*/ while (seal[0]); /*seccin crtica*/ ... seal[1] = falso; ...

Una vez que un proceso ha puesto su seal en cierto, el otro no puede entrar a su seccin crtica hasta que el primero salga de ella. Se garantiza la EM, sin embargo, se generar interbloqueo si ambos procesos ponen su seal a cierto antes de ambos hayan ejecutado el while. Adems, si un proceso falla en su seccin crtica, el otro queda bloqueado permanentemente. Escuela Universitaria de Informtica (Segovia) 19

6.2 Exclusin Mutua: Soluciones software.Algoritmo de Dekker (4 intento):El interbloqueo se haba originado porque cada proceso estableca su seal sin conocer el estado del otro proceso. Para solucionarlo haremos que los procesos activen y desactiven su seal:Proceso 0 Proceso 1 ... ... seal[0] = cierto; seal[1]=cierto; /*esperar*/ /*esperar*/ while (seal[1]){ while (seal[0]){ seal[0]=falso; seal[1]=falso; /*retardo*/ /*retardo*/ seal[0]=cierto; seal[1]=cierto; } } /*seccin crtica*/ /*seccin crtica*/ ... ... seal[0] = falso; seal[1] = falso; ... ... Escuela Universitaria de Informtica (Segovia)

20

6.2 Exclusin Mutua: Soluciones software.Algoritmo de Dekker (4 intento):Esta solucin garantiza la EM y practicamente evita el IB, aunque podra darse la secuencia: P0 P1 P0 P1 P0 P1 P0 P1 pone seal[0] a cierto. pone seal[1] a cierto. comprueba seal[1]. comprueba seal[0]. pone seal[0] a falso. pone seal[1] a falso. pone seal[0] a cierto. pone seal[1] a cierto.

Esta situacin de bloqueo puede prolongarse mucho tiempo.Escuela Universitaria de Informtica (Segovia) 21

6.2 Exclusin Mutua: Soluciones software.Algoritmo de Dekker (solucin final):Combinacin entre: Primer intento, donde se usa la variable turno (ahora usamos turno para indicar quien tiene prioridad para entrar a su seccin crtica). Cuarto intento.

Funcionamiento: Cuando P0 quiere entrar en su seccin crtica pone seal[0]=cierto; y comprueba la seal de P1. Si est a falso, entra inmediatamente. Si est a cierto, consulta turno: Si turno==0; sigue verficando la seal de P1. Si turno==1; desactiva su seal y espera hasta que turno==0; Escuela Universitaria de Informtica (Segovia)

22

6.2 Exclusin Mutua: Soluciones software.Algoritmo de Dekker (Solucin Final):Proceso 0 ... seal[0] = cierto; while (seal[1]) if (turno==1){ seal[0]=falso; while (turno==1); /*esperar*/ seal[0]=cierto; } /*seccin crtica*/ turno=1; seal[0] = falso; ... Proceso 1 ... seal[1]=cierto; while (seal[0]) if (turno==0){ seal[1]=falso; while (turno==0); /*esperar*/ seal[1]=cierto; } /*seccin crtica*/ turno=0; seal[1] = falso; ...

Escuela Universitaria de Informtica (Segovia)

23

6.2 Exclusin Mutua: Soluciones software.Algoritmo de Peterson:Ms simple que el de Dekker, garantiza la exclusin mutua: Cada proceso tiene un turno para entrar en la seccin crtica. Si un proceso desea entrar en la seccin crtica, debe activar su seal y puede que tenga que esperar a que llegue su turno.

Impide el interbloqueo ya que si un proceso se encuentra esperando en el while, entonces la seal y el turno del otro proceso estn activadas. El proceso que est esperando entrar en su seccin crtica cuando la seal o el turno del otro se desactiven.Escuela Universitaria de Informtica (Segovia)

24

6.2 Exclusin Mutua: Soluciones software.Algoritmo de Peterson:Proceso 0 ... while(cierto){ seal[0] = cierto; turno=1; while (seal[1]&&turno==1); /*esperar*/ /*seccin crtica*/ seal[0]=falso; ... } Proceso 1 ... while(cierto){ seal[1]=cierto; turno=0; while (seal[0]&&turno==0); /*esperar*/ /*seccin crtica*/ seal[1]=falso; ... }

Escuela Universitaria de Informtica (Segovia)

25

6.3 Exclusin Mutua: Soluciones hardware.Inhabilitacin de interrupciones:Un servicio continuar ejecutndose hasta que solicite un servicio del SO o hasta que sea interrumpido. Para garantizar la EM es suficiente con impedir que un proceso sea interrumpido. Se limita la capacidad del procesador para intercalar programas. Multiprocesador: Inhabilitar las interrupciones de un procesador no garantiza la Exclusin Mutua.

Escuela Universitaria de Informtica (Segovia)

26

6.3 Exclusin Mutua: Soluciones hardware.Instrucciones especiales de mquina:Se realizan en un nico ciclo de instruccin. No estn sujetas a injerencias por parte de otras instrucciones. Ejemplos:Instruccin Comparar y Fijar: booleano TS (int i){ if(i==0){ i=1; return cierto; } else{ return falso; } } Instruccin Intercambiar: void intercambiar(int registro, int memoria){ int temp; temp=memoria; memoria=registro; registro=temp; }

Escuela Universitaria de Informtica (Segovia)

27

6.3 Exclusin Mutua: Soluciones hardware.Instrucciones de mquina y exclusin mutua:Ventajas: Es aplicable a cualquier n de procesos en sistemas con memoria compartida, tanto de monoprocesador como de multiprocesador. Es simple y fcil de verificar. Puede usarse para disponer de varias secciones crticas.

Desventajas: La espera activa consume tiempo del procesador. Puede producirse inanicin cuando un proceso abandona la seccin crtica y hay ms de un proceso esperando. Interbloqueo: de procesos de baja prioridad frente a otros de prioridad mayor.Escuela Universitaria de Informtica (Segovia) 28

6.4 Semforos.Introduccin:Mecanismo frente a problemas de concurrencia. Funcionamiento basado en la cooperacin entre procesos. Uso de seales, podemos obligar a un proceso a detenerse hasta que reciba una seal. Para esta sealizacin se usan unas variables especiales llamadas semforos: Para transmitir una seal por el semforo s, los procesos ejecutan la primitiva signal(s). Para recibir una seal del semforo s, los procesos ejecutan la primitiva wait(s). Si la seal an no se ha emitido, el proceso es suspendido hasta que se emite la seal.Escuela Universitaria de Informtica (Segovia)

29

6.4 Semforos.Introduccin:Los semforos se pueden considerar variables enteras sobre las que se definen las siguientes operaciones: Un semforo puede iniciarse con un valor no negativo. La operacin wait() reduce el valor del semforo. Si el valor se hace negativo, el proceso que la ejecuta se bloquea. La operacin signal() incrementa el valor del semforo. Si el valor no es positivo, se desbloquea un proceso.

Escuela Universitaria de Informtica (Segovia)

30

6.4 Semforos.Semforos:struct semaforo{ int contador; tipoCola cola; } void wait(semaforo s){ s.contador--; if(s.contador