teorica_sincro2

22
Sincronizaci´ on entre procesos Problemas cl´ asicos Rodolfo Baader Departamento de Computaci´on, FCEyN, Universidad de Buenos Aires, Buenos Aires, Argentina Sistemas Operativos, segundo cuatrimestre de 2012 Rodolfo Baader Problemas cl´ asicos de sincronizaci´on entre procesos

description

concurrencia

Transcript of teorica_sincro2

  • Sincronizacion entre procesosProblemas clasicos

    Rodolfo Baader

    Departamento de Computacion, FCEyN,Universidad de Buenos Aires, Buenos Aires, Argentina

    Sistemas Operativos, segundo cuatrimestre de 2012

    Rodolfo Baader Problemas clasicos de sincronizacion entre procesos

  • (2) Siempre los mismos problemas...

    En muchas areas de la computacion hay problemas clasicos.Eso significa que aparecen una y otra vez bajo diferentesformas, pero son basicamente el mismo problema.En el caso de sincronizacion entre procesos tambien sucedeque muchos de estos problemas nos suelen inducir a pensar ensoluciones incorrectas.Por eso esta bueno estudiarlos y conocer buenas formas desolucionarlos.Ademas, analizarlos suele aportar una mirada bastanteprofunda sobre problemas fundamentales de la computacion, ya veces, del razonamiento humano.OJO: conocer los problemas clasicos y sus soluciones no debeser una excusa para la pereza. Los problemas concretos tienenparticularidades y contextos que hacen necesario evaluarlos de

    manera individual y pensar en cada caso.!Dicho de otra forma, el conocimiento no reemplaza a lainteligencia. Ambos se complementan.

    Rodolfo Baader Problemas clasicos de sincronizacion entre procesos

  • (3) Los turnos

    Problema:

    Tenemos una serie de procesos Pi , i {1 . . . N} que se estanejecutando en simultaneo (supongamos que tenemos N CPUs).Cada proceso i tiene una sentencia si .Queremos que en el sistema global se ejecuten s1, s2, . . . , sN.

    De que nos disfrazamos?

    Podemos utilizar semaforos.

    Rodolfo Baader Problemas clasicos de sincronizacion entre procesos

  • (4) Los turnos (cont.)

    Listing 1: Inicializacionp ro c i n i t ( ){f o r ( i= 0 ; i

  • (5) Barrera - Rendezvous

    Otro problema muy comun es el de rendezvous (punto deencuentro), o barrera de sincronizacion.

    Dados Pi = [a(i); b(i)], i {1 . . . N}, asegurarse que los b(i)se ejecuten recien despues de que se ejecutaron todos los a(i).

    Es decir, queremos poner una barrera entre los a y los b.

    Sin embargo, no hay que restringir de mas: no hay queimponer ningun orden entre los a(i) ni entre los b(i).

    Rodolfo Baader Problemas clasicos de sincronizacion entre procesos

  • (6) Rendezvous (cont.)

    Listing 3: Inicializacionp ro c i n i t ( ){

    e n b a r r e r a= 0 ; // Cant . de p r o c s en l a b a r r e r a .mutex= new Semaforo ( 1 ) ; // Permito empezar de i n m e d i a t o .b a r r e r a= new Semaforo ( 0 ) ;

    f o r ( i= 0 ; i

  • (7) Rendezvous (cont.)

    Listing 4: Proceso Pip ro c P( i ){

    a ( i ) ;

    mutex . w a i t ( ) ; // Acceso a v a r . c o m p a r t i d a .e n b a r r e r a ++;b o o l t o d o s e n b a r r e r a= ( e n b a r r e r a==N ) ;mutex . s i g n a l ( ) ;

    i f ( t o d o s e n b a r r e r a )// Todos e s t a n l i s t o s para c o n t i n u a r . Que s i g a n .b a r r e r a . s i g n a l ( ) ;

    b a r r e r a . w a i t ( ) ;

    b ( i ) ;}

    Esta solucion no es correcta.

    Que esta mal?

    Rodolfo Baader Problemas clasicos de sincronizacion entre procesos

  • (8) Rendezvous (cont.)

    En el ejemplo anterior haba deadlock.!Listing 5: Proceso Pi (correcto)

    p ro c P( i ){

    a ( i ) ;

    mutex . w a i t ( ) ; // Acceso a v a r . c o m p a r t i d a .e n b a r r e r a ++;b o o l t o d o s e n b a r r e r a= ( e n b a r r e r a==N ) ;mutex . s i g n a l ( ) ;

    i f ( t o d o s e n b a r r e r a )// Todos e s t a n l i s t o s para c o n t i n u a r . Que s i g a n .b a r r e r a . s i g n a l ( ) ;

    b a r r e r a . w a i t ( ) ;b a r r e r a . s i g n a l ( ) ;

    b ( i ) ;}

    Notar que hay un signal() de mas.

    Rodolfo Baader Problemas clasicos de sincronizacion entre procesos

  • (9) Rendezvous (cont.)

    Otra solucion, si contamos con la primitiva broadcast().

    Listing 6: Proceso Pi (correcto)p ro c P( i ){

    a ( i ) ;

    mutex . w a i t ( ) ; // Acceso a v a r . c o m p a r t i d a .e n b a r r e r a ++;b o o l t o d o s e n b a r r e r a= ( e n b a r r e r a==N ) ;mutex . s i g n a l ( ) ;

    i f ( t o d o s e n b a r r e r a )// Todos e s t a n l i s t o s para c o n t i n u a r . Que s i g a n .b a r r e r a . b r o a d c a s t ( ) ;

    e l s eb a r r e r a . w a i t ( ) ;

    b ( i ) ;}

    Rodolfo Baader Problemas clasicos de sincronizacion entre procesos

  • (10) Seccion crtica de a k

    Siguiente problema. N procesos, solo k ejecutan a la vez laseccion crtica sc(i).

    Es facil:

    Listing 7: Inicializacionp ro c i n i t ( ){

    sem= new Semaforo ( k ) ;

    f o r ( i= 0 ; i

  • (11) Apareamiento

    Vamos a presentar una version no clasica de un problemaclasico.

    Esta el Crucero de Noel, donde queremos guardar parejas dedistintas especies (no solo una por especie).

    Hay una puerta por cada especie.

    Los animales forman fila en cada puerta, en dos colas, una porsexo.

    Queremos que entren en parejas.

    Tarea: programar el codigo de cada proceso P(i, sexo). Pista:usar dos semaforos y la funcion entrar(i).

    Tarea adicional: una unica puerta, pero tiene que coincidir laespecie. Ojo con el deadlock!

    Rodolfo Baader Problemas clasicos de sincronizacion entre procesos

  • (12) Lectores/escritores

    Otro problema mas. Se da mucho en bases de datos.

    Hay una variable compartida.

    Los escritores necesitan acceso exclusivo.

    Pero los lectores pueden convivir.

    Como podra solucionarse?

    Rodolfo Baader Problemas clasicos de sincronizacion entre procesos

  • (13) Lectores/escritores (cont.)

    Listing 9: Inicializacionp ro c i n i t ( ){

    v a r i a b l e c o m p a r t i d a ; // Es ta e s l a que t o d o s s e d i s p u t a n .mutex= new Semaforo ( 1 ) ;a c c e s o e x c l u s i v o= new Semaforo ( 1 ) ;i n t l e c t o r e s= 0 ;

    f o r ( i= 0 ; i

  • (14) Lectores/escritores (cont.)

    Listing 11: Lectoresp ro c L e c t o r ( i ){

    mutex . w a i t ( ) ;l e c t o r e s ++;i f ( l e c t o r e s ==1)

    // Soy e l pr imero , r e c la mo a c c e s o e x c l u s i v o para// t o d o s l o s l e c t o r e s .a c c e s o e x c l u s i v o . w a i t ( ) ;

    mutex . s i g n a l ( ) ;

    L e e r ( c o m p a r t i d a ) ;

    mutex . w a i t ( ) ;l e c t o r e s ;i f ( l e c t o r e s ==0)

    // Soy e l u l t imo , d e j o que e n t r e n l o s e s c r i t o r e s .a c c e s o e x c l u s i v o . s i g n a l ( ) ;

    mutex . s i g n a l ( ) ;}

    Rodolfo Baader Problemas clasicos de sincronizacion entre procesos

  • (15) Lectores/escritores (cont.)

    Puede haber deadlock?

    No, pero puede haber inanicion de escritores.

    Tarea: pensar como evitarlo.

    Rodolfo Baader Problemas clasicos de sincronizacion entre procesos

  • (16) Filosofos que cenan

    Este problema lo invento Dijkstra en 1965.

    Tenemos 5 filosofos en una mesa circular, con fideos en elmedio y un tenedor entre cada filosofo. Para comer necesitandos tenedores.

    Los filosofos hacen:p ro c F i l o s o f o ( i )wh i l e ( t r u e ){

    p e n s a r ( ) ;c o n s e g u i r t e n e d o r e s ( i ) ;comer ( ) ;d e j a r t e n e d o r e s ( i ) ;}

    Problema: programar conseguir tenedores() ydejar tenedores() de manera tal que:

    EXCL) Solo un filosofo tenga cada tenedor en cada momento.DEAD) No haya deadlock.INAN) No haya inanicion.

    CONC) Mas de un filosofo este comiendo a la vez.

    Rodolfo Baader Problemas clasicos de sincronizacion entre procesos

  • (17) Filosofos que cenan

    Empecemos por algunas definiciones basicas:

    Macros comodas para los tenedores:

    izq(i) = ider(i) = (i + 1) mod 5

    Que son los tenedores?

    Seguro que hay que garantizar acceso exclusivo a ellos:

    Un arreglo: tenedores[i]= new Semaforo(1)

    Rodolfo Baader Problemas clasicos de sincronizacion entre procesos

  • (18) Solucion ingenua

    Empecemos por la idea mas elemental:

    f u n c c o n s e g u i r t e n e d o r e s ( i ){

    t e n e d o r e s [ i z q ( i ) ] . w a i t ( ) ;t e n e d o r e s [ d e r ( i ) ] . w a i t ( ) ;}

    f u n c d e j a r t e n e d o r e s ( i ){

    t e n e d o r e s [ i z q ( i ) ] . s i g n a l ( ) ;t e n e d o r e s [ d e r ( i ) ] . s i g n a l ( ) ;}

    Esta bien?

    Esta solucion garantiza EXCL, pero falla con DEAD.

    Como rompemos el deadlock? Pensemos en las condiciones.

    Tarea: pensar en soluciones para este problema. Buscar las yaexistentes.

    Rodolfo Baader Problemas clasicos de sincronizacion entre procesos

  • (19) Barbero

    Otro problema clasico:

    En una peluquera hay dos salas, una de espera, con n sillas yotra donde esta la unica silla donde el unico peluquero corta elpelo.

    Si no hay clientes, el peluquero se duerme una siesta.

    Si entra un cliente, y no se puede sentar a esperar, se va.

    Si el peluquero esta dormido, lo despierta.

    Rodolfo Baader Problemas clasicos de sincronizacion entre procesos

  • (20) Barbero (cont.)

    Vamos a usar tres semaforos:

    a l g u n c l i e n t e= new Semaforo ( 0 ) ;p a s a r= new Semaforo ( 0 ) ;mutex= new Semaforo ( 1 ) ;c l i e n t e s= 0 ;

    El peluquero es sencillo:

    p ro c P e l u q u e r owh i l e ( t r u e ){

    a l g u n c l i e n t e . w a i t ( ) ;p a s a r . s i g n a l ( ) ;c o r t a r p e l o ( ) ;}

    Rodolfo Baader Problemas clasicos de sincronizacion entre procesos

  • (21) Barbero (cont.)

    Veamos a los clientes:p ro c C l i e n t e ( )

    // Hay l u g a r ? Capac idad = n + 1 ( a l que l e c o r t a n )mutex . w a i t ( ) ;i f ( c l i e n t e s==n+1)

    // No , me voy .mutex . s i g n a l ( ) ;r e t i r a r s e ( ) ; // No v u e l v e

    // S hay l u g a r , e n t r o .c l i e n t e s ++;mutex . s i g n a l ( ) ;

    // A v i s o que l l e g u e .a l g u n c l i e n t e . s i g n a l ( ) ;// Espero a que me d e j e n p a s a r .p a s a r . w a i t ( ) ;

    e n t r a r a c o r t a r s e e l p e l o ( ) ; // Todo para e s t o !

    // S a l g o .mutex . w a i t ( ) ;c l i e n t e s ;mutex . s i g n a l ( ) ;

    Rodolfo Baader Problemas clasicos de sincronizacion entre procesos

  • (22) Bibliografa

    The Little Book of Semaphores, Second Edition. Allen B.Downey. http://greenteapress.com/semaphores/

    Cooperating sequential processes. Edgar W. Dijkstra.Technical Report 123, Univ. Texas. http://www.cs.utexas.edu/users/EWD/transcriptions/EWD01xx/EWD123.html.

    Rodolfo Baader Problemas clasicos de sincronizacion entre procesos