competencia de procesosalram/so/clase10.pdfsignal se ejecuta para despertar procesos que están en...

17
Competencia de Procesos Dr. Alonso Ramírez Manzanares 21-Sep-2010

Upload: others

Post on 02-Aug-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Competencia de Procesosalram/SO/clase10.pdfSIGNAL se ejecuta para despertar procesos que están en espera con respecto a una variable de condición (por ejemplo full). Para evitar

Competencia de ProcesosDr. Alonso Ramírez Manzanares

21-Sep-2010

Page 2: Competencia de Procesosalram/SO/clase10.pdfSIGNAL se ejecuta para despertar procesos que están en espera con respecto a una variable de condición (por ejemplo full). Para evitar

Monitores

Existe un problema con los semaforos, ¿qué pasa si por error intercambiamos el orden de estos semáforos?

mutex se decrementa antes que empty.Si el buffer está lleno, entonces el productor se bloquea con mutex puesto en 0, cuando el consumidor quiera accesar el

buffer, se va a bloquear y ambos quedan en bloqueo mutuo para siempre (¡¡esto es responsabilidad del programador!!).

Page 3: Competencia de Procesosalram/SO/clase10.pdfSIGNAL se ejecuta para despertar procesos que están en espera con respecto a una variable de condición (por ejemplo full). Para evitar

MonitoresA fin de facilitar la escritura de programas correctos se propuso una primitiva de sincronización de mas alto

nivel llamada monitor.

Es una colección (o paquete especial) de procedimientos variables y estructuras de datos.

Los procesos pueden invocar los procedimientos del monitos en el momento que deseen, pero no pueden acceder a las estructuras de datos internas del monitor.

Y SOLO UN PROCESO PUEDE ESTAR ACTIVO EN UN MONITOR EN UN MOMENTO DADO.

Page 4: Competencia de Procesosalram/SO/clase10.pdfSIGNAL se ejecuta para despertar procesos que están en espera con respecto a una variable de condición (por ejemplo full). Para evitar

MonitoresEjemplo:

El compilador sabe que es una estructura especial: (continua ...)

Page 5: Competencia de Procesosalram/SO/clase10.pdfSIGNAL se ejecuta para despertar procesos que están en espera con respecto a una variable de condición (por ejemplo full). Para evitar

MonitoresDe tal forma que cuando un proceso invoca a un procedimiento de monitor, las primeras instrucciones del procedimiento verifican si existe algun otro proceso activo en ese momento dentro del monitor. Si es así, el proceso invocador se suspende hasta que el otro proceso abandona el monitor.

La exclusion multiple se implementa por lo general con un semáforo binario. Pero de esto se encarga el compilador y no el usuario (por lo tanto es mas seguro).

La idea es programas las regiones críticas como procedimientos del monitor.

Page 6: Competencia de Procesosalram/SO/clase10.pdfSIGNAL se ejecuta para despertar procesos que están en espera con respecto a una variable de condición (por ejemplo full). Para evitar

Monitores

Ya tenemos garantizada la exclusion mutua, pero ahora necesitamos sincronización (bloqueo cuando no pueden continuar). Para eso agregamos las señales:

Agregamos variables de condición con 2 operaciones asocadas a ellas:

WAIT: se ejecuta cuando un procedimiento de monitor descubre

que no puede continuar, con alguna variable de condición (por ejemplo full). Esto hace que el proceso invocador se bloquee y asi permite que otro proceso entre al monitor.

continua...

Page 7: Competencia de Procesosalram/SO/clase10.pdfSIGNAL se ejecuta para despertar procesos que están en espera con respecto a una variable de condición (por ejemplo full). Para evitar

Monitores

SIGNAL se ejecuta para despertar procesos que están en espera con respecto a una variable de condición (por ejemplo full). Para evitar que 2 procesos estén adentro del monitor (despertador y despertado) al mismo tiempo, el proceso que ejecutó signal debe de salir inmediatamente del monitor, es decir debe de ser su última instrucción.

Page 8: Competencia de Procesosalram/SO/clase10.pdfSIGNAL se ejecuta para despertar procesos que están en espera con respecto a una variable de condición (por ejemplo full). Para evitar

Monitores

Las variables de condición no son acumuladores. Por lo tanto una señal SIGNAL se puede perder.

Entonces la señal WAIT tiene que venir siempre antes que SIGNAL.

Esta regla simplifica la implementación.

