sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...sistemas operativos...
TRANSCRIPT
![Page 2: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/2.jpg)
• Introducción
• Problema de sección crítica
• Hardware de sincronización
• Semáforos
• Problemas clásicos de sincronización
• Regiones críticas
• Monitores
Presentación
![Page 3: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/3.jpg)
• Problemas con procesos cooperativos puede establecerse a través de hilos o procesos pesados
• El problema productor-consumidor puede no ejecutarse correctamente
Problema: variables compartidas
Introducción
![Page 4: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/4.jpg)
• Región de código que hace referencia, o accesa, a variables compartidas
• n procesos compiten por utilizar datos compartidos
• La sección crítica DEBE ser mútuamente excluyente
• Un proceso debe solicitar permiso para ingresar a la sección crítica
Problema de sección crítica
![Page 5: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/5.jpg)
• La solución a la sección crítica debe cumplir:
• Exclusión mutua
• Progreso
• Espera limitada
Problema de sección crítica
while(TRUE){
sección de ingreso sección crítica sección de salida sección restante }
![Page 6: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/6.jpg)
Problema de sección críticaSoluciones para dos procesos
Algoritmo 1
while(TRUE){
while (turno != i) ; sección crítica
turno = j;
sección restante
}
![Page 7: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/7.jpg)
Problema de sección críticaSoluciones para dos procesos
Algoritmo 2
int indicador[2]; indicador[0]=indicador[1]=FALSE;while(TRUE){ indicador[i]=TRUE; while (indicador[j]) ; sección crítica
indicador[i]=FALSE;
sección restante
}
![Page 8: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/8.jpg)
Problema de sección críticaSoluciones para dos procesos
Algoritmo 3
int indicador[2]; while(TRUE){ indicador[i]=TRUE; turno=j; while (indicador[j] && turno==j) ; sección crítica
indicador[i]=FALSE;
sección restante }
![Page 9: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/9.jpg)
Problema de sección críticaSoluciones para múltiples procesos
Algoritmo 4: (bakery Algorithm)
int numero[N]; // inicializado a 0BOOL turno[N]; // inicializado a FALSEwhile(TRUE){ turno[i]=TRUE; numero[i]=MAX(numero,N)+1; turno[i]=FALSE; for (j=0; j<N; j++) { while(turno[j]==TRUE); while(numero[j]!=0 && EV(numero[j],j)<EV(numero[i],i)); } sección crítica
indicador[i]=0;
sección restante }
![Page 10: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/10.jpg)
• Garantizar la ejecución atómica cuando se modifica una variable compartida (no es factible en entornos multiprocesadores)
• El HW garantiza la ejecución atómica de las secciones de ingreso y de egreso
Hardware de sincronización
![Page 11: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/11.jpg)
Hardware de sincronización
Función evalua_y_asigna atómica
BOOL evalua_y_asigna(BOOL &objetivo) { BOOL rv=target; target=TRUE; return rv; }
![Page 12: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/12.jpg)
Hardware de sincronizaciónwhile(TRUE){
while (evalua_y_asigna(cerradura)) ; sección crítica
cerradura = false;
sección restante
}
![Page 13: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/13.jpg)
Hardware de sincronización
Función swap (intercambio) atómica
void swap(BOOL &a, BOOL &b) { BOOL tmp=a; a=b; b=tmp; }
![Page 14: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/14.jpg)
Hardware de sincronizaciónBOOL lock=TRUE; // dato compartido
while(TRUE){
key = TRUE; while (key==TRUE) swap(lock,key); sección crítica
lock = FALSE;
sección restante
}
![Page 15: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/15.jpg)
• Herramienta de sincronización que no requiere de una espera “de alto costo”
• Semaforo S - variable entera
• Dos operaciones atómicas asociadas
• wait(S) o down(S):
•• signal(S) o up(S):
Semáforos
while (S<=0) no_op(); S--;
S++;
![Page 16: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/16.jpg)
Semáforos
Semaforo mutex=1; // dato compartido
while(TRUE){
wait(mutex); sección crítica
signal(mutex);
sección restante
}
![Page 17: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/17.jpg)
• Definir la estructura
• Asumir dos operaciones
1. block
2. wakeup(P)
Implantación de Semáforos
typedef struct _semaforo { int valor; struct proceso *L;} semaforo;
![Page 18: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/18.jpg)
• Operaciones del semáforo quedan como:
Implantación de Semáforos
wait(semaforo &S) { S.valor--; if (S.valor<0) { agrega_proceso a S.L; block; }}
signal(semaforo &S) { S.valor++; if (S.valor<=0) { remueve un proceso P de S.L; wakeup(S); }}
![Page 19: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/19.jpg)
Semáforos como herramienta de sincronización
Proceso Pi
... ... ... A signal(mutex)
Proceso Pj
... ... ... wait(mutex) B
Ejecutar la sentencia B en Pj, después de ejecutar la sentencia A en Pi
![Page 20: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/20.jpg)
Problema:Candado mortal
Proceso Pi wait(A); wait(B); ... ... signal(B); signal(A);
Proceso Pj wait(B); wait(A); ... ... signal(A); signal(B);
![Page 21: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/21.jpg)
• Productor - consumidor
• Escritores y lectores
• Filósofos pensantes
Problemas clásicos de sincronización
![Page 22: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/22.jpg)
• Un proceso se encarga de generar datos en un buffer compartido
• Una serie de procesos consumidores toman datos del buffer compartido
Problema productor-consumidor
![Page 23: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/23.jpg)
Problemaproductor-consumidor
// buffer compartido element buffer[N];
// semaforos, tambien compartidossemaforo vacio, lleno, mutex;
// inicializacion de semaforosmutex.valor = 1; vacio.valor = N;lleno.valor = 0;
![Page 24: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/24.jpg)
Problema productor-consumidor
element sigp; // variable local while(TRUE) { sigp = produce_nuevo_elemento();
wait(vacios); wait(mutex); agrega_buffer(buffer, sigp); signal(mutex); signal(lleno);}
Proceso productor
![Page 25: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/25.jpg)
Problema productor-consumidor
element sigc; // variable localwhile(TRUE) { wait(lleno); wait(mutex); sigc=toma_elemento(buffer); signal(mutex); signal(vacio);
consume_elemento(sigc);}
Proceso consumidor
![Page 26: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/26.jpg)
• Varios procesos comparten un dato
• Algunos procesos modifican el dato
• Algunos procesos leen el dato
Problemalectores-escritores
![Page 27: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/27.jpg)
Problemalectores-escritores// dato compartido dato dato_compartido;
// semaforos, tambien compartidossemaforo mutex, s_dato;
// contador de procesos lectoresint nlectores = 0;
// inicializacion de semaforosmutex.valor = 1; s_dato.valor = 1;
![Page 28: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/28.jpg)
Problema lectores-escritoresdato nuevo_valor; // variable local
while(TRUE) { nuevo_valor = genera_nuevo_valor();
wait(s_dato); dato_compartido = nuevo_valor; signal(s_dato); }
Proceso escritor
![Page 29: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/29.jpg)
while(TRUE) { wait(mutex); nlectores=nlectores+1; if (nlectores==1) wait(s_dato); signal(mutex); lee_dato_compartido(); wait(mutex); nlectores=nlectores-1; if (nlectores==0) signal(s_dato); signal(mutex); usa_dato();}
Problema lectores-escritores
Proceso lector
![Page 30: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/30.jpg)
Problemafilósofos pensantes
![Page 31: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/31.jpg)
Problema filósofos pensantessemaforo palillo[5];
while(TRUE) { wait(palillo[i]); wait(palillo[(i+1)%5]); comer(); signal(palillo[i]); signal(palillo[(i+1)%5]); pensar();}
Proceso escritor
![Page 32: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/32.jpg)
• Semaforos: exclusión mutua explícita
• Mal uso de semáforos (codificación):
1. inversion de wait(), signal()
2. repeticion de wait()
3. olvido de una operacion wait(), signal()
Regiones críticas
![Page 33: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/33.jpg)
• Exclusión mutua implícita
• Declaración de un conjunto de funciones dentro de una región que garantiza la exclusión mútua
Monitores
![Page 34: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/34.jpg)
type nombre-monitor monitor {
declaración de variables
void funcion1();
void funcion2();
...
{
código de inicialización
}
}
Monitores
![Page 35: Sincronización de procesoscomputacion.cs.cinvestav.mx/~ameneses/pub/notas/06...Sistemas Operativos Sincronización de procesos • Introducción • Problema de sección crítica](https://reader030.vdocuments.site/reader030/viewer/2022021620/5bd66e7609d3f2e17c8b5442/html5/thumbnails/35.jpg)