La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Paul Leger http://pleger.cl Procesos (capitulo 2) Paul Leger http://pleger.cl.

Presentaciones similares


Presentación del tema: "Paul Leger http://pleger.cl Procesos (capitulo 2) Paul Leger http://pleger.cl."— Transcripción de la presentación:

1 Paul Leger http://pleger.cl
Procesos (capitulo 2) Paul Leger

2 Problemas de Lectores y Escritores
Si tenemos una base de datos, varios pueden leer al mismo tiempo, pero solamente uno puede escribir al mismo tiempo. En otras palabras, si: Si hilos/procesos están leyendo al mismo tiempo, otros pueden seguir leyendo, pero nadie puede escribir Si hay un hilo que está escribiendo, no se puede leer ni escribir por otros hilos/procesos

3 Lectores y Escritores Lectores Escritor A Escritor B

4 Monitores Monitores sincronizan hilos como los semáforos, pero no usan “tickets” sino condiciones para “dormir”. Por ejemplo, Si un hilo no cumple cierta condición se duerme O si cierta condición se cumpla se despierta otros hilos

5 Lectores y Escritores Con Monitores
Alguien leyendo o escribiendo? Escribiendo = True E Escritor S Escribiendo = False Nadie escribiendo? Lectores++ E Lectores S Lectores- - Lectores = 0?

6 Monitores en Lectores Escritores en Pseudocódigo
Entrada y salida de lectores Entrada y salida de escritores def EnterWrite(): while (reader> 0 or writing): canwrite.wait() writing = True def EnterRead(): while (writing): canread.wait() readers++ 1 4 2 def ExitWrite(): writing = False canwrite.signal() if (not writing): canread.signal() def ExitRead(): readers if (readers == 0) canwrite.signal() 5 3 6 canread es un monitor usado para controlar los diferentes hilos que quieren leer canwrite es un monitor usado para controlar los diferentes hilos que quieren escribir

7 Algunas Problemas … si no usa correctamente estas soluciones
Deadlock (abrazo mortal): Dos hilos/procesos quedan esperando entre ellos; cada uno espera que uno de ellos termine la tarea. Ejemplo: dos escritores que tienen la misma prioridad para escribir Starving (hambruna): Un proceso/hilo que nunca tiene posibilidad de entrar a una zona critica. Ejemplo: infinitos lectores y un escritor

8 Monitores en Python En Python, no existe exactamente la abstracción Monitor. Afortunadamente, se puede emular esta abstracción con otras abstracciones del lenguaje: condition = threading.Condition(threading.Lock()): Creación de una condición de monitor condition.adquire(): Adquiere un lock/acceso para entrar a una zona condition.release(): Libera un lock/acceso para entrar a una zona condition.wait(): Duerme un hilo

9 Ejemplo: Productores y Consumidores con Conditions

10 Ejercicio Propuesto: Implementar lectores y escritores con monitores en Python

11 Comunicación entre Procesos

12 Comunicación entre Procesos
Un proceso se comunica con otro a través de usar archivos como memoria compartida o mensajes. Ejemplos: Cuando Word imprime un archivo, esta aplicación debe comunicarse con el servicio de imprimir Cuando en un chat, dos clientes reciben mensajes entre ellos Cuando un sistema operativo tiene que apagarse, cada aplicación recibe una señal (= mensaje) de cerrarse

13 Condiciones Criticas ¿Quién se encarga?
En procesos también tenemos secciones criticas que deben ser cuidadas. Por ejemplo: Impresora Escritura de archivos Tarjeta de video Etc. ¿Quién se encarga?

14 Soluciones a Secciones Criticas
Se puede ocupar soluciones como semáforos y monitores para administrar este acceso

15 Comunicaciones Entre Procesos: Una Introducción a socket


Descargar ppt "Paul Leger http://pleger.cl Procesos (capitulo 2) Paul Leger http://pleger.cl."

Presentaciones similares


Anuncios Google