Monitores Mecanismo sincronización de nivel más alto que semáforos Construcción a nivel de lenguaje de programación que controla el acceso a datos compartidos.

Slides:



Advertisements
Presentaciones similares
GESTION DE PROCESOS.
Advertisements

2. Manejo de memoria Manejo de memoria estática
Mecanismo de semáforos
Lenguaje de programación Java
I.T.E.S.R.C. Romina Tamez Andrea Martínez Ma. De Lourdes Solís
ADA: lenguaje de programación concurrente
INTERPROCESS COMMUNICATIONS-1 Cátedra: Sistemas Operativos UTN-FRSF
Daniel Morillo Jorge Boscán Gregory Carrasco
Introducción a la Programación
Técnico en programación de Software
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
Concurrencia en JAVA JAVA es un lenguaje que tiene soporte de concurrencia, mediante Threads. Un thread es un proceso “liviano” (lightweight process) que.
Conceptos de la clase anterior
Programación Concurrente DAI - UNSAAC.
SISTEMAS OPERATIVOS UNIDAD 1..
7a.1 Silberschatz, Galvin y Gagne ©2003 Sistemas Operativos 6ª edición Capítulo 7: Sincronización de procesos parte a.
Funciones en lenguaje C
Estructuración y modularidad de los programas Fundamentos de Programación/ Programación I
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
HILOS Y COMUNICACIÓN ENTRE PROCESOS
Semana 5 Subprogramas..
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
Concurrencia: Exclusión Mútua y Sincronización
Capítulo 3 Concurrencia: exclusión mutua y sincronización. Comunicación entre procesos.
Sincronización de Procesos Semáforos Emely Arráiz Ene-Mar 08.
Semáforos Cecilia Hernández
Unidad III Administración de procesos
Control de flujo: Bucles
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors Sincronización de Threads en Java Josep Joan.
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
Profesor: Rodrigo Sanhueza Figueroa
Sistemas Concurrentes: programación concurrente
IET110 Sistemas Operativos P04: Exclusión Mutua Prof. Jonathan MakucSlide: 1.
Sistemas en tiempo real (STR)
INSTITUTO TECNOLOGICO SUPERIOR DE TAMAZUNCHALE INTEGRANTES: MAXIMO HERNANDEZ BAUTISTA CLAUDIA JIMENEZ PROCOPIO ANA LUZ RODRIGUEZ JONGUITUD LEONEL AQUINO.
Hebras Cecilia Hernández. Qué es un proceso? Consiste Espacio de direccionamiento Código a ejecutar Datos estáticos y dinámicos Pila o stack CPU: PC,
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
CS-432: Ingeniería Moderna de Software Semana 3
 El acceso concurrente a datos compartidos puede dar pie a inconsistencia de datos  Mantener la consistencia de los datos requiere mecanismos para asegurar.
