Programación de Sistemas Concurrentes y Distribuidos 1 a Convocatoria curso 12/13

Documentos relacionados
Programación de Sistemas Concurrentes y Distribuidos 2 a Convocatoria curso 12/13

Lección 1: Introducción a la Programación de Sistemas Concurrentes y Distribuidos

Lección 10: Coordinación mediante espacios de tuplas

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

Estructura de Datos y de la Información

Concurrencia Monitores. Guillermo Román Díez

Ingeniera de Sistemas: Luz Esperanza Espitia Tutora de Estructura de datos.

ALGORÍTMICA. Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid.

Lección 5: Sincronización de procesos mediante semáforos

Segundo Parcial de Programación 2 7 de junio de 2017

Examen de Programación Concurrente - Clave: a Junio 2008 Departamento de Lenguajes, Sistemas Informáticos e Ingeniería del Software.

Primitivas de Sincronización (continuación) MONITORES: Primitiva de alto nivel, es a nivel de lenguajes como: ADA, PASCAL, JAVA.

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

PEC1. Formato y fecha de entrega. Presentación. Competencias

Tema 7- Modelo y Aplicación de Pila, Cola y. Tema 7- Modelo y Aplicación de. Lista Con Punto de Interés

Tema 03: TAD Cola. M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom

Concurrencia. Primitivas IPC con bloqueo

Prueba objetiva 2 - Clave b

Grado en Ingeniería Informática Estructura de Datos y Algoritmos, Grupo 81M, 2014/ de Marzo de

TEMA 2 Estructuras de datos lineales

Prueba objetiva 2 (4F1M) - Clave a

Comunicación y sincronización

Prácticas de Sistemas Operativos

Calidad del Software. Ejercicios Tema 4 Conceptos de pruebas

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

Examen escrito de Programación 1

Apellidos: Nombre: Matrícula:

Acceso coordinado a recursos compartidos

Prueba objetiva 2 - Clave a Concurrencia Primer semestre Grado en Ingeniería Informática. Universidad Politécnica de Madrid

Examen escrito de Programación 1. Viernes 22 de enero de Problema 1 o (3.0 puntos) Problema 2 o (3.0 puntos)

Unidad 1: Gestión de Procesos

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

Introducción al Lenguaje de Programación Ada

Árboles Binarios de Búsqueda. Lección 13

Solución de Examen de Comunicación de Datos

B) Contestar Verdadero o Falso a las siguientes preguntas, justificando la respuesta:

Programación Concurrente: Septiembre 2007 David Fernández-Amorós

Concurrencia Prácticas 1 y 2

Algoritmos y Estructuras de Datos: Ordenación y Colas con Prioridad. Guillermo Román Díez

Concurrencia, exclusión mutua y sincronización. Capítulo 5 HungriaBerbesi

Examen de Programación 1. Viernes 31/enero/2014. Problema 1 o (2.5 puntos) Disponer un documento de identificación con fotografía sobre la mesa.

ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

1. Equivalencia de herramientas. Implemente las primitivas de los buzones mediante monitores.(2pt).

LENGUAJES DE PROGRAMACIÓN. Solución al examen de Septiembre 2015

Estructuras de Datos II (I.T. Informática de Gestión y Sistemas) Boletín nº 1 Tipos Abstractos de Datos: especificaciones algebraicas

Estructura de datos Tema 2: Tipos Abstractos de Datos (TADs)

Ejercicio 1 (proyecto prlistas, paquete listas)

Lección 7: Sincronización de procesos mediante monitores

Tema 2.- Ordenación (Parte I)

Ejercicios con Monitores

Lección 14: Programación dirigida por eventos

Algoritmos y Estructuras de Datos Pilas LIFO y Colas FIFO. Guillermo Román Díez

Apellidos: Nombre: Matrícula: UNIVERSIDAD POLITÉCNICA DE MADRID

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Colas con prioridad, montículos y el heapsort. Lección 18

Tema 8- Implementación de Pila, Cola y. Tema 8- Implementación de Pila, Cola y Lista con Punto de Interés. Representación Eficaz de una EDA

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

