PROGRAMACIÓN CONCURRENTE. Tema 5 Monitores



Documentos relacionados
PROGRAMACION CONCURRENTE

Tema 3. Monitores Programación Concurrente

PROGRAMACION CONCURRENTE Y DISTRIBUIDA. II.5 Sincronización basada en memoria compartida: Monitores

CDI Exclusión mutua a nivel alto. conceptos

Tema 3: Concurrencia de procesos

PROGRAMACION CONCURRENTE

El problema de los Filósofos

Concurrencia: Exclusión mutua y Sincronización

Concurrencia: deberes. Concurrencia: Exclusión Mutua y Sincronización. Concurrencia. Dificultades con la Concurrencia

Implementación de monitores POSIX

Sistemas Operativos Temas 4, 5 y 6. Jorge García Duque Despacho: B-202 Tutorías: Lunes 16:00-18:00 y Martes 16:00-20:00

1 (2 5 puntos) Responda con brevedad y precisión a las siguientes preguntas:

I.3. Interacción entre Procesos Concurrentes.

Herencia. 3.- Herencia. Declaración de una clase derivada en Delphi. Jerarquía de clases

Receta general para resolver problemas de sincronización con semáforos

Modulo 1 El lenguaje Java

Concurrencia entre Procesos.

Fundamentos de la Programación

Concurrencia. Primitivas IPC con bloqueo

Benemérita Universidad Autónoma del Estado de Puebla

Práctica 2: El problema de la sección crítica

Instituto de Computación - Facultad de Ingeniería - Universidad de la República

Práctico de Procesos, Hilos y Deadlock

CAPÍTULO 8. Comunicación y sincronización basada en variables compartidas

UNIDAD 5. ESTRUCTURAS DINÁMICAS Y ESTÁTICAS DE ALMACENAMIENTO DE DATOS.

Benemérita Universidad Autónoma del Estado de Puebla

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

1. Equivalencia de herramientas. Implemente las primitivas de las regiones críticas condicionales con semáforos. (2pt).

Sistemas Operativos. Características de la Multiprogramación. Interacción entre Procesos. Características de la Multiprogramación

SISTEMAS OPERATIVOS AVANZADOS

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Concurrencia en.net David Jesús Horat Flotats

un programa concurrente

SOLUCION EXAMEN junio 2006

Examen Febrero de 2012

PROGRAMACIÓN EN JAVA

Ejemplos de conversión de reales a enteros

PASCAL. Repaso de Pascal Introducción a Python. Pascal. Pascal - introducción. Pascal Declaraciones: Variables. Pascal Declaraciones: Tipos 07/04/2015

SIMM: TEORÍA DE LOS S.O. I.E.S. JUAN DE LA CIERVA CURSO 2007/2008

Comunicación y Sincronización con Monitores Resumen del Tema

PROGRAMACION CONCURRENTE. I.2 Recursos para la concurrencia.

Estructura de datos (arreglos) Vectores y Matrices

Objetivo: Introducción conceptual y aplicación básica de los lenguajes del lado del servidor.

Elementos léxicos del lenguaje de programación Java

Academia técnica de computación A.T.C.

Si bien Pascal-FC no trae algunas de las características de Pascal como:

Introducción a la calidad de código

Sistemas Operativos Práctica 4

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

Tema 2. El lenguaje de programación Java (Parte 1)

Mensajes. Interbloqueo

Solución Examen Febrero 2006

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Procesos. Procesos. Concurrencia de procesos. Qué es un proceso? Estados de un proceso. Modelo de 2 estados. (C) 2008 Mario Medina 1

LABORATORIO DE PROGRAMACIÓN II Problemas HOJA 1 RECURSIVIDAD

Se guardan en archivos con extencion c y los cabezales con extension h

Paradigmas de Programación

Programación Concurrente y Paralela. P(S) ; sección crítica P(S);

