guía de ejercicios #1_unidad unidad i y ii-programación concurrente (asc-3c2012)

2
UNIVERSIDAD CENTROAMERICANA Página # 1 de 2 Facultad de Ciencia, Tecnología y Ambiente / Coordinación TIC´s Arquitectura de Sistemas Concurrentes Ingeniería en Sistemas y Tecnologías de la Información Guía de Ejercicio #1: Programación Concurrente Objetivos de Aprendizaje Al finalizar esta unidad, las/los estudiantes serán capaces de demostrar los siguientes resultados y dominios: 1. Explicar el concepto de programación concurrente mediante el estudio de los procesos concurrentes, sus características, sus interacciones y su aplicación en sistemas distribuidos. 2. Analizar la filosofía de la concurrencia así como las técnicas y herramientas para el manejo de concurrencia. 1. Usando su propias palabras, escriba algunas frases para explicar los siguientes términos: a) API (Interfaz de Programador de Aplicaciones). b) El API de Sockets. c) Winsock. d) La comunicación orientada a conexión frente a la comunicación sin conexión. 2. Describa cada una de las razones para que un proceso entre a un estado de interbloqueo. 3. De acuerdo al código y a la salida del Ejercicio No.1: Concurrencia, varios subprocesos imprimiendo en distintos intervalos (ProbadorSubprocesos ImprimirSubprocesos), describa detalladamente el Ciclo de Vida de un Proceso (Estados del Subproceso1). 4. Este ejercicio guía al estudiante mediante experimentos con un socket en modo stream orientado a conexión utilizando el código del Ejercicio No.2: Flujo de Datos en Modo Stream (Socket SolicitarConexion y Socket AceptarConexion). a) Compile y arranque en primer lugar AceptarConexion y, después, SolicitarConexion (distintas ventanas). Un ejemplo de los mandatos necesarios para ello son: <número de puerto del socket del servidor utilizado en este proceso> <mensaje, una cadena, para mandar> <nombre de la máquina del aceptador de la conexión> <número de puerto del aceptador de la conexión> localhost 12345 ¡Buenos Días! localhost 12345 Describa y explique el resultado. b) Repita el último apartado pero cambie el orden de ejecución de los programas: localhost 12345 localhost 12345 ¡Buenos Días! Describa y explique el resultado.

Upload: omar-rivera

Post on 02-Aug-2015

70 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Guía de Ejercicios #1_Unidad Unidad I y II-Programación Concurrente (ASC-3C2012)

UNIVERSIDAD CENTROAMERICANA Página # 1 de 2

Facultad de Ciencia, Tecnología y Ambiente / Coordinación TIC´s

Arquitectura de Sistemas Concurrentes

Ingeniería en Sistemas y Tecnologías de la Información

Guía de Ejercicio #1: Programación Concurrente

Objetivos de Aprendizaje

Al finalizar esta unidad, las/los estudiantes serán capaces de demostrar los siguientes resultados y

dominios:

1. Explicar el concepto de programación concurrente mediante el estudio de los procesos

concurrentes, sus características, sus interacciones y su aplicación en sistemas distribuidos.

2. Analizar la filosofía de la concurrencia así como las técnicas y herramientas para el manejo de

concurrencia.

1. Usando su propias palabras, escriba algunas frases para explicar los siguientes términos:

a) API (Interfaz de Programador de Aplicaciones).

b) El API de Sockets.

c) Winsock.

d) La comunicación orientada a conexión frente a la comunicación sin conexión.

2. Describa cada una de las razones para que un proceso entre a un estado de interbloqueo.

3. De acuerdo al código y a la salida del Ejercicio No.1: Concurrencia, varios subprocesos

imprimiendo en distintos intervalos (ProbadorSubprocesos – ImprimirSubprocesos), describa

detalladamente el Ciclo de Vida de un Proceso (Estados del Subproceso1).

4. Este ejercicio guía al estudiante mediante experimentos con un socket en modo stream orientado a

conexión utilizando el código del Ejercicio No.2: Flujo de Datos en Modo Stream (Socket

SolicitarConexion y Socket AceptarConexion).

a) Compile y arranque en primer lugar AceptarConexion y, después, SolicitarConexion

(distintas ventanas). Un ejemplo de los mandatos necesarios para ello son:

<número de puerto del socket del servidor utilizado en este proceso> <mensaje, una cadena, para mandar> <nombre de la máquina del aceptador de la conexión> <número de puerto del aceptador de la conexión>

localhost 12345 ¡Buenos Días!

localhost 12345

Describa y explique el resultado.

b) Repita el último apartado pero cambie el orden de ejecución de los programas:

localhost 12345

localhost 12345 ¡Buenos Días!

Describa y explique el resultado.

Page 2: Guía de Ejercicios #1_Unidad Unidad I y II-Programación Concurrente (ASC-3C2012)

UNIVERSIDAD CENTROAMERICANA Página # 2 de 2

Facultad de Ciencia, Tecnología y Ambiente / Coordinación TIC´s

Arquitectura de Sistemas Concurrentes

Ingeniería en Sistemas y Tecnologías de la Información

c) Añada un tiempo de retraso de 5 segundos (Thread.sleep(5000)) en el proceso

AceptarConexion justo antes de que el mensaje se escriba en el socket, después repita el

apartado a). Esto producirá el efecto de mantener al Solicitante bloqueado en la lectura

durante 5 segundos adicionales de manera que se pueda observar visualmente el bloqueo.

Muestre una traza de la salida de los procesos. ¿Están de acuerdo los mensajes de

diagnósticos mostrados en la pantalla con el Diagrama de Eventos del ejercicio Flujo de

Datos en Modo Stream (Socket SolicitarConexion y Socket AceptarConexion).

5. Interprete los resultados de tres ejecuciones (salidas) de la aplicación Ejercicio No.3: Caso del

Productor/Consumidor sin Sincronización al Objeto Compartido.

6. Escriba un programa en Java para demostrar que, a medida que se ejecute un subproceso de alta

prioridad, éste retrasará la ejecución de todos los subprocesos de menor prioridad

(Thread.MAX_PRIORITY, Thread.NORM_PRIORITY, Thread.MIN_PRIORITY).

7. Escriba un programa en Java para demostrar cómo un subproceso de alta prioridad, usa a sleep para

dar a los subprocesos de menor prioridad la oportunidad de ejecutarse.

8. Defina la siguiente terminología básica:

arquitectura sistólica búfer compartido ciclo de vida de

un subproceso concurrencia consumidor

currentThread() exclusión mutua getName() inanición interbloqueo

memoria compartida memoria distribuida monitor paso de

mensajes

prioridad de un

subproceso

productor programación

cíclica (round-robin) quantum (cuanto)

recolector de

basura región crítica

relación

producto/consumidor run() sincronización

sistemas

distribuidos

sistemas

empotrados

sleep() start() subprocesamiento

múltiple subproceso tiempo real