ISO Tema 8,

Diseño Basado en Componentes Curso 2008 / 09

Algoritmos y Estructuras de Datos Iteradores. Guillermo Román Díez

Examen de Programación 2 Diciembre de 2012

Concurrencia de Procesos

1 Introducción a los algoritmos y a la programación de computadoras... 1

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

Tema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Estructura de datos y de la información Boletín de problemas - Tema 10

EDA. Tema 8 Colas de Prioridad: Heaps

Profesor: José Miguel Rubio L.

SISTEMAS OPERATIVOS: COMUNICACIÓN Y SINCRONIZACIÓN ENTRE PROCESOS. Procesos concurrentes y problemas en la comunicación y la sincronización

SISTEMAS OPERATIVOS PROBLEMAS RESUELTOS. Jorge Walter Orellana Araoz

EJERCICIO 2 (3 PUNTOS) A) Sea el árbol binario AVL de la figura siguiente: B) Dada la estructura de la figura siguiente:

Unidad 1. Análisis de Algoritmos. Ing. Leonardo R. L. Estructura de datos - Generalidades Unidad I Pág 1

Soluciones Ejercicios Tema 8

Prueba objetiva 2 - Clave a

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2007.

Tablas multidimensionales. Lección 20

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Programación Concurrente y distribuida

Grado en Ingeniería Informática Estructura de Datos y Algoritmos, Grupo 80M, 2014/ de Marzo de

CLASE 10 - ESTRUCTURAS DE DATOS DINÁMICAS

Concurrencia. Programación Concurrente. Espera ocupada. Primitivas IPC con bloqueo

Fundamentos de Programación

PRÁCTICA #5 Acciones, Funciones, Pase de Parámetros y Alcance de Identificadores

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º

Tipo de dato Abstracto (Tad) PILAS COLAS

Tema 6- Estructuras de Datos: Jerarquía de. Tema 6- Estructuras de Datos: Jerarquía de una EDA

FUNDAMENTOS DE INFORMÁTICA

4. Pilas ESTRUCTURAS DE DATOS 1

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

LENGUAJES DE PROGRAMACIÓN. Solución al examen de Junio 2016, Segunda Semana

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º. Nombre-Apellidos:

Prueba final, parte 2 - Clave a Concurrencia Segundo semestre Universidad Politécnica de Madrid

Hoja de ejercicios del Tema 9

Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1

Árboles balanceados (AVL) Tablas de dispersión (Hash) Colas de prioridad (Heap)

Programación concurrente

Inicio del programa. Entrada de datos. Proceso de datos. Salida de datos. Fin del programa

Transcripción:

Programación de Sistemas Concurrentes y Distribuidos 1 a Convocatoria curso 12/13 5 de febrero de 2013 Dpto. de Informática e Ingeniería de Sistemas Universidad de Zaragoza Ejercicio 1 (1.5 ptos.) Considérese el siguiente programa concurrente, en el que tres procesos iteran escribiendo distinta información en la salida estándar. Se pide completar el código con lo que se considere necesario para que se cumplan simultáneamente los dos invariantes siguientes: 1) num(a) >= num(c); 2) num(d) > num(e) (donde, para un carácter dado <c>, num(c) representa el número de veces que se muestra por la salida estándar). process P1 process P2 process P3 while TRUE while TRUE while TRUE write ("A") write ("C") write ("E") write ("B") write ("D") write ("F") end while end while end while end process end process end process Ejercicio 2 (2.50 ptos.) La figura 1 representa de manera esquemática el patrón de diseño supervisor-worker. Este esquema propone una organización sencilla en la que un proceso supervisor suministra tareas a los trabajadores a través de un medio común para el intercambio de 1