Cómo nombrar variables ( 2&

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

Enunciado de la tercera práctica de programación I

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática

Tema: Clases y Objetos en C++.

Threads. La plataforma JAVA soporta programas multhreading a través del lenguaje, de librerías y del sistema de ejecución. Dos.

! Una variable declarada con final no puede volver a ser reinicializada. numero = 2;! ! Para definir constantes

Paso de mensajes. Lecturas: Burns & Wellings, Cap.??? Transparencias y apuntes de la asignatura. Filosofía cliente-servidor.

MONITORES EN JAVA. Antonio Tomeu Control de la Concurrencia en Java: API Estándar

Oracle básico (IV): Programación en PL/SQL

Mensajes. (versión preliminar)

Introducción a la programación orientada a objetos

Hilos, comunicación y competencia entre procesos. Dr. Alonso Ramírez Manzanares 2-Sep-2010

Concurrencia. Bibliografía: Introducción a los Sistemas de Bases de Datos Date, C.J.

República Bolivariana de Venezuela Aldea Universitaria Liceo Fray Pedro de Agreda. Lenguaje C++ Contadores y Acumuladores

Examen escrito de Programación 1

Ingeniería Superior de Informática. Curso 3º. Sistemas Operativos. Examen Final. TEORÍA. 31 de Enero de 2005

UTN FRR Ingeniería en Sistemas de Información Algoritmos y Estructuras de Datos Archivos Directos GUIA DE ESTUDIO: ARCHIVOS DIRECTOS

COLAS. GRUPO # 22 Alumnos: Aguilar Elba Barrios Miguel Camacho Yaquelin Ponce Rodríguez Jhonny

Práctico 5. Definiciones Inductivas - Segunda Parte -

MS_80507 Introduction to Microsoft Dynamics CRM 2011

Sistemas Operativos. Curso 2016 Procesos

Programación concurrente

Introducción a la Programación

3.1 Introducción a VHDL

Sistemas Operativos. Curso 2014 Planificación

Programación estructurada

Tema 4. Gestión de entrada/salida

Sistemas Operativos. Curso 2015 Planificación

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System.

15. Arquitectura de los multiprocesadores. 16. Multiprocesadores de memoria compartida. 17. Multicomputadores.

Modelos de Software. Ingeniería en Sistemas de Información 2015

Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4

Proyecto de Diseño 2

El Concepto De Objeto y Clase

CONCEPTOS BASICOS DEL LENGUAJE JAVA

ESTRUCTURA DE DATOS: ARREGLOS

Monitores. Implementación de un Buffer con monitores

Estructura de Datos: Archivos. Programacion I Mgter. Vallejos, Oscar A.

Estructura de Datos y de la Información. Pilas y expresiones aritméticas

Transcripción:

PROGRAMACIÓN CONCURRENTE Tema 5 Monitores 1

Indice Definición de los monitores Sincronización condicional usando monitores Algunos problemas con monitores 2

Problemas de las regiones críticas condicionales Pueden estar dispersas en el texto del programa. La integridad de la estructura de datos compartida es facilmente dañada debido a que no hay control sobre que operaciones son realizadas por el programador dentro de una region crítica. Dificiles de implementar eficientemente. 3

Definición de los monitores Las regiones críticas se escriben como funciones y se encapsulan juntas en un módulo único llamado monitor. 4

Definición de los monitores Un monitor es un mecanismo que permite compartir de una manera fiable y efectiva tipos abstractos de datos entre procesos concurrentes. Asi pues un monitor proporciona: Abastracción de datos Exclusión mutua y mecanismos de sincronización entre procesos. Un monitor es similar a un TAD en el sentido de que esconde la represnetación interna de sus variables y proporciona al exterior sólo el comportamiento funcional definido por las operaciones exportadas. 5

Definición de los monitores Un procedimiento exportado se puede invocar desde fuera del monitor: identificador_monitor.identificador_procedimiento(parametros_actuales); El compilador garantiza que el acceso al código dentro de un monitor se realiza bajo exclusión mutua. Un proceso que intenta ejecutar un procedimiento del monitor cuando hay otro proceso ejecutando uno de los procedimientos en el mismo monitor se bloquea en la cola del monitor Cuando un proceso finaliza su llamada a procedimiento de monitor, la exclusión mutua se pasa a uno de los procesos bloqueados. 6

Sincronización condicional usando monitores La sincronización condicional se proporciona mediante variables etiquetadas como condition. Son colas FIFO (inicializadas automáticamente a la cola vacía en la declaración) que no tiene valores accesibles para el programador. Se declaran: var C: condition; Se declaran dentro de un monitor y se usan para bloquear y desbloquear procesos. 7

Sincronización condicional usando monitores Se definen dos operaciones (procedimientos) sobre una variable condition (C): delay(c) resume(c) delay(c) libera el monitor y bloquea el proceso invocador en C. resume(c) desbloquea el primer proceso esperando en C. La función empty retorna un valor booleano que determina si la cola está vacía. 8

Problema: Productor-Consumidor Buffer Limitado (1) monitor Buffer; const TamañoBuffer = 5; MaxIndBuffer = 4; var Almacen : array[0..maxindbuffer] of char; NumChar: integer; NoLleno, NoVacio : condition; ProxEn, ProxSal: integer; procedure Insertar(ch: char); if NumChar >= TamañoBuffer then delay(nolleno); Almacen[ProxEn] := ch; NumChar := NumChar +1; ProxEn := (ProxEn +1) mod TamañoBuffer; resume(novacio); procedure Sacar(var ch: char); if NumChar = 0 then delay(novacio); ch := Almacen[ProxSal]; NumChar := NumChar -1; ProxSal := (ProxSal +1) mod TamañoBuffer; resume(nolleno); NumChar := 0; ProxEn := 0; ProxSal := 0; 9

Problema: Productor-Consumidor Buffer Limitado (2) process Productor; var local : char; for local := a to z do Buffer.Insertar(local); process Consumidor; var ch: char; repeat Buffer.Sacar(ch); write(ch); until ch = z ; writeln program pcmon; (*Definición del monitor*) (*Proceso productor*) (*Proceso consumidor*) co Productor; Consumidor; coend 10

Problema: Lectores Escritores (1) process type Lector; repeat LeerEscribir.Entrada(true); (*Acceder a los datos*) LeerEscribir.Salida(true); (*Usar la información*) forever process type Escritor; repeat (* Producir nueva información *) LeerEscribir.Entrada(false); (*Modificar los datos*) LeerEscribir.Salida(false); forever 11

Problema: Lectores Escritores (2) monitor LeerEscribir; var ContadorLect: integer; EscritorActivo: boolean; OKLeer, OKEscribir: condition; procedure Entrada(Leyendo: boolean); if Leyendo then if EscritorActivo or not empty(okescribir) then delay(okleer); ContadorLect := ContadorLect +1; resume(okleer); end else if EscritorActivo or (ContadorLectores <> 0) then delay(okescribir); EscritorActivo := true; end procedure Salida(Leyendo: boolean); if Leyendo then ContadorLect := ContadorLect -1; if ContadorLect = 0 then resume(okescribir); end else EscritorActivo := false; if not empty(okleer) then resume(okleer) else resume(okescribir) end EscritorActivo := false; ContadorLect := 0; 12