lunes, 23 de noviembre de 2009
9.- Sockets
Práctica de Sockets:
http://www.mediafire.com/?3jzn5tyiuwh
8.- Monitores Basados en Semáforos
Un mejor ejemplo se ve en la Práctica 8:
http://www.mediafire.com/?ontw3nnwnmu
5.- 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 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 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
¿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
Reporte Individual Practica 1:
http://www.mediafire.com/?43m1dklmj0j
Definiciones
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.