información. Los procesos trabajadores van tomando las solicitudes, obtienen los resultados y los envían al supervisor. Esto se repite hasta que el supervisor le indique que puede terminar. El supervisor toma los resultados y actúa en función a cuál sea su objetivo. Figura 1: Esquema del patrón de diseño supervisor-worker Se pide desarrollar un programa concurrente que ordene 100 ficheros de datos, de manera que un proceso supervisor suministra los nombres de los ficheros, y cuatro procesos trabajadores van tomando las órdenes depositadas por el supervisor y ordenan el fichero cuyo nombre se les ha suministrado. Cada trabajador va iterando ese proceso hasta que recibe del supervisor la orden de terminar. Dependiendo del entorno de ejecución, es posible que distintos procesos trabajador tengan distintas velocidades, por lo que no es adecuado solicitar un cuarto de las ordenaciones a cada proceso trabajador. La sincronización entre el proceso supervisor y los trabajadores se llevará a cabo mediante el uso de monitores. -- ------------------------------------------------------- constant natural NUM_WORKERS := 4 constant natural NUM_FICH := 100 monitor control end monitor process supervisor string array [ NUM_FICH ] ficheros :=... --lo que sea; ya inicicializado end -- completar de acuerdo al enunciado del ejercicio process 2

process worker (i :1..4):: operation ordena_fichero ( string nom_fich ) -- Pre: el fichero en < nom_fich > existe -- Post: el fichero en < nom_fich > está ordenado -- Com: Asumimos que está implementada end... operation -- completar de acuerdo al enunciado del ejercicio end process -- ------------------------------------------------------- Ejercicio 3 (2.50 ptos.) Un jardín tiene dos puertas de acceso. Cada puerta tiene instalado un torno responsable de gestionar las entradas y salidas del jardín. Debido a su reducido tamaño no puede haber más de 50 personas simultáneamente visitándolo. Inicialmente, hay 100 personas interesadas en realizar la visita. Cada vez que una persona quiere acceder al jardín debe comprar un ticket de entrada. En el ticket se le especifica la puerta concreta por la que debe entrar y salir del jardín. Todas las personas se comportan de la misma manera, repitiendo la siguiente secuencia de acciones durante un número aleatorio de veces: primero, compran un ticket; segundo, solicitan a la puerta asignada permiso para entrar en el jardín y esperan a que ésta les dé acceso; tercero, visitan el jardín durante un cierto tiempo; y, finalmente, solicitan salir y esperan a que el torno les autorice la salida. Por otro lado, el funcionamiento de los tornos es muy simple: reciben las solicitudes de los usuarios (que ya tienen su ticket correspondiente) y les dan los permisos tanto de entrada como de salida. Se pide implementar el sistema concurrente anteriormente descrito. El sistema consta de tres tipos de procesos: el proceso expendedor de tickets, los dos procesos puerta, y los 100 procesos persona. La comunicación y coordinación de los procesos debe ser programada utilizando Linda. Ejercicio 4 (2.0 ptos.) Ricart y Agrawala propusieron un algoritmo distribuido para el acceso a una sección crítica basado en el paso de un testigo (se adjunta en el Anexo-II). El sistema dispone de un único testigo que es compartido por todos los procesos. En todo momento, sólo el 3

proceso que tiene el testigo tiene derecho a entrar en su sección crítica. Mientras tanto, el resto de los procesos interesados deben esperar. Ejercicio 4.1. Se pide modificar el algoritmo Ricart-Agrawala para que funcione con procesos con prioridades. La prioridad de cada proceso será representada por un número entero. Antes de que comience la ejecución del programa, el proceso con identificador 1 será el responsable de generar aleatoriamente las prioridades de todos los procesos. Estas prioridades serán estáticas durante la ejecución del programa. La nueva versión del algoritmo determinará a qué proceso se le pasa el testigo según las siguientes reglas: 1) el testigo será pasado al proceso que tenga la prioridad maxima de entre los que hubieran declarado su interés; y, 2) si hubiera más de un proceso con la misma prioridad, el testigo será pasado al que tenga el identificador menor. Justificar que la solución propuesta es libre de bloqueos. Ejercicio 4.2. Analizar el comportamiento de la solución propuesta desde el punto de vista de la propiedad de equidad. Si hubiera problemas de equidad, esbozar de forma concisa y breve una posible solución. 4

