lunes, 23 de noviembre de 2009

9.- Sockets

En esta sesión de laboratorio aprendimos sobre el uso de Sockets en Java, los cuales nos sirven para comunicar dos máquinas distintas a través de internet por medio de los IP's.


Práctica de Sockets:
http://www.mediafire.com/?3jzn5tyiuwh

8.- Monitores Basados en Semáforos

En esta unidad vimos otra técnica para sincronizar y aplircar la exclusión mutua para hilos en Java, la cual se basa en un monitor que a la vez utiliza un semáforo.

Un mejor ejemplo se ve en la Práctica 8:
http://www.mediafire.com/?ontw3nnwnmu

5.- Monitores

En esta unidad aprendimos otra técnica para la sincronización y exclusión mutua de hilos, en especial aplicada sobre Java, los Monitores.

En el siguiente reporte aplicamos lo aprendido en clase para implementar los monitores en nuestros programas. Práctica 7 Individual:

http://www.mediafire.com/?mjh14bjmbza

4.- Semáforos

En esta unidad vimos cómo se utilizan los semáforos especialmente en Java para la sincronización de hilos.

En el siguiente reporte de la práctica 6 se ven más detalles de lo aprendido en el curso:
http://www.mediafire.com/?zkem1iwkmhd

3.- Sincronización y Comunicación

En esta unidad vimos el uso de la palabra reservada synchronized en Java así como los algoritmos de Peterson y Dekker para sincronizar procesos, vimos además los tipos de hilos de acuerdo a las diversas plataformas. Y vimos Exclusión Mutua.

En esta unidad sólo realizamos prácticas en equipo en donde implementamos los algoritmos de Peterson y Dekker y codificamos los problemas de los Jardines y los Esquimales, programas en C y Java y cuestionarios de las Notas del curso.

2.- Procesos e Hilos

En esta unidad vimos las propiedades y atributos de la clase Thread en Java, como por ejemplo la asignación de prioridades con el método setPriority();

¿Cuáles son las prioridades que un hilo puede tener?
Son MIN_PRIORITY = 1
NORM_PRIORITY = 5
MAX_PRIORITY = 10

Reporte Práctica 2:
http://www.mediafire.com/?mzynw1y0zlq

Cuestionario Capítulo 1 y Ejercicio:
http://www.mediafire.com/?mzynw1y0zlq

Custionario Programación Distribuida y Ejercicios:
http://www.mediafire.com/?oh2fzy2dmz1

Exámen 1:
http://www.mediafire.com/?tgnedhaumy5

1.- Introducción a la Programación Concurrente

En esta unidad vimos cómo crear hilos en Java, que puede ser utilizando herencia o implementando la interfaz Runnable.

Reporte Individual Practica 1:

http://www.mediafire.com/?43m1dklmj0j

Definiciones

¿Qué es programación concurrente?

La computación concurrente es la simultaneidad en la ejecución de múltiples tareas interactivas. Estas tareas pueden ser un conjunto de procesos o hilos de ejecución creados por un único programa. Las tareas se pueden ejecutar en un sola unidad central de proceso (multiprogramación), en varios procesadores o en una red de computadores distribuidos. La programación concurrente está relacionada con la programación paralela, pero enfatiza más la interacción entre tareas. Así, la correcta secuencia de interacciones o comunicaciones entre los procesos y el acceso coordinado de recursos que se comparten por todos los procesos o tareas son las claves de esta disciplina.

Los pioneros en este campo fueron Edsger Dijkstra, Per Brinch Hansen, y C. A. R. Hoare.

¿Qué es programación paralela?

La computación paralela es una técnica de programación en la que muchas instrucciones se ejecutan simultáneamente. Se basa en el principio de que los problemas grandes se pueden dividir en partes más pequeñas que pueden resolverse de forma concurrente ("en paralelo"). Existen varios tipos de computación paralela: paralelismo a nivel de bit, paralelismo a nivel de instrucción, paralelismo de datos y paralelismo de tareas. Durante muchos años, la computación paralela se ha aplicado en la computación de altas prestaciones, pero el interés en ella ha aumentado en los últimos años debido a las restricciones físicas que impiden el escalado en frecuencia. La computación paralela se ha convertido en el paradigma dominante en la aquitectura de computadores, principalmente en los procesadores multinúcleo. Sin embargo, recientemente, el consumo de energía de los ordenadores paralelos se ha convertido en una preocupación.

Los ordenadores paralelos se pueden clasificar según el nivel de paralelismo que admite su hardware: los ordenadores multinúcleo y multiproceso tienen varios elementos de procesamiento en una sola máquina, mientras que los clusters, los MPP y los grids emplean varios ordenadores para trabajar en la misma tarea.

Los programas de ordenador paralelos son más difíciles de escribir que los secuenciales porque la concurrencia introduce nuevos tipos de errores de software, siendo las condiciones de carrera los más comunes. La comunicación y la sincronización entre las diferentes subtareas son típicamente las grandes barreras para conseguir un buen rendimiento de los programas paralelos. El incremento de velocidad que consigue un programa como resultado de la paralelización viene dado por la ley de Amdahl.