Cena de filosofos y sincronizacion java

Documentos relacionados
CAPÍTULO 3. PROCESOS VS. HILOS

de Gran Canaria Centro de Tecnología Médica Programación Concurrente

Sistemas Operativos. Procesos

PROBLEMAS CLÁSICOS DE LA COMUNICACIÓN N ENTRE PROCESOS

Programación Concurrente en Java: Threads. Ejemplos de programación concurrente. Luis Fernando Llana Díaz. 24 de abril de 2008

dit UPM Tema 3: Concurrencia /threads (python) Análisis y diseño de software José A. Mañas

Aplicación SmartHunter

Concurrencia. Concurrencia

Arquitecturas cliente/servidor

Programación Concurrente y Paralela. Unidad 1 Introducción

Lección 10: Ejemplos de programación con semáforos

TEMA 3. CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO. Definición y objetivos de un S.O

Participantes: Avila Aida Betancourt Sioly Briceño Susana Rojas Alejandro

Concurrencia y paralelismo

dit Planificación de tareas de tiempo real Juan Antonio de la Puente DIT/UPM UPM Copyright 2007, Juan Antonio de la Puente

ESCUELA DE INGENIERIA Informática Y Sistemas

Normalmente, los programas son ejecutados de forma secuencial. Único flujo de control

Aplicaciones Concurrentes

Programación concurrente en Java. Breve introducción. Miguel Ángel LATRE Dept. de Informática e Ingeniería de Sistemas

Tema 1: Programación Multiproceso. Curso

Sistemas Operativos: Programación de Sistemas. Curso Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J.

Tema 12: El sistema operativo y los procesos

Estados de un proceso

Programación Orientada a Eventos

Programación Concurrente en Java: Threads

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

Sistemas Operativos. Curso Página Web: Asignaturas de programación en el plan de estudios

1 HILOS (THREADS) EN JAVA

SINCRONIZACIÓN DE PROCESOS

Ejercicios de Hilos. Índice

Sincronización de Threads

PROGRAMACIÓN CONCURRENTE

Diseño de sistemas concurrentes

PROGRAMACION CONCURRENTE

Herramientas Concurrentes en JAVA

Universidad Autónoma del Estado de Hidalgo Instituto de Ciencias Básicas e Ingeniería Área Académica de Computación y Electrónica

PROBLEMAS CLÁSICOS. EL PROBLEMA DE LOS FILÓSOFOS COMENSALES.

Interbloqueo. Concurrencia: Interbloqueo e Inanición

SISTEMAS OPERATIVOS I (Sistemas) / SISTEMAS OPERATIVOS (Gestión) septiembre 2009

TEMA 5: Control de la Concurrencia en Java (API Estándar)

Tecnología de software para sistemas de tiempo real

Programación concurrente

PROGRAMACION CONCURRENTE

Object 1. Threads en Java

Unidad IV: Programación concurrente (MultiHilos) 4.1. Concepto de hilo

7. Programación Concurrente

Tema 1: Principios de Java

T5-multithreading. Indice

Concurrencia entre Procesos.

Manipulación de procesos

Arquitectura del PLC. Dpto. Electrónica, Automática e Informática Industrial)

GESTION DE LA MEMORIA

Hilos. Módulo 4. Departamento de Informática Facultad de Ingeniería Universidad Nacional de la Patagonia San Juan Bosco. Hilos

BASE DE DATOS DISTRIBUIDOS

Programación concurrente y semáforos en Java

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

Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1. Exclusión mutua con semáforos

Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria

Test SITR Temas: Planificación, Sincronización, Comunicación entre Procesos, Relojes, Señales, Temporizadores (TestSITR_T4 T9)

Java: Programación Multithread

Federico Peinado

PROCEDIMIENTOS ALMACENADOS

Sistemas operativos. Hasta ahora hemos visto. Relación programa-sistema operativo Gestión de memoria

CDI Exclusión mutua a nivel alto. conceptos

Modelo Dinámico del Diseño del Software y Representación en UML. UNIDAD 9 Análisis y Diseño de Sistemas de Información

Entrada/Salida y bloqueo mutuo. Dr. Alonso Ramírez Manzanares 19-Oct-2010

Semáforos. Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1. Exclusión mutua con semáforos

Unidad V: Sistemas de archivos 5.1 Concepto

1 ( 3,5 puntos) Responda, justificando sus respuestas, a las siguientes cuestiones:

Sistemas Operativos Tema 5. Procesos José Miguel Santos Alexis Quesada Francisco Santana

Concurrencia. Primitivas IPC con bloqueo

El modelo de Procesos

Conexiones dedicadas y compartidas: pool de conexiones.

Fecha de entrega: Miércoles 4 de Septiembre. Campus: Villahermosa. Carrera : Ingeniería en Sistemas Compuacionales. Nombre del maestro: Carlos Castro