Ejercicio 5 (1.5 ptos.) Dado el siguiente pseudocódigo correspondiente a un programa concurrente en el que están involucradas np procesos, se pide implementar el sistema en lenguaje Java utilizando el paquete de semáforos java.util.concurrent.semaphore. -- --------------------------------------------------------- constant integer n := 50 -- num. de datos np := 200 -- num. de procesos integer array [1.. n] datos :=... --lo que sea semaphore array [1.. n] mutex_dato := (1.. n,1) -- evitar interferencias en accesos a datos Process P(i: 1.. np ):: integer i1,i2, temp loop forever i1 := número aleatorio entre 1 y n i2 := número aleatorio entre 1 y n --1<=i1 <=n AND 1<=i2 <=n if i1 < > i2 --el caso i1 = i2 no hace nada if i1 >i2 temp := i1 i1 := i2 i2 := temp end if --i1 tiene el índice menor, i2 el mayor -- acceso en orden ---> no hay bloqueos wait ( mutex_dato [i1 ]) wait ( mutex_dato [i2 ]) temp := datos [i1] datos [i1] := datos [i2] datos [i2] := temp signal ( mutex_dato [i1 ]) signal ( mutex_dato [i2 ]) end if end loop -- --------------------------------------------------------- 5

Anexo I: Especificación del TAD cola genérica ======================================================== espec colasgenéricas usa booleanos, naturales parámetro formal género elemento fpf género cola -- valores del TAD cola representan -- secuencias de elementos con acceso FIFO --( first in, first out ): el primer elemento -- añadido será el primero en ser borrado -- ejemplo : una cola de strings -- cola of string c_s := crear () operaciones función crear () devuelve cola -- Post: devuelve una cola vacía, sin elementos procedimiento encolar ( in/ out c: cola in e: elemento ) -- Post: "c" es la cola resultante de añadir "e" a "c" función esvacía?( c: cola ) devuelve booleano -- Post: devuelve TRUE si "c" vacía; FALSE en caso -- contrario función primero ( c: cola ) devuelve elemento -- Pre: "c" es no vacía -- Post: devuelve el elemento más antiguo de "c" procedimiento desencolar ( in/ out c: cola ) -- Pre: "c" es no vacía -- Post: "c" es la cola resultante de eliminar de "c" -- su primer elemento función longitud ( c: cola ) devuelve natural -- Post: devuelve el num. de elementos de "c" fespec ======================================================== 6

Anexo II: Ricart-Agrawala por paso del testigo boolean havetoken := true (node 1), false others integer array[1..n] requested := [1..n,0] integer array[1..n] granted := [1..n,0] integer mynum := 0 el token boolean incs := false Algoritmo de Ricart-Agrawala (paso de testigo) Lo tengo? process MAIN loop forever P1: SNC Estoy dentro? P2: if NOT havetoken P3: mynum := mynum + 1 P4: for all other nodes N P5: send(request,n,myid,mynum) P6: receive(token,granted) P7: havetoken := true P8: incs := true P9: SC P10: granted[myid] := mynum P11: incs := false P12: sendtoken() Programación de Sistemas Concurrentes y Distribuidos veces he pedido entrar J. Ezpeleta-P. Álvarez 23 Univ. de Zaragoza boolean havetoken := true (node 1), false others integer array[1..n] requested := [1..n,0] integer array[1..n] granted := [1..n,0] integer mynum := 0 el token boolean incs := false Algoritmo de Ricart-Agrawala (paso de testigo) Lo tengo? process RECEIVE integer source,reqnum veces he pedido entrar Estoy dentro? loop forever P13: receive(request,source,reqnum) P14: requested[source] := max(requested[source],reqnum) P15: sendtoken() operation sendtoken if exists N such that requested[n] > granted[n] AND havetoken AND NOT incs for some such N send(token,n,granted) Programación de Sistemas havetoken Concurrentes := false y Distribuidos J. Ezpeleta-P. Álvarez 24 Univ. de Zaragoza 7