You are on page 1of 10

Procesos

Comunicación entre procesos

Condiciones de competencia Son las situaciones en las que dos o más procesos leen o escriben en ciertos datos compartidos y el resultado final depende de quién ejecuta qué y en qué momento Exclusión mutua Forma de garantizar que si un proceso utiliza una variable o archivo compartidos, los demás procesos no puedan utilizarlos. Forma de prohibir que más de un proceso lea o escriba en los datos compartidos a la vez Secciones o regiones críticas Parte del programa en el cual se tiene acceso a la memoria compartida

el buffer es de capacidad limitada. Adicionalmente.Problema del Productor . Los productores tratan de introducir elementos en el buffer de uno en uno. Se desea resolver el problema del productor-consumidor usando semáforos . y los consumidores tratan de extraer elementos de uno en uno. de modo que el acceso por parte de un productor para introducir un elemento en el buffer lleno debe provocar la detención del proceso productor.Consumidor ‡ El problema Productor/Consumidor consiste en el acceso concurrente por parte de procesos productores y procesos consumidores sobre un recurso común que resulta ser un buffer de elementos. el acceso de los productores y consumidores debe hacerse en exclusión mutua. Lo mismo sucede para un consumidor que intente extraer un elemento del buffer vacío. ‡ ‡ Para asegurar la consistencia de la información almacenada en el buffer.

‡ Administra y restringe la entrada a un proceso .Semáforos ‡ Variable especial reservada que administra variables de entrada y salida dentro de un proceso.

Pregunta a los procesos si su contador es > ó = que cero.. en caso de no ser así. ‡ Signal. saca a este proceso de su ejecución y depende de su estado . los decrementa. las cuales son: ‡ Wait. que tiene solo dos operaciones básicas. y pregunta a los procesos si su contador es < que cero en caso de que sea afirmativa la respuesta.Semaforos ‡ Semáforos es un algoritmo de control de procesos. El proceso que cambia en este caso a negativo ( 1) desde la cola de procesos Listos a ser ejecutados es el que automáticamente toma el control del procesador.A partir de un tiempo t definido por el despachador se ejecuta..

Dormir y despertar ‡ VER ALGORITMO .

colas y otros datos que se emplean en la comunicación entre el código que se ejecuta cuando se da servicio a una interrupción y el código que se ejecuta el resto del tiempo. ‡ a mayor parte de estos recursos son las señales. . si no se toman las precauciones debidas.Exclusión mutua ‡ Los algoritmos de exclusión mutua (comúnmente abreviada como mutex por mutual exclusión) se usan en programación concurrente para evitar que fragmentos de código conocidos como secciones críticas accedan al mismo tiempo a recursos que no deben ser compartidos. una interrupción puede ocurrir entre dos instrucciones cualesquiera del código normal y esto puede provocar graves fallos. Se trata de un problema de vital importancia porque. contadores. ‡ La técnica que se emplea por lo común para conseguir la exclusión mutua es inhabilitar las interrupciones durante el conjunto de instrucciones más pequeño que impedirá la corrupción de la estructura compartida (la sección crítica). Esto impide que el código de la interrupción se ejecute en mitad de la sección crítica.

Dormir bloquea al proceso que hizo la llamada (lo suspende) hasta que otro proceso lo despierte. y el consumidor la obtiene de él (la elimina) Problema: . (problema de inversión de prioridad) Dormir (sleep) y despertar (wake up) son llamadas que no provocan desperdicio de CPU. pero su inconveniente es la espera ocupada.Procesos Dormir y despertar Tanto Peterson como TSL son correctas. El problema del productor y el consumidor (almacén limitado) Dos procesos comparten un almacén (buffer). El productor coloca información en el buffer.Utilizar sleep y wakeup . además pueden darse casos en el que un proceso espere un tiempo infinito para ejecutarse debido a las prioridades en el despachador.Buffer vacío ó Buffer lleno Solución: .

despertar al productor. while (TRUE) { produce_item(&item). si count=N bloquear al productor. Si se ha colocado el primer item. while (TRUE) { if (count == 0 ) sleep().h #define N 100 Int count=0. enter_item(item). count = count .1) wakeup(producer). Si se ha eliminado un item de un buffer que estaba lleno. if (count == 1) wakeup(consumer). consume_item(item). #include prototipos. if (count == N ) sleep(). if (count == N .1. entonces si count=0 bloquear al consumidor. despertar al consumidor. } . } } } Void consumer (void) { int item. remove_item(&item).Procesos Si N es el tamaño del buffer. count = count + 1. Void producer (void) { int item.

rm} El acceso a un recurso puede modelarse de la siguiente forma: un proceso: (1) solicita un recurso (y eventualmente espera para conseguirlo). p2. (2) usa el recurso. En el paso 3 se produce el evento que puede sacar a otro proceso de la espera por el recurso (paso 1). es importante determinar una política adecuada de selección del proceso en espera que usa el recurso recién liberado e implementarla correctamente.. r2.... (3) libera el recurso. Como en el caso de la sección crítica. . pn} y un conjunto de recursos14 R= {r1... para evitar que lo procesos sufran inanición.Interbloqueos ‡ ‡ ‡ ‡ ‡ ‡ ‡ ‡ ‡ ‡ ‡ ‡ Dado un conjunto de procesos P= {p1. . .

Un proceso que está utilizando un recurso ri puede solicitar otro recurso antes de liberar otro (3) No expulsión. En todo momento. (4) Espera circular. (2) Retención y espera. o está asignado a un proceso. o está libre.Condiciones para el interbloqueo ‡ Para que se produzca un interbloqueo deben cumplirse las cuatro condiciones siguientes: (1) Exclusión mutua. Un proceso no puede ser forzado a liberar un recurso. cada recurso. Existe un conjunto de procesos PD entre los que se define un círculo de espera por recursos que están siendo usados: .