Upload
karen-giannella-apaza
View
237
Download
0
Embed Size (px)
DESCRIPTION
sincronizacion
SINCRONIZACION
Sincronizacin y ComunicacinProcesos cooperan en sus tareas, durante su ciclo de vida sincronizacin y comunicacin:Entre ellos o con el proceso maestro que los haya creado. Acceso controlado a estructuras de datos compartidas SincronizacinActo de asegurarse que los procesos/hilos independientes comienzan a ejecutar un bloque de cdigo concreto en el mismo tiempo lgico.
Sincronizacin y ComunicacinTres problemas: Cmo puede un proceso pasar informacin a otro? Cmo se asegura que dos o ms procesos no se estorben mutuamente al efectuar actividades crticas ? Cmo se puede sincronizar la ejecucin de los procesos dependientes?
Procesos colaboradores pueden compartir almacenamiento comn ambos leen y escriben: memoria principal, archivo compartido.
P.e.: spooler de impresinCondicin de competencia
Procesos o hilos cooperativos concurrentes PROGRAMACION CONCURRENTECondicin de competenciashared double balance;
Esquema de cdigo para p1. . .balance=balance+cantidad;. . .shared double balance;
Esquema de cdigo para p2. . .balance=balance-cantidad;. . .load R1, balanceload R2, cantidadadd R1, R2store R1, balanceload R1, balanceload R2, cantidadsub R1, R2store R1, balance
Condicin de competencia
Condicin de competenciacontador:INTEGER:=0;
process Observador;repeatesperar_evento;contador:=contador + 1;
forever;end Observador;contador:INTEGER:=0;
process Reportero;repeatimprimir(contador);
contador:=0;forever;end Observador;
Cuando el resultado de una operacin depende:De las velocidades relativas de los procesos,Del orden particular en que se intercalan las operaciones de los procesos concurrentesLo producen:Procesos paralelos (concurrentes) que comparten: datos o recursosDirectorio de spooler, in, out, Contador o balance. Condicin de competencia(data race, race condicion)
Seccin o regin crticaSe producen en el sw concurrente, siempre que dos procesos/hilos acceden a una variable compartida, por tanto, no deberan ejecutar esa parte del cdigo de forma concurrente..
Seccin o regin crticashared double balance;
Esquema de cdigo para p1. . .balance=balance+cantidad;. . .shared double balance;
Esquema de cdigo para p2. . .balance=balance-cantidad;. . .contador:INTEGER:=0;process Observador;repeatesperar_evento;
contador:=contador + 1;
forever;end Observador;contador:INTEGER:=0;process Reportero;repeatimprimir(contador);
contador:=0;
forever;end Observador;
EXCLUSIN MUTUASi un proceso esta haciendo uso de un dato compartido, los otros no pueden hacerlo hasta que el otro termine.Problema: acceso a la variable compartida antes que el proceso que la este modificando la deje en estado consistenteOperaciones de acceso a la variable compartida no son atmicas. Porteros PROTOCOLO ENTRADA/SALIDA
Exclusin mutua: dos procesos nunca pueden estar simultneamente dentro de sus regiones crticas.Ausencia de postergacin innecesaria: si un proceso quiere entrar en su seccin crtica, puede hacerlo si los otros estn en seccin no crtica.Ningn proceso que se ejecute fuera de su regin crtica puede bloquear a otros procesos.Entrada garantizada (ausencia de inanicin): ningn proceso deber tener que esperar indefinidamente para entrar en su regin crticaNo se puede hacer suposiciones sobre el hardware, (velocidades o el nmero de procesadores que intervienen).Condiciones para el sincronismo
Exclusin mutua con espera activaPrimitivas SLEEP y WAKEUPSemforosMutexesMonitoresTransferencia de mensajesBarrerasMecanismos de sincronizacin
EXCLUSION MUTUA
CON ESPERA ACTIVAExclusin mutuaPrimitivas SLEEP & WAKEUPSemforosMutexesMonitoresTransferencia de mensajesBarreras
Inhabilitacin de interrupcionesVariables de bloqueo (candados)Alternancia estrictaSolucin de PetersonHardware de sincronizacin: TSLExclusin mutua con espera activa
Cada proceso inhabilite las interrupciones justo despus de ingresar en su regin crtica.Y vuelva a habilitarlas justo antes de salir de ella.Instrucciones mquina DISABLE (inhabilitar las interrupciones) y ENABLE (habilitar las interrupciones).Inhabilitacin de interrup. Exclusin mutua
Con las interrupciones inhabilitadas no hay interrupciones de reloj.CPU slo se conmuta de un proceso a otro como resultado de interrupciones de reloj o de otro tipo.Proceso puede examinar y actualizar la memoria compartida sin temor operaciones atmicas.Inhabilitacin de interrup. Exclusin mutua
Desventajas:Regin crtica debe ser corta perder interrupciones generadas por los dispositivos de E/S.Inhabilitando las interrupciones, tambin se impide la ejecucin de:Procesos cooperantes que no intentan entrar en la regin crticaResto de los procesos del sistema.Peligroso darle al usuario la posibilidad de inhabilitar las interrupciones perdida de las subsiguientes interrupciones y el acaparamiento en exclusiva de la CPU.Inhabilitacin de interrup. Exclusin mutua
Por tanto:Tcnica til o prctica para el ncleoMtodo apropiado para sistemas monoprocesador.Pero no es apropiada como mecanismo general de exclusin mutua para los procesos de usuarioInhabilitacin de interrup. Exclusin mutua
Inhabilitacin de interrup. Exclusin mutuashared double balance,cantidad;
Programa para p1. . .deshabilitarInterrupciones();balance=balance+cantidad;habilitarInterrupciones();. . .shared double balance, cantidad;
Programa para p2. . .deshabilitarInterrupciones();balance=balance-cantidad;habilitarInterrupciones();. . .
Variable compartida booleana, indica si la crtica est ocupada o no: 0 (false) libre1 (true) ocupadaCuando un proceso llegue a la entrada de la regin debe consultar el valor de la variable candado:si es 0 pone en 1 y entra a la regin crticasi es 1 proceso debe esperar hasta que sea 0Variables de bloqueoExclusin mutua
La consulta del candado y su posterior puesta a True, no es atmica.No se asegura la exclusin mutua.Variables de bloqueoExclusin mutuashared boolean bloqueo = FALSE;shared double cantidad, balance;Programa para P1. . .while (bloqueo) { NULL;}bloqueo=TRUE;balance=balance+cantidad;bloqueo=FALSE;. . .
Programa para P2. . .while (bloqueo) { NULL;}bloqueo=TRUE;balance=balance-cantidad;bloqueo=FALSE;. . .
Variables de bloqueoExclusin mutua
Variables de bloqueoExclusin mutuaentrar(bloqueo) { deshabilitarInterrupciones(); while(bloqueo){ } bloqueo=TRUE; habilitarInterrupciones();}salir(bloqueo) { deshabilitarInterrupciones(); bloqueo=FALSE; habilitarInterrupciones();}shared double balance,cantidad;Shared boolean bloqueo=FALSE;
Programa para p1entrar(bloqueo);balance=balance+cantidad;salir(bloqueo);shared double balance, cantidad;Shared boolean bloqueo=FALSE;
Programa para p2entrar(bloqueo);balance=balance-cantidad;salir(bloqueo);
Alternancia estrictaExclusin mutuaUsa una variable compartida, que indica a quin le corresponde entrar en la Regin CrticaInicialmente la variable es FALSE.El primer proceso examina la variable, ve que es FALSE, y entra en su RC.El segundo proceso tambin ve que es FALSENo entra en la RCda vueltas en ciclos espera activa.Bloqueo giratorioAl salir el primer proceso (variable=TRUE), el segundo recin puede entrar a su RC.
Alternancia estrictaExclusin mutuaViola la condicin de ausencia de postergacinRequiere que los procesos se alternen estrictamente para entrar a sus regiones crticas.shared boolean bloqueo = FALSE;shared boolean cantidad, balance;Programa para P1. . .while (bloqueo) { NULL;}balance=balance+cantidad;bloqueo=TRUE;. . .
Programa para P2. . .while (!bloqueo) { NULL;}balance=balance-cantidad;bloqueo=FALSE;. . .
Dekker Combinando la idea de tomar turnos con la de tener variables de candado y variables de advertencia: solucin software para el problema de la exclusin mutua sin alternancia estricta .1981 Peterson descrubre forma ms sencilla de lograr la exclusin mutuaManejar ms informacin: una variable ms. Ser verdadera si un proceso quiere entrar a la seccin crtica.
Algoritmo de PetersonExclusin mutua
Algoritmo de PetersonExclusin mutuaDos procesos 0 y 1Cada proceso invoca enter_region (proceso) para ingresar a SC.Despus de SC el proceso invoca leave_region() ya termin y permitir que entre otro.
Clave xito: procesos manifiestan la intencin de entrar 1ro.#define FALSE 0#define TRUE 1#define N 2
int turno;int interesado [N];
void enter_region (int process){int otro;otro = 1-process;interesado [process] = TRUE;turno = process;while (turno == process && interesado [otro] == TRUE);}
void leave_region (int process){interesado [process] = FALSE;}
Analizando condiciones:Exclusin mutua: si dos procesos quieren entrar no pueden entrar al mismo tiempo: while (interesado [otro] && turno == process) no puede ser negativa para ambos procesos a la vez.Si Pi entra primero turn=i,para que el otro entre turn= 1-i, o bien interested[i] = FALSE.Algoritmo de PetersonExclusin mutua
Analizando condiciones:Ausencia de postergacin innecesaria: Si Pi entra primero y el otro est ejecutando su seccin no crtica Interesado [otro] = FALSEPi no tiene impedimento de entrarAlgoritmo de PetersonExclusin mutua
Analizando condiciones:Entrada garantizada: Si un proceso quiere entrar, slo debe esperar que el otro salga de la seccin crtica.Puede haber inanicin:Una vez que se cumple la condicin que permite a un proceso entrar, esta debe ser permanente hasta que le toca la CPU al proceso que quiere entrar.Si la condicin fuera intermitente, el planificador puede ser nuestro enemigo.Algoritmo de PetersonExclusin mutua
Instrucciones especiales para resolver el problema de la seccin crtica.Instrucciones que combinan dos o tres operaciones en una sola operacin atmica.
TS RX,bloqueoTest and Set probar y escribir
Lee el contenido de la palabra de memoria (bloqueo),Lo coloca en el registro RX Le pone un valor diferente a 0 o FALSE.Hw de sincronizacin:TSExclusin mutua
Se garantiza que: la lectura de la palabra y la escritura en ella son indivisibles.Ningn otro proceso o procesador puede tener acceso a la palabra de memoria antes de acabarse de ejecutar TS.En sistemas multiprocesador, la CPU que ejecuta TS bloquea el bus de memoria.Se requiere una variable compartida bloqueo para coordinar el acceso a la memoria compartidabloqueo = 0 (false) cualquier proceso le asigna 1 (true) usando TS y entra en la seccin crticaAl terminar el proceso, le asigna 0 (false) con MOVE.Hw de sincronizacin:TSExclusin mutua
Cmo es que puede esta instruccin evitar que dos procesos entren simultneamente en sus regiones crticas?Hw de sincronizacin:TSExclusin mutuaenter_region:ts register, lockcmp register, 0jne enter_regionret
leave_region:move lock,0retPi:..enter_region;seccion_critica;leave_region;..
Hw de sincronizacin:TSExclusin mutuashared int lock=0;while (ts(lock)==1) skip;seccion_critica;lock=0;Tambin utiliza espera activaGasto intil de tiempo de CPUEste protocolo provee exclusin mutua sin postergacin innecesaria y sirve para n procesos.Cuando un proceso llega a la entrada de la regin crtica, si el bloqueo no tiene 0, el proceso debe de ejecutarse en ciclo hasta que el bloqueo sea 0.
SLEEP & WAKEUPExclusin mutuaPrimitivas SLEEP & WAKEUPSemforosMutexesMonitoresTransferencia de mensajesBarreras
Soluciones de Peterson y Test And Set, tiene:Espera activa: desperdicia tiempo de CPU.Problema de la inversin de prioridades: hambruna.Solucin: primitivas de comunicacinSe bloqueanNo desperdician tiempo de CPU.SLEEP & WAKEUPProblemaSemforos
SLEEP:Llamada al sistema, hace que el invocador se bloqueeWAKEUP:Llamada que activa al proceso que lleva como parmetroAmbas tienen un parmetro: direccin de memoria que relaciona las llamadas SLEEP con las llamadas WAKEUP.DefinicinSleep & Wakeup
(buffer limitado)Dos procesos comparten un buffer de tamao fijo.Productor: coloca informacin Consumidor: saca informacinProblemas:Buffer lleno y productor quiere colocar Buffer vaco y consumidor quiere sacar.Solucin: productor y consumidor se desactiven en el momento adecuado.Productor - ConsumidorSleep & Wakeup
Productor - ConsumidorSleep & Wakeup
Puede generarse condiciones de competencia?.
Solucin: aumentar ms memoria bit de espera para activar.Alcanca de seales de activar o despertar.Si hay n procesos?.... Cunta memoria es necesaria?.Productor - ConsumidorSleep & WakeupAcceso a count es irrestricto