Tema 6: Clases. Índice

SISTEMAS OPERATIVOS:

ANX-PR/CL/ GUÍA DE APRENDIZAJE. ASIGNATURA Concurrencia. CURSO ACADÉMICO - SEMESTRE Segundo semestre

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

Sistemas Operativos. Dr. Luis Gerardo de la Fraga. Departamento de Computación Cinvestav

Práctico 2. Sincronización

Paradigma de paso de mensajes

Programación Concurrente

fundamentos de programación (unidad 4) programación estructurada en Java

Funcionamiento de la computadora

ORGANIZACIÓN DE COMPUTADORAS

Sistemas Distribuidos. Soporte de Sistemas Operativos

Cliente- Servidor. Bases de Datos Distribuidas

ARQUITECTURA BÁSICA DEL ORDENADOR: Hardware y Software. IES Miguel de Cervantes de Sevilla

Concurrencia en.net David Jesús Horat Flotats

1. INTRODUCCIÓN 1.1. Qué es un sistema operativo? El sistema operativo como máquina extendida El sistema operativo como gestor de

Gestión de Entrada-salida

UNIVERSIDAD DEL CARIBE UNICARIBE. Escuela de Informática. Programa de Asignatura

Procesos cooperativos:

CARTA DESCRIPTIVA (FORMATO MODELO EDUCATIVO UACJ VISIÓN 2020)

HP - UX. Qué es HP UX?

INDICE 1. Introducción 2. Entrada / Salida: Principios y Programación 3. Procesos

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

Mensajes. Interbloqueo

Procesos Definición y Estados

Nimbus, servicios en la nube. Google Drive para PC

Transcripción:

Programación concurrente y Distribuída Curso 2011-12 Miguel Telleria, Laura Barros, J.M. Drake telleriam AT unican.es Computadores y Tiempo Real http://www.ctr.unican.es

Objetivos Presentaros la aplicación de filósofos chinos con UML Practicar lo visto en sincronismo de java Prepararos para la practica 2 que es muy similar 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34

Contenido Presentación de los filósofos chinos Especificación UML Paralelización Sincronización de espera Sincronización bloqueante 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 3 de 34

Presentación de los filósofos chinos

4 filósofos Los filósofos chinos Rojo, azul, amarillo, verde 4 palillos 1 entre cada 2 filósofos Gestor de sillas: Numero de sillas configurable Ciclo de cada filosofo: Pensando esperando silla esperando palillo derecho esperando palillo izquierdo comiendo 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 5 de 34

Vamos a verla funcionar 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 6 de 34

Especificación UML

Diagrama de clases 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 8 de 34

Comedor Computadores y Tiempo Real Misiones Palillo Datos globales Punto de acceso para el resto de las clases Determina si da una silla o no GUI Filosofo Objetos activos Gestor de sillas Modo polling: Devuelve falso si el palillo está cogido Modo espera: Bloquea hasta que el palillo esté libre Prueba secuencial Instancia el sistema Crea los threads Termina la ejecución Mantiene la cantidad de sillas libres 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 9 de 34

Filosofo Objeto activo con su ciclo de vida Decisión de diseño: Aunque tiene asociados los palillos, invoca los métodos coge() y deja() a través del comedor 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 10 de 34

Da acceso al resto de elementos Elección de diseño: Comedor La clase Palillo devuelve si el palillo está libre El Gestor de Sillas simplemente informa es el comedor el que devuelve si sí o si no. 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 11 de 34

Se deja coger o no: Palillo Es decir, es el propio palillo el que maneja su política de acceso El atributo privado palillotomado es el que lleva la cuenta de si hay palillo o no 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 12 de 34

GestorSillas Usado para evitar el bloqueo múltiple El cojosilla() directamenta da el acceso a la silla El atributo privado sillasdisponibles es el que lleva la cuenta de si hay silla libre o no. 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 13 de 34

Programa principal Instancia los threads y espera a que el tiempo de ejecución se termine. Define el numero de sillas Define el tiempo de actualización 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 14 de 34

El filósofo pasa de un estado a otro mediante el método actualiza(). Estados del filosofo 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 15 de 34

Paralerización (similar a la práctica 1)

Cambios en el programa principal El main() ya no llama a actualiza Lo hará el propio thread en su run() El main se simplifica a: Se crean los filosofos Se les arrancan (si no se arrancan ellos sólos) Se espera un tiempo de ejecución Se ejecuta termina() en ellos 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 17 de 34

Cambios en el filósofo El actualiza() se llama internamente desde el run() Se puede auto-arrancar (si heredamos de Thread) Si no nos arranca el que nos crea 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 18 de 34

Vamos a ejecutarlo Se respeta el número de sillas? Se mantiene el acceso exclusivo a los palillos? 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 19 de 34

Sincronización de espera