Sincronización de Procesos Conceptos Problema SC Soluciones Software Soluciones Hardware Emely Arráiz Ene-Mar 08.
Programación secuencial vs programación concurrente
Sincronización de Procesos
Sincronización de Procesos
Tema 9.6: Sincronización de Procesos
Monitores Cabudare, noviembre de 2010 Universidad Fermín Toro
Programación secuencial vs programación concurrente
Teoría de Sistemas Operativos Sincronización Procesos Departamento de Electrónica 2º Semestre, 2003 Gabriel Astudillo Muñoz
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
Integrantes: Ma Carmen Zaragoza Santiago Leticia González Hernández Abraham Obispo Antonio Alexis González Ramírez Eduardo Hernández Tolentino.
TEMA 2. Programación Concurrente
Administrador de procesos
Introducción a los SOs.
Teoría de Sistemas Operativos Departamento de Electrónica 2º Semestre, 2002 Gabriel Astudillo Muñoz
Informática III 2009 Ing. Estela D'Agostino 1 Programación secuencial vs programación concurrente Pascal, C, Fortran, Cobol Secuenciales único hilo de.
Teoría de Sistemas Operativos Sincronización Procesos
Threads en Java  Threads: programas multitarea  Creación de threads  Ciclo de vida de un thread  Sincronización.
UTFSM - Sistemas Operativos
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Abstracción.
Estructuras de Decisión
Licenciatura Tecnologías de la Información y Comunicación
PROGRAMACION DE Pilas o Stacks
Desarrollador Profesional de Juegos Programación III Unidad II introducción a Mutex Secciones críticas.
ESTRUCTURAS DE DATOS “Conceptualización de estructuras de datos” Por: Eduardo Robayo.
Desventajas Poco eficiente: lectura y escritura en disco es lenta Necesita otro mecanismo de sincronización para acceder a los datos Son los procesos.
P ROCESO DE E NSAMBLADO Cámara Vázquez Berenice Rubí.
Katty Evangelina Hipólito Chi.   Aunque cada maquina tiene un lenguaje ensamblador distinto, el proceso de ensamblador tiene suficiente similitudes.
Tema 1: Concurrencia con Java
1 Tema 6: Concurrencia de Procesos Sistemas Operativos.
Monitores Mecanismo sincronización de nivel más alto que semáforos Construcción a nivel de lenguaje de programación que controla el acceso a datos compartidos.
Transcripción de la presentación:

Monitores Mecanismo sincronización de nivel más alto que semáforos Construcción a nivel de lenguaje de programación que controla el acceso a datos compartidos Código de sincronización es agregado por el compilador y es reforzado en tiempo de ejecución Por qué este es un mejor enfoque que el proporcionado por semáforos?

En qué consiste un Monitor? Módulo de software que encapsula Estructuras de datos compartidas Procedimientos que operan con los datos compartidos Sincronización entre hebras/procesos concurrentes que llaman procedimientos Garantiza acceso a datos compartido se realice sólo a través de los procedimientos definidos para su acceso

Ilustración de un Monitor Datos compartidos Procedimientos Código de Inicialización Cola de hebras para usar Monitor Sólo una hebra en Monitor al mismo tiempo

Cómo controla acceso Monitor Exclusión mutua Sólo una hebra/proceso puede estar ejecutándose dentro del monitor Sincronización esta implícita en el monitor Si una hebra/proceso trata de entrar al monitor cuando esta ocupado, entonces se bloquea hasta que se desocupe Más restrictivo que semáforos Más fácil de usar Una vez dentro de un monitor una hebra puede verse incapacitada de continuar Permite a una que está esperando entrar a monitor

Variables de Condición Cuando hebra está dentro de un monitor si no puede continuar se bloquea Si provee evento que eventualmente otra puede estar esperando notifica a posible hebra que espera que puede entrar al monitor Variables de Condición se usan para tal efecto Variables de condición pueden ser accesadas sólo desde dentro de un monitor Hay tres operaciones que se pueden realizar con variables de condición

Operaciones con Variables de Condición Una hebra/proceso puede realizar las siguientes operaciones con variables de condición Wait(var_cond) libera lock del monitor y se bloquea espera por otra hebra que le active (signal) la condición var_cond. (cuando es despertada recupera lock) variables de condición tienen asociadas cola de espera por var_cond Signal(var_cond) despierta una (si hay) hebra/proceso esperando por var_cond signal se pierde si nadie espera por var_cond Hoare: hebra que notifica inmediatamente entrega lock a hebra que despierta Mesa: hebra que notifica mantiene lock y procesador (requiere signal sea última instrucción despues de salir de procedimiento) broadcast(var_cond) despierta todos las hebras esperando por var_cond

Monitores, incluyendo variables de condición lock Var cond1Var cond2 Procedimientos monitor Cola espera monitor Colas esperas Variables de condición

