Sunteți pe pagina 1din 12

Dijkstra dio en 1968 una solucin al problema de la exclusin mutua con la introduccin del concepto de semforo binario.

Est tcnica permite resolver la mayora de los problemas de


sincronizacin entre procesos y forma parte del diseo de muchos sistemas operativos y de lenguajes de programacin concurrentes.

Un semforo binario es un indicador (S) de condicin


que registra si un recurso est disponible o no. Un semforo binario slo puede tomar dos valores: 0 y 1. Si, para un semforo binario, S = 1 entonces el recurso est disponible y la tarea lo puede utilizar; si S = 0 el recurso no est disponible y el proceso debe esperar.

Los semforos se implementan con una cola de tareas o de condicin a la cual se aaden los procesos que estn en espera del recurso. Slo se permiten tres operaciones sobre un semforo - Inicializar - Espera (wait) - Seal (signal) En algunos textos, se utilizan las notaciones P y V para las operaciones de espera y seal respectivamente, ya que sta fue

la notacin empleada originalmente por Dijkstra para referirse


a las operaciones.

Un semforo binario se puede definir como un tipo de datos especial que slo puede tomar los valores 0 y 1, con una cola de tareas asociada y con slo tres operaciones para actuar sobre l. Las operaciones pueden describirse como sigue:

inicializa (S: SemaforoBinario; v: integer)


Poner el valor del semforo S al valor de v (0 o 1) espera (S) if S = 1 then S := 0

else suspender la tarea que hace la llamada y ponerla


en la cola de tareas seal (S) if la cola de tareas est vaca then S := 1

else reanudar la primera tarea de la cola de tareas

La operacin inicializa se debe llevar a cabo antes de que comience la ejecucin concurrente de los procesos ya que su funcin exclusiva es dar un valor inicial al semforo.

Observacin
Un proceso que corre la operacin espera y encuentra el semforo a 1, lo pone a 0 y prosigue su ejecucin. Si el semforo est a 0 el proceso queda en estado de espera hasta que el semforo se libera. Dicho estado se debe considerar como uno ms de los posibles de un proceso. Esto es as debido a que un proceso en espera de un semforo no est en ejecucin ni listo para pasar a dicho estado puesto que no tiene la CPU ni puede pasar a tenerla mientras que no se lo indique el semforo. Tampoco es vlido el estado suspendido, ya que este estado est pensado para que lo utilicen llamadas al sistema operativo para suspender o reactivar un proceso que no tiene por qu tener una conexin con los semforos. El diagrama de transicin de estados de la figura se puede ampliar con un nuevo estado que denominamos de espera

Transiciones para el estado de espera


Cuando se ejecuta la operacin seal puede haber varios procesos en la lista o cola, el proceso que la dejar para pasar al estado listo depender del esquema de gestin de la cola de tareas suspendidas que se haya implementado en el diseo del semforo, por ejemplo: prioridades, FIFO, etc. Si no hay ningn proceso en espera del semforo este se deja libre (S := 1) para el primero que lo requiera.

Un monitor es una estructura formada por una cabecera que los identifica, un conjunto de variables globales a todos los procedimientos del monitor, un conjunto de procedimientos y un bloque de inicializacin, el cual se ejecuta una nica vez, cuando se crea el monitor.

nombre variables globales accesibles desde todos los procedimientos procedimiento A procedimiento B

inicializacin (solo se ejecuta una vez)

El recurso que queremos compartir .Se declara como monitor y en l se incluyen todas las operaciones que afecten a dicho recurso. Los procesos que usan el monitor se sitan de forma independiente y cuando deseen usar el recurso, llamarn al procedimiento del monitor que implemente la operacin que desea ejecutar. Para resolver la sincronizacin se utilizan dos instrucciones, wait (bloquea siempre) y signal, y actan sobre variables condicin que son colas y adems no tienen valor. wait (c): suspende la ejecucin del proceso que llama bajo la condicin c. El monitor est ahora disponible para ser usado por otros procesos. signal(c): reanuda la ejecucin de algn proceso suspendido despus de un cwait bajo la misma condicin. Si hay varios procesos, se elige uno de ellos; si no hay ninguno, no hace nada.

Las colas son un tipo de variables que son el lugar donde almacenaremos los procesos que hayan quedado suspendidos bajo un .wait. y estn a la espera de ser "despertados".

En el caso de que dentro de un monitor un proceso se quede bloqueado con un wait por lo cual se bloquea y no dejara ejecutarse a otro proceso, el SO despierta a otro proceso cuya ltima instruccin haya sido un signal y adems vale la condicin que hace que se bloqueen los procesos.

Habr algunos casos en los que nos apoyemos en una variable booleana para garantizar la exclusin mutua sobre una variable con una sola instancia. Tambin habr casos en los que utilicemos un contador.

Son una solucin del sistema operativo que nos permitirn la sincronizacin de procesos y la comunicacin entre ambos. Es una cadena de texto transmitida de un proceso que enva el mensaje a un receptor (proceso receptor). Un mensaje puede tener cdigo, texto, datos,

La comunicacin mediante mensajes necesita siempre de un proceso emisor y de uno receptor as como de informacin que intercambiarse. Por ello, las operaciones bsicas para comunicacin mediante mensajes que proporciona todo sistema operativo son: Enviar(mensaje) y recibir(mensaje). Las acciones de transmisin de informacin y de sincronizacin se ven como actividades inseparables. La comunicacin por mensajes requiere que se establezca un enlace entre el receptor y el emisor, la forma del cual puede variar grandemente de sistema a sistema. Aspectos importantes a tener en cuenta en los enlaces son: como y cuantos enlaces se pueden establecer entre los procesos, la capacidad de mensajes del enlace y tipo de los mensajes.

MODOS DE NOMBRAR LOS MENSAJES


El proceso de denominacin de las tareas para la comunicacin por mensajes se puede realizar de dos formas distintas: directa e indirectamente. En la comunicacin directa ambos procesos, el que enva y el que recibe, nombran de forma explcita al proceso con el que se comunican. Las operaciones de enviar y recibir toman la forma: enviar(Q, mensaje): enva un mensaje al proceso Q recibir(P, mensaje): recibe un mensaje del proceso P

En la comunicacin indirecta los mensajes se envan y reciben a travs de una entidad intermedia que recibe el nombre de buzn o puerto. Como su nombre indica, un buzn es un objeto en el que los procesos dejan mensajes y del cual pueden ser tomados por otros procesos. Ofrecen una mayor versatilidad que en el caso de nombramiento directo, ya que permiten comunicacin de uno a uno, de uno a muchos, de muchos a uno y de muchos a muchos. Cada buzn tiene un identificador que lo distingue. En este caso las operaciones bsicas de comunicacin toman la forma: enviar(buznA, mensaje): enva un mensaje al buzn A recibir(buznA, mensaje): recibe un mensaje del buzn A.

S-ar putea să vă placă și