Page 9: Competencia de Procesosalram/SO/clase10.pdfSIGNAL se ejecuta para despertar procesos que están en espera con respecto a una variable de condición (por ejemplo full). Para evitar

P-C Implementado en Monitores

Page 10: Competencia de Procesosalram/SO/clase10.pdfSIGNAL se ejecuta para despertar procesos que están en espera con respecto a una variable de condición (por ejemplo full). Para evitar

Monitores

¿Cuál es la ventaja de WAIT y SIGNAL con respecto a SLEEP y WAKEUP?

Que con monitores no puede suceder que mentras uno apenas va a dormirse, el otro ya está tratando de despertarlo.

La exclusión mutua dentro del monitor garantiza que, en este caso, es 1er proceso va a completar WAIT antes de que otro proceso ejecute SIGNAL.

Page 11: Competencia de Procesosalram/SO/clase10.pdfSIGNAL se ejecuta para despertar procesos que están en espera con respecto a una variable de condición (por ejemplo full). Para evitar

MonitoresLa desventaja de los monitores es que son un concepto de lenguajes de programación.

C y pascal no tienen monitores.

Podemos implementar semáforos fácilmente en estos lenguajes.

Otro problema es que los monitores y los semáforos no funcionan en sistemas distribuidos donde la memoria no es compartida (clusters conectados por redes).

CONCLUSON: LOS SEMAFOROS SON DE MUY BAJO NIVEL Y LOS MONITORES SOLO EXISTEN EN MUY POCOS LENGUAJES DE PROGRAMACION. NECESITAMOS OTRA COSA.

Page 12: Competencia de Procesosalram/SO/clase10.pdfSIGNAL se ejecuta para despertar procesos que están en espera con respecto a una variable de condición (por ejemplo full). Para evitar

Transferencia de Mensajes

Esto es la “otra cosa”.

Es un metódo de comnicación entre procesos que usa las primitivas (llamadas al sistema y no construcciones de lenguaje, como los semáforos):

send(destino,&mensaje);

receive(origen,&mensaje);

donde origen puede ser cualquiera (ANY).

Page 13: Competencia de Procesosalram/SO/clase10.pdfSIGNAL se ejecuta para despertar procesos que están en espera con respecto a una variable de condición (por ejemplo full). Para evitar

Transferencia de Mensajes

Si no hay un mensaje disponible el receptor se puede bloquear hasta que llegue o bien puede salir inmediatamente con un código de error.

Page 14: Competencia de Procesosalram/SO/clase10.pdfSIGNAL se ejecuta para despertar procesos que están en espera con respecto a una variable de condición (por ejemplo full). Para evitar

Transferencia de MensajesLos sistemas tienen varios problemas:

Un mensaje se puede perder en la red.

Entonces se puede implementar que el receptor confirme recepción con un acuse de recibo AK.

Si el emisor no recibe nada en algun tiempo establecido, entonces reenvia el mensaje.

La confirmacíon se puede perder.

El receptor recibe el mensaje 2 veces, y debe de ser capaz de discernir entre una retransmision y un mensaje nuevo (se usan números consecutivos en cada mensaje).

Page 15: Competencia de Procesosalram/SO/clase10.pdfSIGNAL se ejecuta para despertar procesos que están en espera con respecto a una variable de condición (por ejemplo full). Para evitar

Transferencia de Mensajes

También se tiene que resolver el nombre de procesos, de tal forma que no sean ambiguos (cada uno debe tener nombre diferente).

Otra cuestión importante es la verificación de autenticidad (no aceptar mensajes de impostores).

Tambien es deseable, por cuestiones de rendimiento, usar localmente semaforos o monitores y en ambientes distribuidos mensajes (que son lentos).

Page 16: Competencia de Procesosalram/SO/clase10.pdfSIGNAL se ejecuta para despertar procesos que están en espera con respecto a una variable de condición (por ejemplo full). Para evitar

Transferencia de Mensajes

Como resolvemos el problema del Prod-Cons con mensajes y sin compartir memoria:

Suponemos que todos los mensajes miden el mismo tamaño.

El SO coloca en buffers los mensajes enviados pero aún no recibidos.

Esta solucion usa N mensajes, analogo a las N ranuras de antes, pero ahora en memoria compartida.

Page 17: Competencia de Procesosalram/SO/clase10.pdfSIGNAL se ejecuta para despertar procesos que están en espera con respecto a una variable de condición (por ejemplo full). Para evitar

Prod-Cons con mensajes