Primitivas de Sincronización
|
|
|
- Rosa María San Segundo Lozano
- hace 7 años
- Vistas:
Transcripción
1 Primitivas de Sincronización JUAN CARLOS CONDE RAMÍREZ DISTRIBUTED COMPUTING
2 Introducción Todas las soluciones previas al problema de mutex fueron un desperdicio de algún modo: Si un proceso es incapaz de entrar a la CR, este verifica repetidamente que la condición de entrada sea verdadera; se está realizando trabajo inútil. Esta forma de espera es llamada espera activa (busy-wait). En lugar de verificar la condición de entrada repetidamente, si el proceso verifica la condición sólo cuando esta podría llegar a ser verdadera, este podría no desperdiciar ciclos de CPU. FCC-BUAP 2
3 Introducción Que un proceso verifique la condición de acceso a la CR sólo cuando esta podría llegar a ser verdadera requiere soporte desde el Sistema Operativo. Por lo tanto, las primitivas de sincronización existen para anular la espera activa y son utilizadas: para exclusión mutua para proporcionar orden entre varias operaciones de diferentes hilos. Aunque existen muchos tipos de sincronización, construidos en varios lenguajes de programación, dos de ellos son los más prevalecientes: semáforos y monitores. FCC-BUAP 3
4 Semáforos Dijkstra propuso el concepto de semáforo que soluciona el problema de espera activa. Un semáforo tiene dos campos, su valor y una cola de procesos bloqueados, así como dos operaciones asociadas a este: P() y V() La semántica de un semáforo binario se muestra en el siguiente programa: FCC-BUAP 4
5 Semáforos public class SemaforoBinario boolean value; SemaforoBinario( boolean initvalue ) value = initvalue public synchronized void P() while( value == false ) Util.myWait(this); //en cola de procesos bloqueados value = false; public synchronized void V() value = true; notify(); FCC-BUAP 5
6 Funcionamiento El contenido de value de un semáforo (o semáforo binario) sólo puede ser falso o verdadero. La cola de procesos bloqueados está vacía inicialmente y un proceso puede añadirse a sí mismo a la cola cuando este realiza una llamada a P(). Cuando un proceso llama a P() y value es verdadero, entonces el valor de value se convierte en falso. Sin embargo, si el valor del semáforo es falso, entonces el procesos se bloquea (línea 10) hasta que este llega a ser verdadero. La invocación a Util.myWait() (línea 11) consigue esto. La clase Util se muestra al final de este documento pero por ahora se asume que esta llamada inserta al proceso que la invocó a la cola de procesos bloqueados. FCC-BUAP 6
7 Funcionamiento Cuando value se hace verdadero, el proceso puede hacerlo falso en la línea 12 y regresar desde P(). La llamada a V() hace a value true y también le notifica al proceso si la cola de procesos dormidos en dicho semáforo es no-vacía. Ahora, implementar exclusión mutua es casi trivial: SemaforoBinario mutex = new SemaforoBinario(true); mutex.p(); criticalsection(); mutex.v(); FCC-BUAP 7
8 Semáforo Contador Otra variante del semáforo le permite a este tomar un entero arbitrario como value. Estos semáforos son llamados semáforos de conteo. Su semántica se muestra a continuación: FCC-BUAP 8
9 Semáforo Contador public class SemaforoContador int value; public SemaforoContador( int initvalue ) value = initvalue; public synchronized void P() value--; if( value < 0 ) Util.myWait( this ); public synchronized void V() value++; if( value <= 0 ) notify(); FCC-BUAP 9
10 Semáforo Contador Los semáforos pueden ser usados para resolver una amplia variedad de problemas de sincronización. Nótese que Java NO proporciona semáforos como base del lenguaje, pero pueden ser implementados fácilmente usando la idea de monitores (de los que se hablará más adelante). FCC-BUAP 10
11 Problema: Productor-Consumidor En este problema, existe un buffer compartido entre dos procesos nombrados el productor y el consumidor: El primero produce artículos que son depositados en un buffer y el consumidor extrae artículos del buffer y los consume. Por simplicidad, se asume que los ítems son del tipo double. Dado que el buffer es compartido, cada proceso debe acceder al buffer de una manera mutuamente excluyente. Por ahora, se usará un arreglo de elementos double de tamaño size como buffer. El buffer tiene dos apuntadores, inbuf y outbuf, los cuales contienen los índices del arreglo para depositar un artículo y extraer un artículo, respectivamente. La variable count da seguimiento al número actual de ítems en el buffer. FCC-BUAP 11
12 Problema: Productor-Consumidor La siguiente figura muestra el buffer como un arreglo circular en el que inbuf y outbuf son incrementados en base al módulo con size para mantener la congruencia de los slots para depositar y extraer artículos. FCC-BUAP 12
13 Problema: Productor-Consumidor Se puede observar que además de la exclusión mutua, existen dos restricciones de sincronización adicionales que necesitan ser satisfechas: 1. El consumidor no debe extraer ningún artículo de un buffer vacío. 2. El productor no debe depositar ningún artículo en un buffer lleno. NOTA: El buffer puede llenarse si el productor se mantiene produciendo a una mayor velocidad de la que el consumidor extrae los artículos. FCC-BUAP 13
14 Problema: Productor-Consumidor Tal forma de sincronización se conoce como sincronización condicional. Esta requiere que un proceso espere por alguna condición que llega a ser verdadera (así como el buffer llega a ser no vacío) antes de continuar sus operaciones. La clase BufferLimitado se muestra a continuación: FCC-BUAP 14
15 Clase BufferLimitado class BufferLimitado final int size = 10; double buffer[] = new double[size]; int inbuf = 0, outbuf = 0; SemaforoBinario mutex = new SemaforoBinario(true); SemaforoContador isempty = new SemaforoContador(0); SemaforoContador isfull = new SemaforoContador( size ); FCC-BUAP 15
16 Clase BufferLimitado public void deposit( double value ) isfull.p(); mutex.p(); // espera si el buffer está lleno // asegura la exclusión mutua buffer[inbuf] = value; inbuf = (inbuf + 1) % size; mutex.v(); isempty.v(); // notifica a algún consumidor en espera FCC-BUAP 16
17 Clase BufferLimitado public double fetch() double value; isempty.p(); mutex.p(); value = biffer[outbuf]; // esperar si el buffer está vacío // asegura la exclusión mutua // lee desde el buffer outbuf = (outbuf+1) % size; mutex.v(); isfull.v(); // notifica a cualquier productor en espera return value; FCC-BUAP 17
18 Problema: Productor-Consumidor Aquí se utiliza un semáforo de exclusión mutua para asegurar que todas las variables compartidas son accedidas de manera mutuamente excluyente. El semáforo de conteo isfull es utilizado para hacer que un productor espere en caso de que el buffer esté lleno, y el semáforo isempty es utilizado para hacer que un consumidor espere cuando el buffer está vacío. En el método deposit, de la línea 9 se verifica si el buffer está lleno. Si es así, el proceso hace una llamada y espera usando el semáforo isfull. FCC-BUAP 18
19 Problema: Productor-Consumidor Nótese que este semáforo ha sido inicializado de acuerdo al valor de size, y por lo tanto en ausencia de un consumidor, primero size llama a isfull.p() para que no se bloquee. En este punto, el buffer estaría lleno y cualquier llamada a isfull.p() haría posible el bloqueo. Si la llamada a isfull.p() no bloquea, entonces es posible acceder a la CR para utilizar el buffer compartido. La llamada mutex.p() en la línea 12 sirve como entrada a la CR, y mutex.v() sirve como salida de la CR. FCC-BUAP 19
20 Problema: Productor-Consumidor Aquí se utiliza un semáforo de exclusión mutua para asegurar que todas las variables compartidas son accedidas de manera mutuamente excluyente. El semáforo de conteo isfull es utilizado para hacer que un productor espere en caso de que el buffer esté lleno, y el semáforo isempty es utilizado para hacer que un consumidor espere cuando el buffer está vacío. En el método deposit, de la línea 9 se verifica si el buffer está lleno. Si es así, el proceso hace una llamada y espera usando el semáforo isfull. FCC-BUAP 20
21 Problema: Productor-Consumidor Una dentro de la CR, se deposita el valor en el buffer usando el índice inbuf de la línea 13. En la línea 15 se hace una llamada a isempty.v() para despertar a cualquier consumidor que pueda estar esperando debido a que el buffer estaba vacío. El método fetch es el complemento del método deposit. La clase BufferLimitado puede ser probada mediante el programa productor-consumidor mostrado a continuación. FCC-BUAP 21
22 Clase Productor import java.util.random; class Productor implements Runnable BufferLimitado b = null; public Productor( BufferLimitado initb ) b = initb; new Thread( this ).start(); public void run() double item; Random r = new Random(); while( true ) item = r.nextdouble(); System.out.println( Artículo producido + ítem ); b.deposit( item ); Util.mySleep(200); FCC-BUAP 22
23 Clase Consumidor class Consumidor implements Runnable BufferLimitado b = null; public Consumidor( BufferLimitado initb ) b = initb; new Thread( this ).start(); public void run() double item; while( true ) item = b.fetch(); System.out.println( Artículo extraído + item ); Util.mySleep(50); FCC-BUAP 23
24 Clase ProductorConsumidor class ProductorConsumidor public static void main(string args[]) BufferLimitado buffer = new BufferLimitado(); Productor productor = new Productor( buffer ); Consumidor = new Consumidor( buffer ); FCC-BUAP 24
25 Monitores Un Monitor es un objeto de alto nivel orientado a la construcción para la sincronización en programación concurrente. Un monitor puede ser visto como una clase que puede ser usada en programas concurrentes. Como cualquier clase, un monitor tiene atributos y métodos para manipular dichos datos. FCC-BUAP 25
26 Monitores Debido a que múltiples hilos pueden acceder a datos compartidos al mismo tiempo, los monitores soportan la noción de métodos de ingreso para garantizar la exclusión mutua. Esto garantiza que sólo uno de los hilos puede ser ejecutado en cualquier método de ingreso en cualquier momento. Algunas veces la frase el hilo t está dentro del monitor es utilizada para denotar que el hilo t está ejecutándose un método de ingreso. Es claro que a lo más un hilo puede estar en el monitor en cualquier momento, entonces cualquier objeto monitor asociado es una cola de hilos que están esperando a entrar al monitor. FCC-BUAP 26
27 Monitores En el estudio y uso de los semáforos se puede ver que las llamadas a las funciones necesarias para utilizarlos quedan repartidas en el código del programa, haciendo difícil corregir errores y asegurar el buen funcionamiento de los algoritmos. Para evitar estos inconvenientes se desarrollaron los monitores. El concepto de monitor fue definido por primera vez por Charles Antony Richard Hoare en el artículo Monitors: An Operating System Structuring Concept de FCC-BUAP 27
28 Monitores Como hemos visto antes, los programas concurrentes también requieren sincronización condicional cuando un hilo debe esperar por determinada condición que llegará a ser verdadera. Para dirigir la sincronización condicional, el constructor del monitor soporta la noción de variables de condición. Una variable de condición tiene dos operaciones definidas: wait y notify (también conocida como signal). FCC-BUAP 28
29 Monitores Para cualquier variable de condición x, cualquier hilo, por decir t 1, realiza una llamada a x.wait() y se bloquea y coloca dentro de una cola asociada con x. Cuando otro hilo, por decir t 2, realiza una llamada a x.notify(). Si la cola asociada con x es no-vacía, un hilo es removido de una cola e insertado en otra cola de hilos disponibles para ser ejecutados. Dado que a lo más un hilo puede estar en el monitor, esto inmediatamente genera un problema: cuál hilo debe continuar después de la operación de notificación? aquel que invoque al método notify o el hilo que estuvo esperando más tiempo?. FCC-BUAP 29
30 Monitores Existen dos posibles respuestas: 1. Continúa su ejecución uno de los hilos que estuvo esperando sobre la variable de condición. Los Monitores que siguen esta regla son conocidos como Monitores Hoare. 2. Continúa con su ejecución el hilo que hizo la llamada de notificación. Cuando este hilo sale del monitor, entonces otros hilos pueden entrar al monitor. Esta es la semántica que se sigue en Java. Una ventaja del Monitor de Hoare s es que el hilo que fue notificado sobre la condición comienza su ejecución sin intervención de cualquier otro hilo. FCC-BUAP 30
31 Monitores Por lo tanto, el estado en el que este hilo comienza su ejecución es el mismo que cuando notify fue llamado. Al despertar, este puede asumir que la condición es verdadera. En consecuencia, para usar un monitor de Hoare s, el código de un hilo puede ser: if ( B) x.wait(); FCC-BUAP 31
32 Monitores Asumiendo que t 2 notifica sólo cuando B es verdadero, podemos saber que t 1 puede asumir B al despertar. En un monitor estilo Java, a pesar de que t 2 emite la notificación, este continúa su ejecución. Por lo tanto, cuando t 1 obtiene su turno de ejecutarse, la condición B puede ya no ser verdad más. De aquí que, cuando usamos Java, los hilos esperan usualmente por la condición como: while ( B ) x.wait( ); El hilo t 1 puede tomar un notify()sólo como una señal o indicio de que B puede ser verdadero. Por ende, este necesita verificar explícitamente la veracidad de B cuando este despierto. Si B es falso actualmente, este invoca a wait()de nuevo. FCC-BUAP 32
33 Monitores En Java, especificamos que un objeto es un monitor utilizando la palabra synchronized con sus respectivos métodos. Para obtener sincronización condicional, Java proporciona: wait(): el cual inserta al hilo en la cola de espera. Por simplicidad, se utiliza Util.myWait() en lugar de wait() en Java. La única diferencia es que mywait cacha la InterruptedException. notify(): el cual despierta un hilo de la cola de espera. notifyall(): el cual despierta a todos los hilos de la cola de espera. FCC-BUAP 33
34 Monitores Java no tiene variables de condición. Por lo que las asociadas con cada objeto hay una simple cola wait. Esto es suficiente para la mayoría de las necesidades de programación. Si se necesita, también es fácil simular variables de condición en Java. Una representación gráfica de un monitor en Java se muestra a continuación. Existen dos tipos de colas asociadas con un objeto: una cola de hilos esperando por el bloqueo asociado con el monitor y otra cola de hilos esperando por que la condición llegue a ser verdadera. FCC-BUAP 34
35 Monitores Esto permite resolver algunos problemas de sincronización con Monitores en Java. Por ejemplo, el problema del Productor-Consumidor: FCC-BUAP 35
36 Monitores class BoundedBufferMonitor final int sizebuf = 10; double buffer[] = new double[sizebuf]; int inbuf = 0, outbuf = 0, count = 0; public synchronized void deposit( double value ) while( count == sizebuf ) Util.myWait( this ); buffer[inbuf] = value; inbuf = ( inbuf + 1 ) % sizebuf; count++; if( count == 1 ) notify(); // buffer lleno // items disponibles para extraer FCC-BUAP 36
37 Monitores public synchronized double fetch( ) double value; while( count == 0 ) // buffer vacío Util.myWait( this ); value = buffer[outbuf]; outbuf = ( outbuf + 1 ) % sizebuf; count--; if( count == sizebuf - 1 ) // slots vacíos disponibles notify(); return value; FCC-BUAP 37
38 Monitores La clase BoundedBufferMonitor mostrada anteriormente tiene dos métodos de ingreso: deposit y fetch. Esto significa que si un hilo está ejecutando al método deposit o fetch, entonces ningún otro hilo puede ejecutar dichos métodos. La palabra reservada synchronized permite la exclusión mutua durante el acceso a las variables compartidas y corresponde a obtener el monitor de bloqueo. FCC-BUAP 38
39 Monitores Enfocándonos en el método deposit en la línea 8, si el buffer está lleno (i.e. count igual a sizebuf), entonces el hilo que llamó a deposit debe esperar a que se consuma un ítem y quede libre al menos un slot en el buffer. Por lo tanto, este invoca al método mywait(). Cuando un hilo espera por la condición, éste se va a una cola esperando a ser notificado por alguno otro hilo. Éste también debe liberar el monitor de bloqueo para que otro proceso pueda acceder al monitor y hacer verdadera la condición por la cual este hilo esta esperando. Cuando este hilo es notificado, éste tiene que adquirir el monitor de bloqueo de nuevo antes de continuar su ejecución. FCC-BUAP 39
40 Monitores Ahora asume que la condición en la sentencia while de la línea 8 es falsa. Entonces value puede ser depositado en el buffer. La variable inbuf apunta al rabo de la cola circular buffer. Éste avanza después de la inserción y el contador del número de ítems es incrementado. Aún no hemos terminado realmente. Mientras se diseña un monitor, es posible que sea necesario asegurarse que si algún hilo está esperando por una condición que pueda llegar a ser verdadera, entonces dicho hilo debe ser notificado. FCC-BUAP 40
41 Monitores En este caso, un hilo consumidor puede estar esperando en el método fetch por que algún ítem esté disponible. Finalmente, si el contador es 1, se notifica a cualquier hilo en espera en la línea 14. FCC-BUAP 41
42 Clase Util import java.util.*; public class Util public static int max(int a, int b) if( a > b ) return a; return b; Public static void mysleep(int time) try Thread.sleep(time); catch(interruptedexception e) public static void mywait(object obj) System.out.println( waiting ); try obj.wait(); catch(interruptedexception e) FCC-BUAP 42
BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN
BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN PROGRAMACIÓN CONCURRENTE Y PARALELA PRACTICA 8 MONITORES BASADOS EN SEMÁFOROS
MONITORES EN JAVA. Antonio Tomeu Control de la Concurrencia en Java: API Estándar
MONITORES EN JAVA Un monitor es un objeto que implementa acceso bajo e.m. a todos sus métodos, y provee sincronización En Java, son objetos de una clase cuyos métodos públicos son todos synchronized Un
CAPÍTULO 3. PROCESOS VS. HILOS
CAPÍTULO 3. PROCESOS VS. HILOS 3.1 Primitivas de sincronización en Java Java no tiene semáforos como primitivas de sincronización. Sin embargo, proporciona otras primitivas diferentes con las cuales sí
Programación Concurrente y Paralela. P(S) ; sección crítica P(S);
2.5.2 Monitores Los semáforos, a pesar de su sencillez de uso, son el equivalente a las instrucciones goto y el manejo de apuntadores en los lenguajes de programación imperativos: son muy susceptibles
Tema 6. Threads: programas multitarea
Tema 6. Threads: programas multitarea Procesos e hilos Creación de threads Ciclo de vida de un thread Sincronización Prioridades Grupos de threads Relación de métodos Ejemplo sincronización 1 Procesos
Unidad IV: Programación concurrente (MultiHilos) 4.1. Concepto de hilo
Unidad IV: Programación concurrente (MultiHilos) 4.1. Concepto de hilo Hilo (theread) llamado también proceso ligero o subproceso, es la unidad de ejecución de un proceso y esta asociado con una secuencia
Threads o Hilos. Un thread en JAVA comienza como una instancia de java.lang.thread antes de convertirse en un hilo de ejecución.
Threads o Hilos Los hilos son otra forma de crear la posibilidad de concurrencia de actividades; sin embargo, la gran diferencia es que los hilos comparten el código y el acceso a los datos. En cierta
Programación concurrente en Java. Breve introducción. Miguel Ángel LATRE Dept. de Informática e Ingeniería de Sistemas
Programación concurrente en Java. Breve introducción Miguel Ángel LATRE Dept. de Informática e Ingeniería de Sistemas Concurrencia en Java Hilos de ejecución Clase Thread e interfaz Runnable Pausas Interrupciones
Programación Concurrente en Java: Threads. Ejemplos de programación concurrente. Luis Fernando Llana Díaz. 24 de abril de 2008
Departamento de Sistemas Informáticos y Computación Universidad Complutense de Madrid de abril de 00 Ejemplos de programación concurrente En un sistema operativo, diversos programas compiten por los recursos
Programación concurrente y semáforos en Java
Programación concurrente y semáforos en Java En Java es posible ejecutar tareas en paralelo, utilizando hebras de control (hilos, threads). Este modo de programación permite tener un espacio de memoria,
SINCRONIZACIÓN DE PROCESOS
SINCRONIZACIÓN DE PROCESOS 1 Introducción Los procesos acceden a datos o recursos compartidos El acceso puede provocar que el estado final de los datos no sea correcto, generando incoherencias debido a
Threads. La plataforma JAVA soporta programas multhreading a través del lenguaje, de librerías y del sistema de ejecución. Dos.
Threads Un thread es un flujo de control secuencial dentro de un programa. A los threads también se los conoce como procesos livianos ó contextos de ejecución. Un thread es similar a un programa secuencial:
Programación Concurrente en Java
Hebras y monitores Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid 21 de marzo de 2006 Threads Extendiendo la clase java.lang.thread. public class PrThread extends
Unidad 1: Gestión de Procesos
Unidad 1: Gestión de Procesos Tema 1, Concurrencia: Exclusión mutua y sincronización. 1.1 Problema de la sección crítica, alternativas al uso de semáforos: - Regiones críticas, Monitores, Variables de
TEMA 5: Control de la Concurrencia en Java (API Estándar)
TEMA 5: Control de la Concurrencia en Java (API Estándar) CONTENIDO Exclusión Mutua con código synchronized. Exclusión Mutua con métodos synchronized. Protocolos de Control de la Exclusión Mutua. Interbloqueos
Concurrencia. Primitivas IPC con bloqueo
Concurrencia Primitivas IPC con bloqueo Primitivas de IPC con bloqueo La solución de Peterson es correcta, pero tiene el defecto de requerir espera ocupada: Cuando un proceso quiere entrar en su región
SISTEMAS OPERATIVOS I (Sistemas) / SISTEMAS OPERATIVOS (Gestión) septiembre 2009
SISTEMAS OPERATIVOS I (Sistemas) / SISTEMAS OPERATIVOS (Gestión) septiembre 2009 4. (2 p) Dos procesos A y B se ejecutan concurrentemente en un determinado sistema. El proceso A ejecuta unas tareas ( Tareas
Estados de un proceso
Semáforos Estados de un proceso Inactivo Listo Ejecutando Completo Escribimos p.state := ready p. state := running Bloqueado Para indicar que un proceso cambia de estado Semáforo Es un tipo de dato abstracto
Programación concurrente
Programación concurrente Java y Servicios Web I Master en Ingeniería Matemática Manuel Montenegro Dpto. Sistemas Informáticos y Computación Desp. 467 (Mat) [email protected] Programación concurrente
MECANISMOS DE SINCRONIZACIÓN PROGRAMACIÓN CONCURRENTE Y PARALELA
MECANISMOS DE SINCRONIZACIÓN PROGRAMACIÓN CONCURRENTE Y PARALELA Sincronización El problema de la sincronización de hilos tiene lugar cuando varios hilos intentan acceder al mismo recurso o dato. A la
Arquitecturas cliente/servidor
Arquitecturas cliente/servidor Creación de Sockets Cliente Servidor 1 Creación de Sockets Cliente/Servidor Sockets en TCP Concepto de Hilos Definición de DAEMON Sockets en UDP 2 THREADS 3 Qué es un thread?
Java: Programación Multithread
Qué es un thread? Java: Programación Multithread Hasta el momento hemos desarrollado programas secuenciales con un único thread: en cualquier instante durante la ejecución de un programa hay un único punto
75-62 Técnicas de Programación Concurrente II 2004 java Threads
75-62 Técnicas de Programación Concurrente II 2004 java Threads FIUBA Ing. Osvaldo Clúa Bibliografía: tutorial de Java en http://java.sun.com Un buen libro (algo teórico) es Garg: Concurrent and Distributed
PROGRAMACIÓN CONCURRENTE
PROGRAMACIÓN CONCURRENTE Lenguajes de Programación - Progr. Concurrente 1 Introducción El concepto fundamental de la programación concurrente es la noción de Proceso. Proceso: Cálculo secuencial con su
Procesamiento paralelo con hilos de Java
Procesamiento paralelo con hilos de Java Tabla de contenidos 1. Soporte para hilos en Java... 1 2. Creación y control de un hilo... 2 2.1. Métodos de creación de un hilo... 2 2.2. Control de hilos mediante
Programación Concurrente en Java
Programación Concurrente en Java Curso 2006-2007 9/2/2007 Prog. Distribuida Bajo Internet Qué es la Programación Concurrente? Diseño basado en varias actividades independientes Conceptualmente se ejecutan
Sincronización de Threads
Sincronización de Threads Herramientas y Lenguajes de Programación Universidad de La Laguna Programa de Doctorado de Física e Informática Escuela Técnica Superior Superior de Ingeniería Informática Dpto.
PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:
Examen de Java Nombre: DNI: Titulación: 1. Cómo podemos compilar desde la línea de comandos la clase Java A que utiliza una librería empaquetada bd.jar? 2. Indica si es correcto el siguiente código. Justifica
Programación Concurrente en Java: Threads
Departamento de Sistemas Informáticos y Computación Universidad Complutense de Madrid 7 de mayo de 007 Ejemplos de programación concurrente En un sistema operativo, diversos programas compiten por los
Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente.
Threads (hilos) Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente. Conceptos: Proceso (thread o hilo): es un programa en ejecución
Benemérita Universidad Autónoma del Estado de Puebla
Benemérita Universidad Autónoma del Estado de Puebla Facultad de Cs. De la Computación Programación Concurrente y Paralela Práctica de Laboratorio No. 5 Profr: María del Carmen Cerón Garnica Alumno: Roberto
Ejercicio 1 (proyecto prlistas, paquete listas)
PRÁCTICA 3 Curso 2004-05 En esta práctica construiremos y usaremos dos paquetes: el primero, listas, que implementa listas genéricas y el segundo, colas, que implementa colas y colas de prioridades genéricas.
1 HILOS (THREADS) EN JAVA
1 HILOS (THREADS) EN JAVA 1.1QUÉ ES UN THREAD La Máquina Virtual Java (JVM) es un sistema multihilo. Es decir, es capaz de ejecutar varios hilos de ejecución simultáneamente. La JVM gestiona todos los
Monitores. Implementación de un Buffer con monitores
Monitores Los monitores corresponden a la segunda herramienta de sincronización que veremos en el curso. Se usan para garantizar la exclusión mutua en secciones críticas y para esperar la ocurrencia de
PROGRAMACIÓN EN JAVA
SISTEMAS INFORMÁTICOS INDUSTRIALES curso 2007-2008 PROGRAMACIÓN EN JAVA PRÁCTICA 3: Comunicación entre tareas. Modelo productor / consumidor. Objetivos Implementar una aplicación en Java en la que existan
HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA
Estructura de la Información en Programación I.T.I.G., Matemáticas. Curso 2008/2009 Nombre:... Fecha: / 01 / 2009 HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA Esta hoja de ejercicios nos servirá
Grafo acíclico orientado cuyos nodos corresponden a sentencias individuales.
GRAFOS DE PRECEDENCIA Grafo acíclico orientado cuyos nodos corresponden a sentencias individuales. Un arco de un nodo Si al nodo Sj significa que la sentencia Sj puede ejecutarse sólo cuando ha acabado
Tema III. Multihilo. Desarrollo de Aplicaciones para Internet Curso 12 13
Tema III. Multihilo Desarrollo de Aplicaciones para Internet Curso 12 13 Índice 1.Introducción 2.Tipos de Concurrencia 3.Hilos en Java 4.Implementación de un SNB i. Sin Hilos ii. Con Hilos iii.con Pool
Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas
2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos
Otras formas de Sincronización en Java
75-62 Técnicas de Programación Concurrentes II Lic. Ing. Osvaldo Clúa 2008 Facultad de Ingeniería Universidad de Buenos Aires Otras formas de Sincronización en Java java.util.concurrent Class Exchanger
Sincronización de Threads
Funciones POSIX III Funciones POSIX III Sincronización Sincronización Procesos Procesos Semáforos Semáforos (sem_t) (sem_t) Sincronización Sincronización Threads Threads Mutex Mutex (pthread_mutex_t) (pthread_mutex_t)
Implementación de monitores POSIX
Implementación de monitores POSIX Ampliación de Sistemas Operativos (prácticas) E.U. Informática en Segovia Universidad de Valladolid Programación concurrente: Problemática Presencia de condiciones de
Clase adicional 2. Estructuras básicas de control. Temas
Clase adicional 2 Temas Estructuras de control Sentencia condicional Iteración Clases Definir una clase Crear una instancia de una clase Campos estáticos Problemas de la clase adicional Problema de diseño
Unidad 2: Gestión de Procesos
Unidad 2: Gestión de Procesos Tema 6, Concurrencia: Exclusión mutua y sincronización. 6.1 Principios generales de concurrencia. 6.2 EM: Soluciones software (Algoritmos de Dekker y Peterson). 6.3 EM: Soluciones
CDI Exclusión mutua a nivel alto. conceptos
conceptos El concepto de usar estructuras de datos a nivel alto libera al programador de los detalles de su implementación. El programador puede asumir que las operaciones están implementadas correctamente
Concurrencia en Java
Concurrencia en Java Concurrencia y Distribución Programación Avanzada Posgrado en Ciencia e Ingeniería de la Computación, UNAM 1. El mecanismo de threads Una aplicación Java o applet puede contener secciones
Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones
Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice
Hebras y Sincronización en Java
Hebras y Sincronización en Java Jonathan Makuc http://jmakuc.ublog.cl Noviembre 2008 Tópicos: 1. Introducción a hebras en Java...2 2. Hebras a través del clase Thread...3 3. Hebras a través de la interfaz
7. Programación Concurrente
7. Programación Concurrente 1. Qué es la programación concurrente? Se conoce por programación concurrente a la rama de la informática que trata de las técnicas de programación que se usan para expresar
Práctica 4 Concurrencia en Java
Práctica 4 Concurrencia en Java Escuela de Ingeniería y Arquitectura Depto. de Informática e Ingeniería de Sistemas 1. Objetivos 1. Crear y manipular hilos de ejecución en Java 2. Utilizar monitores en
Programación Concurrente y Paralela. Unidad 1 Introducción
Programación Concurrente y Paralela Unidad 1 Introducción Contenido 1.1 Concepto de Concurrencia 1.2 Exclusión Mutua y Sincronización 1.3 Corrección en Sistemas Concurrentes 1.4 Consideraciones sobre el
Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos
Unidad Didáctica 3 Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Definición de tipo genérico Hablamos de un tipo genérico cuando el tipo en cuestión depende
CAPÍTULO III: Programación Concurrente en JAVA I: Programación con hilos
CAPÍTULO III: Programación Concurrente en JAVA I: Programación con hilos III. PROGRAMACION CON HILOS (THREADS) EN JAVA Java contiene una serie de clases y construcciones específicas para programar de forma
Ejercicios con Monitores
Ejercicios con Monitores 57. Aunque un monitor garantiza la exclusión mutua, los procedimientos tienen que ser reentrantes. Explicar por qué. 58. Demostrar que incluso si la implementación del semáforo
Receta general para resolver problemas de sincronización con semáforos
Receta general para resolver problemas de sincronización con semáforos La primera vez que te enfrentas a la tarea de implementar una solución a un problema de sincronización entre procesos, es normal que
SEMAFOROS. if hay procesos suspendidos en este semáforo then despertar a uno de ellos else S = S + 1
1 de 21 22/12/2007 21:48 SEMAFOROS 1. DEFINICIONES 1.1. Semáforo general 1.2. Semáforo binario 1.3. Semáforo con cola de procesos bloqueados 1.4. Semáforo con espera activa (busy-wait) 1.5. Consecuencias
SISTEMAS OPERATIVOS I (Sistemas) / SISTEMAS OPERATIVOS (Gestión) septiembre 2009
SISTEMAS OPERATIVOS I (Sistemas) / SISTEMAS OPERATIVOS (Gestión) septiembre 2009 4. (2 p) Dos procesos A y B se ejecutan concurrentemente en un determinado sistema. El proceso A ejecuta unas tareas ( Tareas
Concurso: Cuánto sabes de JAVA?
Concurso: Cuánto sabes de JAVA? Motivación: o Para cambiar el ritmo de las jornadas y que no todas las actividades sean charlas o Recordar conocimientos y aprender algo nuevo. o Las preguntas pueden ayudarnos
Introducción a Java LSUB. 30 de enero de 2013 GSYC
Introducción a Java LSUB GSYC 30 de enero de 2013 (cc) 2013 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial
Programación Orientada a Eventos
Programación Orientada a Eventos Técnicas de Programación Santiago Pavón V:2012.03.13 Programas Secuénciales El flujo de ejecución del programa sigue la secuencia de sentencias que lo forman. El estado
PROGRAMACION CONCURRENTE
PROGRAMACION CONCURRENTE Ejemplos III: Sopa de Letras 1 Objetivo Mostrar las diferentes estrategias que puede seguir un gestor que tiene que ejecutar una tarea compleja que puede ser paralelizada en diferentes
Concurrencia entre Procesos.
Concurrencia entre Procesos. Sistemas Operativos Tema 3. 1 Procesamiento concurrente. Procesamiento concurrente: base de los sistemas operativos modernos (multiprogramados): Un conjunto de procesos que
Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota:
Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota: Justificación: Se pretende con éste contribuir a que el alumno se inicie y conozca el entorno del IDE en la creación de pequeños programas en java Objetivos:
Secretos de la Programación Concurrente
Secretos de la Programación Concurrente Stuart Perez, Luis Castro Autómatas y Compiladores, Escuela de Ciencias de la Computación e Informática, San Pedro de Montes de Oca, Costa Rica [email protected]
Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.
Variables Una variable no es más que un nombre simbólico que identifica una dirección de memoria: Suma el contenido de la posición 3001 y la 3002 y lo almacenas en la posición 3003 vs. total = cantidad1
Sistemas Operativos. Procesos
Sistemas Operativos Procesos Agenda Proceso. Definición de proceso. Contador de programa. Memoria de los procesos. Estados de los procesos. Transiciones entre los estados. Bloque descriptor de proceso
Palabras reservadas de C++ y C. Una palabra reservada no puede declararse como un identificador, esto haría un conflicto entre conectores y funciones.
Palabras reservadas de C++ y C Una palabra reservada no puede declararse como un identificador, esto haría un conflicto entre conectores y funciones. A continuación se muestra el link del listado de palabras
Java. Introducción a la Programación Orientada a Objetos
Java Java es un lenguaje de programación presentado en 1995 enfocado a: soportar los fundamentos de la programación orientada a objetos. generar código independiente de la arquitectura de la computadora
Concurrencia: Exclusión mutua y Sincronización
Concurrencia: Exclusión mutua y Sincronización Prof. Carlos Figueira Basado en materiales de Yudith Cardinale (USB) Williams Stallings, Eugene Styer Concurrencia Múltiples aplicaciones Aplicaciones estructuradas
Concurrencia: deberes. Concurrencia: Exclusión Mutua y Sincronización. Concurrencia. Dificultades con la Concurrencia
Concurrencia: deberes Concurrencia: Exclusión Mutua y Sincronización Capítulo 5 Comunicación entre procesos Compartir recursos Sincronización de múltiples procesos Asignación del tiempo de procesador Concurrencia
CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE
CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE 1 Estructura de Datos 1. Logica de Programación 2. Uso de Algoritmos usando Lenguaje Java 3. Ingreso de datos 4. Sentencias de Control 1.
Tema 7.- Fundamentos de la Programación Orientada a Objetos
Tema 7.- Fundamentos de la Programación Orientada a Objetos 7 de enero de 2014 Objetivos Saber definir clases propias. Saber crear objetos de una clase determinada e interactuar con ellos (Problema 1).
Programación Concurrente. Curso Java 2012, 2013 Juan Manuel Fernández Peña
Programación Concurrente Curso Java 2012, 2013 Juan Manuel Fernández Peña Programación secuencial Hasta ahora se ha trabajado con programas secuenciales Se ejecuta paso a paso Son deterministas: si se
Prueba N o 1. Programación II
UNIVERSIDAD ANDRÉS BELLO 1 Prueba N o 1 Programación II Profesores: José Luis Allende y Carlos Beyzaga. Fecha: 10 de Septiembre de 2013 Nombre: Nota: Instrucciones: Coloque su nombre a todas las hojas.
! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes
Introducción Programación orientada a objetos Curso INEM. Programación en Java Santiago Muelas Pascual [email protected]! Qué es la POO?! Un paradigma de programación! Un paradigma es una forma de afrontar
Teoría de Sistemas Operativos Sincronización Procesos
Teoría de Sistemas Operativos Sincronización Procesos Departamento de Electrónica º Semestre, 00 Gabriel Astudillo Muñoz http://www.elo.utfsm.cl/~elo1 Dos o más procesos leen o escriben ciertas zonas compartidas
Concurrencia en Java
Concurrencia en Java Herramientas proporcionadas por Java La Máquina Virtual (JVM) Pedro Pablo Gómez Martín La clase Thread Clase principal con la que conseguir concurrencia. La llamada a su método start()
Tema 7- Modelo y Aplicación de Pila, Cola y. Tema 7- Modelo y Aplicación de. Lista Con Punto de Interés
Tema - Modelo y Aplicación de Pila, Cola y Lista con Punto de Interés Tema - Modelo y Aplicación de Pila, Cola y Lista con Punto de Interés Índice general:. Modelo y Aplicación de Lista con Punto de Interés
Ejercicios de Hilos. Índice
Índice 1 Creación de hilos (0.5 puntos)...2 2 Prioridades (0.5 puntos)... 2 3 Productor/Consumidor (1 punto)...2 4 Pool de hilos (1 punto)... 3 1. Creación de hilos (0.5 puntos) En la clase Ej1 se crean
CAPÍTULO 8. Comunicación y sincronización basada en variables compartidas
CAPÍTULO 8. Comunicación y sincronización basada en variables compartidas 8 Comunicación y sincronización basada en variables compartidas...2 8.1 Exclusión mutua y condición de sincronización....2 8.2
1. Cuántas sentencias hay en la secuencia principal del siguiente programa?
1. Cuántas sentencias hay en la secuencia principal del siguiente programa? public class PruebaSwitch { System.out.print ("Opcion: "); case 3: System.out.println ("miércoles "); A. 1. B. 4. C. Más de 10.
Test SITR Temas: Planificación, Sincronización, Comunicación entre Procesos, Relojes, Señales, Temporizadores (TestSITR_T4 T9)
Test SITR Temas: Planificación, Sincronización, Comunicación entre Procesos, Relojes, Señales, Temporizadores (TestSITR_T4 T9) Temas: Planificación Sincronización y Comunicación entre Procesos Funciones
Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.
SISTEMAS INFORMÁTICOS I Junio 2003 INGENIERÍA EN INFORMÁTICA - Código Carrera 55 - Código Asignatura 077 Tipo de Examen: A NO SE PERMITE EL USO DE NINGÚN MATERIAL Tiempo: 2 horas Apellidos: Nombre: DNI:
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
Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1 Manuel Carro Universidad Politécnica de Madrid Este texto se distribuye bajo los términos de la Creative Commons License
3.3 Conceptos Básicos del Lenguaje Java
3.3 Conceptos Básicos del Lenguaje Java Conjunto de Caracteres Java utiliza Unicode, un conjunto de caracteres de 16 bits Java permite leer ASCII de 7-bit o Latin-1, conviertiéndolo a Unicode Son pocos
18. Interfaces Declaración de una interfaz
Programación orientada a objetos con Java 191 18. Interfaces Objetivos: a) Definir el concepto de interfaz b) Interpretar el código fuente de una aplicación Java donde aparecen interfaces c) Construir
Cada examen debe superarse con al menos un 4 para hacer media.
Concurrencia Pau Arlandis Martinez Sobre las normas Profesores Angel Herranz 2309 Julio Mariño 2308 Cada lunes se entregará un problema que debe resolverse antes del jueves. Únicamente sirven para practicar
Federico Peinado www.federicopeinado.es
Federico Peinado www.federicopeinado.es Depto. de Ingeniería del Software e Inteligencia Artificial disia.fdi.ucm.es Facultad de Informática www.fdi.ucm.es Universidad Complutense de Madrid www.ucm.es
INTERFACE LIST DEL API JAVA. CLASES ARRAYLIST, LINKEDLIST, STACK, VECTOR. EJEMPLO CON ARRAYLIST. (CU00920C)
APRENDERAPROGRAMAR.COM INTERFACE LIST DEL API JAVA. CLASES ARRAYLIST, LINKEDLIST, STACK, VECTOR. EJEMPLO CON ARRAYLIST. (CU00920C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado
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
Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1 Manuel Carro Universidad Politécnica de Madrid Este texto se distribuye bajo los términos de la Creative Commons License
Cada examen debe superarse con al menos un 4 para hacer media.
Concurrencia Pau Arlandis Martínez Sobre las normas Profesores Ángel Herranz 2309 Julio Mariño 2308 Cada lunes se entregará un problema que debe resolverse antes del jueves. Únicamente sirven para practicar
PROGRAMACION CONCURRENTE
PROGRAMACION CONCURRENTE II.3 Sincronización basada en memoria compartida: Semáforos J.M. Drake 1 Procesos concurrentes y memoria compartida. Si los diferentes procesos de un programa concurrente tienen
INDICE Prologo 1 Recorrido rápido de java 2 Clases y objetos 3 Extensión de clases
INDICE Prologo XIII 1 Recorrido rápido de java 1.1. Para empezar 1 1.2. Variables 2 1.3. Comentarios en el condigo 1.4. Constantes con nombre 5 1.4.1. Caracteres Unicode 6 1.5. Flujo de control 7 1.6.
Mensajes. Interbloqueo
CONCURRENCIA DE PROCESOS Preparado por: Angel Chata Tintaya ([email protected]) Resumen Los procesos comparten variables globales, comparten y compiten por recursos, se ejecutan simultáneamente intercalándose