Identificamos la sincronización Que Objetos tenemos que sincronizar Información compartida concurrentemente Y que es posible que entre en incoherencia Limitación de las secciones críticas Lectura?, Escritura? Atomicidad Ámbito de la sincronización Que objetos tienen que esperar No sobresincronizar 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 21 de 34

Cosas que no hace falta sincronizar Variables locales (ej estado) Ya que están duplicadas en cada thread Acceso concurrente en sólo lectura Mientras no haya ningún escritor a la vez claro Accesos ya gestionado por una librería o sistema operativo (mientras no importe que se haga en un orden u otro) La GUI: SWT mantiene su propio thread para ello Dispositivos: discos duro, pantalla... 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 22 de 34

Métodos synchronized vs bloque synchronized El método synchronized es equivalente a: Envolver todo el código del método con synchronize(this) Si la clase está bien diseñada con esto puede bastar Nos aseguramos de que nadie se olvida sincronizar Con que uno se olvidase no se mantiene la exclusión mutua 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 23 de 34

Métodos synchronized vs bloque synchronized Sin embargo a veces esto no siempre es posible La sincronización (duración o ámbito) puede depender de un argumento, un estado, un instante... Si sé que en cierto estado voy a ser el único en acceder a la información A veces la sección crítica abarca más de un método Ej: test_and_set() Buen diseño: poner el mutex lo más profundo posible Los objetos llamantes no deberían verlo La implementación es quien debería definir el ámbito en función de un atributo privado Si es necesario se pone synchronize(this) en parte del código Caso test_and_set(), dar un método sincronizado que englobe los dos. 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 24 de 34

Es necesario sincronizar en la implementación secuencial? Si?, No?, Por qué? Y no vale con que no hay concurrencia ya que actualiza no deja de ser un planificador cíclico... 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 25 de 34

Es necesario sincronizar en la implementación secuencial? (respuesta) NO es necesario Puesto que todas las llamadas a actualiza() Se ejecutan de manera atómica Dejan las variables en estado coherente Podría no ser así Ej: que haya un estado (miro si silla libre) y luego otro (cojo silla). 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 26 de 34

Solución primera Puesto que todos usamos el comedor Hacemos los métodos del comedor synchronized Funciona? Que inconvenientes presenta? 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 27 de 34

Inconvenientes de la solución primera Dos filosofos de frente accederían a coge y deja palillo de manera exclusiva. El tomar la silla también impediría a otro filósofo empezar a tomar (o dejar el palillo). Tenemos sobre-sincronización al usar un único lock global 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 28 de 34

Hilamos más fino Cada filosofo retendrá el lock del objeto que esté usando No habrá contención en palillos enfrentados No habrá contención entre palillos y sillas 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 29 de 34

Sincronización bloqueante

Esperas activa vs espera bloqueante Independientemente del ámbito, duración y datos protegidos tenemos 2 estrategias de actuación: Espera activa: Se pregunta reiteradamente el estado de un recurso opcionalmente con un sleep. Ventaja 1: Sencillez de implementación, Ventaja 2: No es bloqueante (ej multicore en ciertos entornos) Inconveniente: Gasto inútil de CPU Espera bloqueante: Se queda dormido a la espera de ser notificado Ventaja: Ahorro de CPU (a veces es relativo) Desventaja: Requiere de ciertos recursos del entorno y de bloqueos En la mayoría de los casos preferiremos la espera bloqueante. Ejemplo donde no: Las interrupciones hardware Si nos bloqueamos, el scheduler no nos despierta (no somos proceso del S.O.). Alternativa: Hacemos un pooling y nos volvemos a programar 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 31 de 34

Como lo hacemos Comportamiento de variable de condición + mutex: wait(): Nos suspendemos y soltamos el lock notify(): Despertamos a uno y le entregamos el lock notifyall(): Despertamos a todos y se ejecutarán 1 a 1 atómicamente con el lock tomado. Cosas a tener en cuenta: Sólo podemos ejecutarlos sobre el objeto en el que estamos sincronizados. Por lo tanto tenemos que estar en ámbito synchronized Siempre que hagáis un wait() no olvidéis que tiene que haber un notify() o notifyall() correspondiente. Englobar todo en un predicado lógico Ya que al salir del wait() puede seguir habiendo contención y nos tenemos que volver a dormir. Esto ocurre siempre con los notifyall() 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 32 de 34

Dos diferencias: Wait() y sleep() sleep() no suelta el lock Por lo tanto impedimos el acceso al objeto mientras el objeto duerme. sleep() vuelve inmediatamente de un interrupt() wait() vuelve sólo cuando se le notifica en ambos casos salta la interrupción InterruptedException 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 33 de 34

Hagamos la prueba!! Diferencias entre palillo y gestor de sillas El objeto palillo puede hacer el wait() el mismo La clase sillas no puede hacer el wait() a menos de que tome la responsabilidad de gestionar su propio acceso. 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 34 de 34