2014 SINCRONIZACIN DE PROCESOS COMUNICACIN ENTRE PROCESOS Los procesos necesitan comunicarse con otros procesos (IPC). Ejm una tubera. ls | more PROBLEMAS Cmo puede un proceso pasar informacin a otro? Un proceso no puede estorbar al otro CONDICIONES DE COMPETENCIA Procesos pueden compartir un almacenamiento en comn: un rea de memoria o un archivo. EJEMPLO Un spooler de impresin. Dos procesos: CONDICIONES DE COMPETENCIA 1) Un proceso que desea imprimir, introduce el nombre del archivo en un directorio de spooler especial.
2) Otro proceso es el demonio de impresin, que revisa peridicamente el directorio para ver si hay archivo que imprimir. Condiciones de Competencia
Variables compartidas: Out: apunta al siguiente archivo por imprimir In: apunta a la siguiente ranura libre del spool A y B decide de forma casi simultnea poner archivos a imprimir. Proceso A Siguiente_ranura_libre =7 Interrupcin Coloca el archivo in=8
Proceso B Lee in Coloca el archivo in= 8 CONDICIONES DE COMPETENCIA Fenmeno que se presenta cuando dos ms procesos compiten por acceder un mismo recurso.
Si no existe sincronizacin, pueden existir serias inconsistencias
SECCIN CRTICA Seccin o Regin Crtica: Es el rea o el mdulo del proceso donde se accede a memoria o variables compartidas. PROCESO A While(TRUE){ Seccin crtica(); Seccin no_crtica(); } SECCIN CRTICA Cuando un proceso esta accediendo a memoria o archivos compartidos, o efectuando otras tareas criticas que pueden dar lugar a competencias, se dice que se encuentra en una seccin crtica (o regin crtica).
SECCIN CRTICA La clave para evitar los problemas en sta y otras situaciones relacionadas con la memoria compartida, archivos compartidos y cualquier otra cosa compartida, es determinar una forma de prohibir que ms de algn proceso lea o escriba en los datos compartidos a la vez.
EXCLUSIN MTUA Una forma de garantizar que si un proceso utiliza una variables o archivo compartidos, los dems procesos no puedan utilizarlos. La exclusin mtua es prohibir que ms de algn proceso lea o escriba en los datos compartidos a la vez. CONDICIONES SOLUCIN 1) Dos procesos nunca pueden estar simultneamente dentro de sus regiones crticas. 2) No puede suponerse nada acerca de las velocidades o el nmero de las CPU 3) Ningn proceso que se ejecute fuera de su seccin crtica puede bloquear a otros procesos. 4) Ningn proceso deber tener que esperar indefinidamente para entrar en su secin critica Exclusin mtua con espera activa 1) Inhabilitacin de Interrupciones: La solucin ms sencilla es hacer que cada proceso inhabilite todas las interrupciones inmediatamente despus de ingresar a su regin crtica. Las vuelve a habilitar justo antes de salir de la regin crtica. Exclusin mtua con espera activa Con las interrupciones desactivadas la CPU no se puede conmutar a otro proceso.
Este esquema no es atractivo, porque no es bueno que los proceso de usuarios inhabiliten las interrupciones. Exclusin mtua con espera activa Si el sistema es multiprocesador la inhabilitacin de interrupciones slo afectar a la CPU que ejecuto la instruccin de deshabilitar. 2)Variables de Candado Solucin en software. Uso de una variable compartida llamada candado. Candado inicialmente es cero. Si Candado es =0 el proceso se establece candado en 1 y entra en seccin critica.
2)Variables de Candado Si candado es = 1, el proceso espera hasta que candado = 0. ERROR Spooler (Proceso A lee candado=0, luego se planifica ProcesoB y se ejecuta y asigna a Candado=1; Proceso A continua..) tendremos dos procesos en sus regiones crticas. 3) Alternancia Estricta Solucin Software Trabaja con una variable tipo turnos (turn) turn=0 (turno del proceso 0) turn =1 (turno del proceso 1) Espera hasta que sea el turno (espera activa). 3) Alternancia Estricta proceso 0
3) Alternancia Estricta proceso 1
3) Alternancia Estricta Sin embargo, esta solucin no es ptima. Supongamos la siguiente situacin: 1. A sale de su Seccin Critica y se pone en 1 2. B entra en su Seccin Critica, termina rpidamente, pone turn en 0 y sale 3. Ahora A entra en su Seccin Critica, termina rpidamente y sale, pone a turn en 1 y sale 4. En este punto A y B no estn en su Seccin No Critica . Supongamos que A termina antes que B y desea entrar en su Seccin Crtica . No podr hacerlo por que B esta demorada y turn=1. 3) Alternancia Estricta Esto provoca el incumplimiento de la Regla N 3 de la exclusin mutua: Ningn proceso suspendido, detenido o abortado fuera de seccin crtica debe impedir la entrada a otro proceso Esta solucin requiere que los dos procesos alternen de forma estricta su entrada en las regiones criticas respectivas . Ninguno puede entrar dos veces seguidas. Aunque este algoritmo elimina conflictos , no es la mejor solucin. 4) Peterson Solucin tipo software que no requiere alternancia estricta. Antes de usar variables compartidas, cada proceso invoca a enter_region() con su nmero de proceso 0 o 1. Una vez que haya terminado de usar las variables compartidas invoca a leave_region()
Peterson #define FALSE 0 #define TRUE 1 #define N 2 int turn; int interested[N]; //all values initially 0 void enter_region(int process) { int other; other = 1 - process; // lo opuesto del proceso interested[process]=TRUE; //mostrar inters turn = process; // establecer bandera while(turn == process && interested[other] == TRUE); } void leave_region(int process) { interested[process] = FALSE; }
Prueba de Escritorio
4) Peterson Si ambos procesos invocan enter_region() casi simultneamente, ambos almacenarn su nmero de proceso en turn, pero el nico que cuenta es el que se almacena despus; el primero se pierde.
Trata de solucionar el error de Peterson de la espera activa Utiliza primitivas de comunicacin entre procesos para bloquearlos en lugar de desperdiciar tiempo de CPU. SLEEP() WAKEUP() Dormir y Despertar El problema de productor-consumidor: dos procesos comparten un mismo buffer de tamao fijo. Si el productor no puede seguir produciendo, este se debe dormir(bloquear). De igual forma el consumidor. Dormir y Despertar Dormir y Despertar #define N 3 int count = 0;
void producer(void){ while (true) { produce_intem(); if (count == N) sleep(); enter_item(); count = count + 1; if (count == 1) wakeup(consumer); } }
void consumer(void){ while (true) { if (count == 0) sleep(); remove_item(); count = count - 1; if (count == N - 1) wakeup(producer); consume_item(); } } Dormir y Despertar ERRORES: Seal a despertar perdida -buffer vaci, consumidor lee count para ver si es cero, en ese instante se ejecuta el productor, este coloca un elemento en el buffer, incrementa count, ahora count vale uno y el productor SOLUCIN: bit de espera de despertar Llamada a despertar a un proceso despierto se enciende el bit. Cuando el proceso trate de dormirse si el bit est encendido se apaga.
SEMFOROS Variable entera para contar el nmero de despertares almacenados para su uso posterior. Un semforo puede tener valor 0 lo que significa que no existen despertares almacenados o bien algn valor positivo si estn pendientes uno o ms despertares. SEMFOROS Operaciones DOWN y UP ( generalizaciones de SLEEP y WAKEUP). UP y DOWN llamadas al sistema, para inhabilitar brevemente las interrupciones mientras prueba el semforo, lo actualiza y pone el proceso a dormir si es necesario. SEMFOROS Operaciones: Down UP Si s >0 Si la cola procesos vaca s = s -1; s = s+1; Else else Bloquear proceso Desbloquear Proceso SEMFOROS OPERACIONES : Si el semforo vale mas de 0 lo decrementa si no a dormir Si hay procesos dormidos , despierta a uno , si no , incrementa el valor del semforo Ambas operaciones han de ser atmicas (indivisibles).
SEMFOROS #define N 100 TYPEDEF int semaphore; semaphore mutex = 1; /* Controla acceso a regin crtica. semaphore empty = N; /* Cuenta las ranuras vacas semaphore full = 0; /* Cuenta las ranuras llenas. Void producer(void){ int item; while (TRUE) { produce_item(&item); /* Generar algo. down(&empty); /* Decrementa ranuras vacas. down(&mutex); /* Entrar en seccin crtica enter_item(item); /* Inserta nuevo elemento. up(&mutex); /* Sale seccin crtica. up(&full); /* Incrementa ranuras llenas. } }
SEMFOROS Void consumer(void){ int item; while (TRUE) { down(&full); /* Decrementa ranuras llenas. down(&mutex); /* Entra seccin crtica. remove_item(&item); /* Saca elemento. up(&mutex); /* Sale de seccin crtica. up(&empty); /* Incrementa ranuras vacas. consume_item(item); /* Hacer algo con elemento consumido. } }
SEMFOROS Semforos Binarios: Valores 0, 1 utilizados por dos o ms procesos, para asegurar que slo un de ellos entre a su regin crtica. Semforos Sincronizacin: 0,1, Garantiza la exclusin mutua. SEMFOROS ERRORES: Errores humanos Supongamos que el orden de los DOWN del cdigo del productor se invierte, de modo que mutex se incrementa antes que empty. Si el buffer esta lleno, el productor se bloquea con mutex en 0. Luego el consumidor ejecuta un DOWN con mutex en 0. Ambos dormirn eternamente.
MONITORES Coleccin de procedimientos y datos, agrupados en una especie de mdulo muy especial conocido como mdulo monitor. Los procesos pueden llamar a los procedimientos del monitor siempre que lo deseen, pero no pueden acceder directamente a las estructuras de datos internas del monitor desde procedimientos declarados fuera del monitor. MONITORES Tienen una propiedad importante: solo un proceso puede estar activo en un monitor en un instante de tiempo. (Exclusin Mutua).
Compilador no el programador garantizan la Exclusin Mutua.
MONITORES Los monitores proveen un nuevo tipo de variables de condicin con dos operaciones que operan sobre el. Wait -> wait(a) : produce que el proceso que ejecuta la instruccin sea interrumpido y removido de la cola de ready hasta que otro proceso lo habilite ejecutando la instruccin signal( )con la misma variable de condicin. MONITORES Signal -> signal(a) : Habilita la ejecucin de algn proceso en espera por la ejecucin de la instruccin wait con la misma variable de condicin.
MONITORES Monitor example Integer i ; Condition c ; Procedure producer (x); . .end ; procedure consumer (x); .. end; end monitor
MONITORES Se disearon para resolver el problema de la exclusin mutua en uno o varios CPU que tienen acceso a una memoria comn. En sistemas distribuidos con su propia memoria estas primitivas ya no funcionan. Muchos lenguajes carecen de monitores. BLOQUEOS MUTUOS Entorno multiprogramacin Varios procesos pueden competir por un nmero finito de recursos Procesos esperando recursos; nunca cambiaran de estado. BLOQUEOS MUTUOS Una carencia de sincronizacin de procesos puede dar lugar a dos condiciones extremas: El bloqueo mutuo (abrazo mortal) La inanicin BLOQUEOS MUTUOS Proceso solicita un recurso No est disponible Espera Puede que no cambie de estado Los recursos solicitados estn en manos de otros procesos que tambin estn en espera (Interbloqueo)
Problema similar Inanicin, aplazamiento indefinido o bloqueo indefinido
BLOQUEOS MUTUOS Modelo del Sistema: Los recursos finitos pueden ser de varios tipos cada uno de los cuales consta de varias instancias. Ejms: el espacio de memoria, los ciclos de CPU, los archivos, los dipositivos de E/S. Si el sistema tiene dos CPU, se dice que tiene dos ejemplares
BLOQUEOS MUTUOS EJEMPLO Suponga que dos procesos quieren quemar un documento digitalizado en un CD.
Proceso A solicita autorizacin para usar el escner y se le concede. Proceso B solicita primero el quemador de CD y tambin se le concede.
Ahora A, pide el quemador de CD, pero se le niega porque B no lo ha liberado B solicita el escner, pero sin liberar el quemador de CD. PROCESOS A Y B ESTN BLOQUEADOS BLOQUEOS MUTUOS Secuencia de uso de recursos
Solicitud Uso Llamadas al Sistema Liberacin
El recurso no est disponible cuando se solicita El proceso solicitante debe esperar En algunos S.O el proceso se bloquea automticamente y despierta cuando dicho recurso est disponible La solicitud falla y el proceso debe esperar para pedir el recurso. BLOQUEOS MUTUOS Solicitud y liberacin llamadas al sistema: request, release, device, open, entre otras. No son administradas por el SO pueden hacerse mediante semforos. Tablas en sistema para registrar solicitudes y liberaciones BLOQUEOS MUTUOS Un conjunto de procesos esta bloqueado cuando cada uno posee un recurso y esta a la espera de obtener un recurso posedo por otro proceso del conjunto. BLOQUEOS MUTUOS Caracterizacin de B.M. 1. Exclusin Mutua Slo un proceso podr usar el recurso. Recurso retenido no compatible. 2. Retener y esperar Cuando los procesos que tienen recursos previamente otorgados solicitan otros recursos. 3. No apropiacin Un recurso no puede ser arrebatado a otro proceso, solo lo libera voluntariamente.
BLOQUEOS MUTUOS Caracterizacin de B.M. 4. Espera circular Debe existir un conjunto {P 0 ,P 1 ..,P n } de procesos en espera tal que P 0 est esperando un recurso que fu adquirido por P 1 , P 1 est esperando un recurso que fu adquirido por P 2 ,.., P n-1 est esperando un proceso que fu adquirido por P n y P n est esperando un recurso que fu adquirido por P 0
BLOQUEOS MUTUOS Grfica Asignacin de Recursos Grafos de Asignacin de Recursos
Nodos Procesos y Recursos Arcos De un proceso a un recurso Solicitud De un recurso a un proceso Asignacin Ciclos Indica la existencia de un bloqueo
BLOQUEOS MUTUOS Grfica Asignacin de Recursos Un conjunto de vrtices V y un conjunto de aristas dirigidas E. V es particionado en dos tipos: P = {P1, P2, , Pn}, el conjunto consistente de todos los procesos en el sistema. R = {R1, R2, , Rm}, el conjunto consistente de todos los tipos de recursos en el sistema. Arista de peticin arista dirigida P1 Rj Arista de asignacin arista dirigida Rj Pi BLOQUEOS MUTUOS Grfica Asignacin de Recursos BLOQUEOS MUTUOS Grfica Asignacin de Recursos CICLOS a) Si la grfica no contiene ciclos; no hay BM b) Si hay un ciclo y una sola instancia de cada recurso, condicin suficiente para BM. c) Varios ciclos BM. EJEMPLOS:
BLOQUEOS MUTUOS Grfica Asignacin de Recursos
BLOQUEOS MUTUOS Grfica Asignacin de Recursos BLOQUEOS MUTUOS Grfica Asignacin de Recursos