Cómo resolver problemas con monitores? Identificar restricciones inherentes al problema Identificar datos a encapsular en monitor Definir procedimientos que accesarán datos Identificar condiciones de espera y señalización, asociar a variables de condición Identificar condiciones por las cuales hebras podrían necesitar para ejecutarse exitosamente en procedimientos Identificar condiciones que se pueden producir en procedimientos que podrían necesitar otras hebras Escribir los algoritmos

Ejemplo productor/consumidor Identificar restricciones inherentes al problema Las mismas que para el caso con semáforos (el problema es el mismo) Identificar datos a encapsular por monitor Buffer, in, out, contador Identificar procedimientos Ingresar: llamado por productores, manipular in, buffer y contador en forma exclusiva Remover: llamado por consumidores, manipular out, buffer y contador en forma exclusiva Identificar condiciones de espera y señalización Productor necesita esperar si buffer está lleno Productor debe señalizar a consumidor después de ingresar un elemento (consumidor puede estar esperando por uno buffer estaba vacío) Consumidor necesita esperar si buffer está vacío Consumidor debe señalizar a productor después de sacar un elemento de buffer (productor puede estar esperando por posición vacía) Variables de condición. Not_empty y not_full. Productor espera por condición not_full y señaliza condición not_empty despues de ingresar un elemento. Consumidor espera por condición not_empty y señaliza condición not_full, despues de sacar un elemento

Usando Monitores con Productor/Consumidor Monitor Producer_Consumer { buffer items[N]; condition not_full, not_empty; int count_items; // número de items en el buffer int in, out; procedure add_entry(item x){ while(count_items == N) wait(not_full); items[in] = x; in = (in + 1)%N; count_items++; signal(not_empty); } procedure get_entry(item *x){ while(count_items == 0) wait(not_empty); *x = items[out]; out = (out + 1) %N; count_items--; signal(not_full); }

Tipos de Monitores Qué significa operación signal? Monitores de Hoare Ejecutar hebra que espera inmediatamente Hebra que notifica se bloquea inmediatamente condición garantizada para cuando hebra que esperaba se ejecute hebra que notifica debe restaurar invariantes de monitor antes de notoficar Monitores Mesa Hebra que espera se prepara para ejecutar, pero hebra que notifica sigue en ejecución hebra que espera se ejecuta cuando hebra que notifica sale de monitor condición puede ser falsa cuando hebra que esperaba se ejecuta Hebra que notifica no necesita restaurar invariantes de monitor Hebra que esperaba debe volver a verificar por condición

Ejemplos con los dos tipos Monitors de Hoare if (not_ready) wait(var_cond) Monitors de Mesa while(not_ready) wait(var_cond) Monitores de Mesa son más fáciles de usar más eficiente, menos cambios, soporta broadcast directamente Monitores de Hoare condición está garantizada de ser verdadera cuando hebra que espera se ejecuta

Monitores en Java Del tipo Mesa Métodos deben ser declarados con palabra clave “synchronized” Variables de condición son anónimas Operaciones wait() corresponde a wait(var_cond) notify() corresponde a signal(var_cond) despierta una hebra esperando por condición. No garantía de que sea la que h aesperado por más tiempo notifyAll() corresponde a broadcast(var_cond) todas las hebras esperando condición despiertan. Cualquiera de ellas puede ejecutarse

Variables de Condición y Mutex Caso pthreads Otra construcción Variables de condición pueden ser usadas con mutexes pthread_mutex_t mutex; pthread_cond_t var_cond; boolean ready; void any(){ pthread_mutex_lock(&mutex); if(!ready) pthread_cond_wait(&var_cond, &mutex); …. ready= TRUE; pthread_cond_signal(&var_cond); pthread_mutex_unlock(&mutex); }

Resumen Monitores de nivel más alto que semáforos Permiten relacionar datos con primitiva de sincronización Un lock por monitor, hebras pueden salir entrar de monitor temporalmente según condiciones Deben ser soportados por lenguaje de programación Exclusión mutua garantizada por compilador Aunque es posible usar locks y variables de condición Menos flexible Estructura de datos bien definida