Herramientas Concurrentes en JAVA



Documentos relacionados
Modelo de Objetos Distribuidos

Concurrencia. Primitivas IPC con bloqueo

1 HILOS (THREADS) EN JAVA

Concurrencia en Java

Object 1. Threads en Java

SISTEMAS DISTRIBUIDOS

RMI [Remote Method Invocation]

Java Inicial (20 horas)

DISEÑO DE UNA ARQUITECTURA CLIENTE/SERVIDOR MEDIANTE OBJETOS DISTRIBUIDOS EN JAVA

Curso de Java POO: Programación orientada a objetos

Memoria compartida y semáforos r/w. La página del manual que podría servir para describir estas funciones es la siguiente:

Concurrencia en.net David Jesús Horat Flotats

Ingeniería del Software Arquitectura Física en 3 niveles

Unidad 1: Conceptos generales de Sistemas Operativos.

CONTENIDO. Serialización. Carga dinamica de stubs RMI AVANZADO. Callbacks. Carga dinámica de Stubs

Plataforma desarrollo Java Formación elearning tutorizada en castellano. Fabricante: Java Grupo: Desarrollo Subgrupo: Master Java

CDI Exclusión mutua a nivel alto. conceptos

Llamada a métodos remotos (RMI). Curso 04/05. Tema 9. Departament d Informàtica. Universitat de València. 1. Introducción 2

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

Java RMI. Sistemas Distribuidos Rodrigo Santamaría

Arquitectura Cliente/Servidor. Invocación de Métodos Remotos RMI: Remote Method Invocation. Llamadas a Métodos Remotos

Tema 1. Introducción a JAVA

Java RMI Remote Method Invocation. Invocación Remota de Métodos en Java

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

Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente.

Introducción... 1 Qué es Java?... 1 Compilando a Bytecode... 1 Usando jgrasp Para Hacer el Trabajo Sucio... 5 El Entorno de jgrasp...

Concurrencia entre Procesos.

1. Visión general de RMI

Benemérita Universidad Autónoma del Estado de Puebla

A continuación resolveremos parte de estas dudas, las no resueltas las trataremos adelante

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

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

Enterprise JavaBeans

Java y JVM: programación concurrente


SISTEMAS OPERATIVOS AVANZADOS

INF 473 Desarrollo de Aplicaciones en

MICQ. Trabajo Práctico Final Seminario de Ingeniería en Informática I Facultad de Ingeniería, UBA. Junio Cátedra: Pablo Cosso

Interacción entre Aplicaciones: objetos distribuidos e invocación remota

INTRODUCCIÓN A JAVA. Índice

GUIA PROGRAMACIÓN ORIENTADA A OBJETOS

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

Federico Peinado

Práctica 5: Callbacks RMI.

4. Programación Paralela

INFRAESTRUCTURA Y COMUNICACIONES DGA

Tema 2: Implementación del núcleo de un Sistema Operativo

Sistemas Distribuidos Java RMI (Remote Method Invocation) Alberto Lafuente Mikel Larrea Dpto. ATC, UPV/EHU

Sistemas Operativos. Curso 2016 Procesos

1. Introducción 2. Historia 3. Características clave 4. Cuestiones de diseño

TEMA 5. Otras arquitecturas distribuidas II. Objetos distribuidos y CORBA

Tema 1 Introducción. Arquitectura básica y Sistemas Operativos. Fundamentos de Informática

SISTEMAS DISTRIBUIDOS DE REDES 3.- ESTANDAR CORBA Características

JAVA RMI (REMOTE METHOD INVOCATION)

Configuracion Escritorio Remoto Windows 2003

Implementación de monitores POSIX

2.2.- Paradigmas de la POO

Práctica 2: Java Remote Method Invocation (RMI)

Módulo 2. Inicio con Java

.NET y J2EE VALORACIÓN Y COMPARACIÓN DE LOS ELEMENTOS DE LAS DOS PLATAFORMAS. Definiciones...2 C# y Java...3 Similitudes...4 Ventajas...

JAVA. 40 horas 60 días

Concurrencia en Java

picojava TM Características

Configuración del servicio de printers CUPS

Programación Orientada a Objetos en Java

CURSO: Programación de Aplicaciones en Lenguaje JAVA

Administración de la red (Windows 2008)

Hilos en Java. Crear un Hilo. Detener un hilo. Fuente:

Facultad de Ciencias del Hombre y la Naturaleza SISTEMAS OPERATIVOS DE REDES CICLO II Materia: Sistemas Operativos de Redes Tema:

Capítulo 1 Introducción a la Computación

Tema 4. Gestión de entrada/salida

Práctica 5. Curso

Maquinas virtuales Conceptos Básicos

Prácticas con Elastix Asterisk - Lab. 3

Capítulo 6. Introducción a la POO

La interoperabilidad se consigue mediante la adopción de estándares abiertos. Las organizaciones OASIS y W3C son los comités responsables de la

Introducción a la programación orientada a objetos

Activación de un Escritorio Remoto

CAPITULO 3 VRML-JAVA-WWW

Arquitectura de Software

COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX

Anexo B. Comunicaciones entre mc y PC

COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA

Benemérita Universidad Autónoma del Estado de Puebla

Modelos de los sistemas distribuidos. Jorge Iván Meza Martínez

Qué es Java? Introducción a Java. Lenguajes Orientados a Objetos. Qué es Java? Historia de Java. Objetivos de Java

INTELIGENCIA ARTIFICIAL 2015 TALLER RÁPIDO DE PROGRAMACIÓN EN JAVA

(PHP y APACHE), y el programa de comunicación Skype, para controlar de manera

Laboratorio de PCs. Práctica 3: Montaje de una red de Área local

Remote Method Invocation (RMI) de Java

Web Services en Java. Taller de Programación. Instituto de Computación Facultad de Ingeniería Universidad de la República

CURSO DE PROGRAMACIÓN EN JAVA J2EE 7 ÍNDICE

SBConta.NET Manual de instalación. SBSS Consulting, S.A Barcelona Telf , fax web

Proyecto MONO. Juantomás García. 1. Introducción. GNOME Hispano

Instalar protocolo, cliente o servicio nuevo. Seleccionar ubicación de red. Práctica - Compartir y conectar una carpeta

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

JAVA - Serializacíon / RMI. (C) Philippe Roose , 2005

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

Transcripción:

Herramientas Concurrentes en JAVA David Jesús Horat Flotats

ÍNDICE 1. Introducción n a Java 2. Herramientas Concurrentes en Java 3. Lectores Escritores (2º) 4. Filósofos comensales 5. Chat usando RMI 6. CORBA

1. Introducción n a Java Desarrollado por Sun Microsystems, salió a la luz en verano de 1995 Java es portable Independencia de la arquitectura y del Sistema Operativo Se compila en un lenguaje intermedio llamado Byte Code Se interpreta por la Java Virtual Machine (JVM) para adaptarlo a la arquitectura y el Sistema Operativo

1. Introducción n a Java Java es orientado a objetos y su sintaxis es muy parecida a C++ No existen: Punteros ni referencias Registros (struct( struct) Definición n de tipos (typedef( typedef) Añade: Recolector de basura (Garbage( Collector)

1. Introducción n a Java Soporta las tres características propias del paradigma de la orientación n a objetos Encapsulación Herencia polimorfismo. Soporta hilos y tiene herramientas de concurrencia Actualmente: Versión n estable: J2SE 1.4.2 Beta 1: J2SE 1.5.0

2. Herramientas Concurrentes 2.1 Introducción n a los hilos 2.2 Synchronized 2.3 Variables condición 2.4 Remote Method Invocation

2.1 Introducción n a los hilos Un hilo o proceso ligero es una unidad básica de ejecución, con su propio: contador de programa (PC) registros de CPU pila (stack( stack) Los hilos dentro de una misma aplicación comparten: código y datos recursos del S.O. (ficheros, E/S, etc.)

2.1 Introducción n a los hilos Clase Thread Encargada de producir hilos para otras clases Define los métodos m start y stop para lanzar y destruir la ejecución n del hilo Define los métodos m suspend y resume para parar y continuar la ejecución n del hilo Nos hace implementar el método m run,, que es el cuerpo del hilo, por donde empieza a ejecutarse una vez lanzado

2.1 Introducción n a los hilos Java no soporta la herencia múltiple m -> > Dificultad en la creación n de hilos - > Solución: Implementar la interfaz Runnable (lo vemos más m s adelante) Interfaz Runnable Nos obliga a implementar el método m run

2.1 Introducción n a los hilos Clase Object Hereda los métodos m que nos permiten usar variables condición n que veremos más s adelante: wait notify notifyall

2.1 Introducción n a los hilos Ciclo de vida de los hilos

2.2 Synchronized Cada objeto dispone de un cerrojo (Lock) Java no provee de instrucciones simples para adquirir y liberar el cerrojo Debemos usar la palabra clave synchronized que veremos a continuación

2.2 Synchronized Métodos sincronizados Todos los métodos m sincronizados de una clase lucharán n por un cerrojo: Si el método m es estático, tico, el cerrojo será el de la clase Si el método m no es estático, tico, el cerrojo será del objeto this,, la instancia de la clase

2.2 Synchronized Bloques de sincronización Para luchar por el cerrojo de un objeto que no es la clase actual, podemos usar: synchronized (objeto) { Código C } El cerrojo por el que luchan en ambos casos es el del objeto

2.3 Variables condición La clase Object (de la que heredan casi todas las clases), nos provee de tres métodos m que actúan an como una variable condición Para ejecutar algún n método m de sincronización n sobre el objeto, el llamante debe poseer su cerrojo

wait () 2.3 Variables condición Provoca que el hilo actual se bloquee a la espera de un notify,, liberando el cerrojo wait (long timeout) Provoca que el hilo actual se bloquee liberando el cerrojo a la espera de un notify o de que pase el tiempo especificado en el parámetro en milisegundos

2.3 Variables condición notify () Despierta un hilo y se pone a luchar por el cerrojo En el caso de haber varios hilos esperando, se despierta a uno aleatoriamente El llamante no libera el cerrojo notifyall () Despierta a todos los hilos y se ponen a luchar por el cerrojo

2.4 Remote Method Invocation 2.4.1 Introducción n a RMI 2.4.2 Uso de interfaces 2.4.3 Configuración n del servidor 2.4.4 Configuración n del cliente

2.4.1 Introducción n a RMI Método de Invocación n Remota Servicios en internet Alternativas: CORBA (estándar independiente) DCOM (Microsoft)

2.4.1 Introducción n a RMI Ventajas: Abstracción n de la interconexión Simplicidad y versatilidad Inconvenientes: Sólo para Java Necesidad de envoltorios para usarse con otro tipo de lenguajes

2.4.2 Uso de interfaces Uso intensivo de Interfaces Enmascaramiento de la implementación del servidor mediante interfaces La interfaz remota debe ser públicap La interfaz remota debe extender la interfaz java.rmi.remote Cada método m de la interfaz remota debe declarar java.rmi.remoteexception

2.4.2 Uso de interfaces Implementar la interfaz remota El servidor debe contener una clase que extienda UnicastRemoteObject e implementar la interfaz remota Dicha clase debe implementar la interfaz remota que vayamos a usar Puede tener métodos m extras, pero el cliente sólo s ve la interfaz El constructor debe declarar RemoteException aunque esté vacío

2.4.3 Configuración n del servidor Para poner en marcha un servicio Crear un gestor de seguridad que soporte RMI RMISecurityManager Usar políticas de java mediante un fichero Crear la instancia del objeto remoto Registrar el objeto remoto para que sea accesible Naming.bind( rmi rmi://pepe/chat )

2.4.3 Configuración n del servidor Configurar el registro (rmiregistry( rmiregistry) Encargado de RMI Se ubica en la IP del ordenador Puerto por defecto: 1099 Lanzar el servicio Windows: start rmiregistry Unix: rmiregistry &

2.4.3 Configuración n del servidor Creación n de stubs y skeleton Necesarios para que RMI funcione Proporcionan las operaciones de red Cualquier objeto remoto debe serializarse Serializan y deserializan Creamos los stubs y skeleton usando el programa rmic usando las clases compiladas

2.4.4 Configuración n del cliente Utilizar el objeto remoto Capturar la interfaz remota del servidor Declaramos una interfaz Buscamos el objeto remoto Pasamos la referencia a nuestra interfaz Ejemplo: ICHatServer server = (IChatServer( IChatServer) java.rmi.naming.lookup(" ("rmi://david/chatserver");

3. Lectores Escritores (2º) 3.1 Descripción 3.2 Planteamiento inicial 3.3 Clase Tiempo 3.4 Implementación n general 3.5 Solución n 1 3.6 Solución n 2

3.1 Descripción Dado un recurso compartido, varios procesos intentarán n acceder a él. Si los procesos desean leerlo, habrá un número n máximo de procesos leyendo el recurso simultáneamente. Sin embargo, si un proceso desea escribir en el recurso, deberá tenerlo en exclusión mútua. Además, si hay escritores en la cola de espera, estos tienen preferencia sobre los lectores.

3.2 Planteamiento inicial Separar los problemas de concurrencia de otros problemas programáticos Dividir los problemas de concurrencia Preprotocolo de lectura (IniLec( IniLec) Postprotocolo de lectura (FinLec( FinLec) Preprotocolo de escritura (IniEsc( IniEsc) Postprotocolo de escritura (FinEsc( FinEsc)

3.3 Clase Tiempo Clase propia para reusar y heredar Métodos long TProg(): Devuelve el tiempo en ms que lleva funcionando el programa long siesta(long): Detiene el hilo durante el tiempo especificado en el parámetro random(int): Devuelve un número n aleatorio entre [0, int)

3.4 Implementación n general Clase LE2 Run: : Lanza lectores y escritores concurrentemente Clases Lector y Escritor Constructor: Se le pasa su identificador, el tiempo máximo m (Tmax( Tmax) ) que usará para dormir o leer y el recurso Run: Duerme durante [0, Tmax] Lee durante [0, Tmax]

3.4 Implementación n general Clase Recurso IniLec(Id): Inicia la lectura de Id FinLec(Id): Finaliza la lectura de Id IniEsc(Id): Inicia la escritura de Id FinEsc(Id): Finaliza la escritura de Id

3.5 Solución n 1 Monitores en Java Métodos sincronizados (cerrojo de la clase) Variable condición n de la clase

3.6 Solución n 2 Monitores en Java Métodos sincronizados para las variables en exclusión Vector de objetos para usar variables condición n independientes y mejorar la eficiencia Cuidado: IniLec e IniEsc no están sincronizados con la clase! Solución: Funciones privadas sincronizadas

4. Filósofos comensales 4.1 Descripción 4.2 Planteamiento inicial 4.3 Implementación n general 4.4 Solución

4.1 Descripción N filósofos, sentados en una mesa redonda disponen de N palillos como se ve en la figura. Si cada filósofo entra en un ciclo infinito en donde piensa durante un tiempo aleatorio y después s come durante otro tiempo aleatorio, conseguir que todos los filósofos coman usando 2 palillos cuando lo necesiten y su espera sea finita.

NFil = 5 4.1 Descripción

4.2 Planteamiento inicial Separar los problemas de concurrencia de otros problemas programáticos Dividir los problemas de concurrencia Métodos propios del problema CogerCubiertos (Id) DejarCubiertos (Id) Funciones privadas para resolver problemas concretos y repetitivos

4.3 Implementación n general Clase FilosofosComensales Lanza todos los filósofos concurrentemente Clase Filosofo Constructor: Se le pasa su identificador, el tiempo máximo m (Tmax( Tmax) ) que usará para pensar o comer y la Mesa Métodos Piensa y Come Run: Piensa durante [0, Tmax] Come durante [0, Tmax]

4.3 Implementación n general Clase Mesa Constructor (NFil( NFil) NFil = Número N de filósofos a la mesa CogerCubiertos (Id) DejarCubiertos (Id)

Monitores en Java 4.4 Solución Métodos sincronizados para las variables en exclusión Vector de objetos para usar variables condición independientes y mejorar la eficiencia Funciones Der (Id): Devuelve el filósofo a la derecha de Id Izq (Id): Devuelve el filósofo a la izquierda de Id Test (Id): Intenta poner a comer al filósofo Id Cuidado: CogerCubiertos no es sincronizado!

5. Chat usando RMI 5.1 Introducción 5.2 Esquemas de flujo de datos 5.3 Control de problemas 5.4 Implementación

5.1 Introducción Aplicación n Cliente - Servidor Servidor -> > Aplicación n Java Modo consola Uso del registro RMI Cliente -> Applet Java Uso de gráficos simples -> > AWT Es posible ponerlo en una página p web

5.2 Esquemas de flujo de datos Cliente Cliente Cliente login (name, chatter) receiveenter (name, chatter) receiveenter (name, chatter) receiveenter (name, chatter) Servidor

5.2 Esquemas de flujo de datos Cliente Cliente Cliente Chat (name, message) receivechat (name, message) receivechat (name, message) receivechat (name, message) Servidor

5.2 Esquemas de flujo de datos Igual para: privatechat -> receivewhisper logout -> receiveexit

5.3 Control de problemas No puede haber dos personas con el mismo nick En caso de desconexión, n, al intentar mandar algo se controla la excepción y se ejecuta un logout No puedes mandar un privado si no has seleccionado a alguien No puedes mandarte un privado a ti mismo

5.4 Implementación 5.4.1 Interfaces remotas Nótese la bidireccionalidad del flujo 5.4.2 Clase UserInfo Diferenciación n entre servidor y cliente para futuras mejoras 5.4.3 Clase ChatServer 5.4.4 Clase ChatClient 5.4.5 Clase ChatApplet