Está en la página 1de 3

1

ALGORITMO CONCURRENTE PRODUCTOR-CONSUMIDOR


Jorge Antonio Linares Vera - C odigo: 2009-34058 E.A.P. de Ingenier a en Inform atica y Sistemas - Facultad de Ingenier a Universidad Nacional Jorge Basadre Grohmann Tacna - Per u, jlinformatico@gmail.com

Abstract En diversos procesos computacionales es necesario aplicar diversos paradigmas de programaci on para enfocar el problema, es as que en algunas aplicaciones se necesita aplicar concurrencia y paralelismos para aumentar la eciencia y potencial de los programas. En este contexto se va a desarrollar los principales conceptos de la programaci on concurrente y paralela, as como una introducci on a la comunicaci on entre procesos y teor a de hilos. As mismo se presentan los ejemplos cl asicos en donde se aplican. Adem as se presentar a una introducci on a la programaci on paralela, dando los alcances te oricos fundamentales. Finalmente se presentan las conclusiones obtenidas Index Terms Programacion Paralela, Style le, Microsoft Word, IEEE Publications, Instrumentation and Measurement Technology Conference, IMTC.

estudios del cosmo, detecci on de petr oleo, simulaciones de aeronaves, etc. La mejora de la tecnolog a y por consiguiente, la consecuente reducci on del tamano del transistor, nos permiten incorporar m as componentes al uniprocesador sin aumentar rea (m su a as memoria, m as pipelines, etc.). Sin embargo, esta disminuci on del tamanio del transistor para incorporar m as mejoras y capacidades al uniprocesador tampoco es una soluci on que se pueda llevar al innito (principio de incerteza de Heisenberg). Estos problemas tecnol ogicos contribuyeron a que, para poder tratar con problemas tan grandes evitando las limitaciones tecnol ogicas, los arquitectos de computadores comenzar an a centrar sus esfuerzos en arquitecturas paralelas y disenar t ecnicas para la programaci on avanzada, concurrente y distribuida. II. C ONCEPTOS B ASICOS

I.

I NTRODUCCI ON La programaci on paralela o programaci on concurrente es una t ecnica de programaci on basada en la ejecuci on simult anea, bien sea en un mismo ordenador (con uno o varios procesadores) o en un cluster de ordenadores, en cuyo caso se denomina computaci on distribuida. Los sistemas multiprocesador o multicomputador consiguen un aumento del rendimiento si se utilizan estas t ecnicas. En los sistemas monoprocesador el benecio en rendimiento no es tan evidente, ya que la CPU es compartida por m ultiples procesos en el tiempo, lo que se denomina multiplexaci on. La esencia de la porgramaci on concurrente es la divisi on de una tarea en m ultiples sub-tareas que puedan ser realizadas relativamente independientemente unas de otras para combinarlas despu es. II-A. El Concepto de proceso

Generalmente la formaci on en inform atica de un ingeniero (industrial, inform atica, telecomunicaciones o similar) comienza por la programaci on estructurada, en lenguajes como C/C++ o Matlab, y luego se complementa con Programaci on Orientada a Objetos (POO) e Ingenier a del Software, con An alisis y Diseno Orientado a Objetos, UML, etc. Sin embargo, existen una serie de t ecnicas y tecnolog as de software que escapan del alcance de los anteriores cursos. La programaci on de tareas concurrentes, los sistemas distribuidos, la programaci on de c odigo eciente o algor tmica avanzada son temas que quedan a menudo relegados, y sin embargo son muy necesarios en tareas de ingenier a inform atica, sistemas, industrial, comunicaciones y similares. reas de investigaci Son muchas las a on, y sobre todo, programas de aplicaci on real donde la capacidad de c omputo de un nico procesador no es suciente. Un ejemplo lo encontramos u en el campo de la bioinform atica y, en particular, en la rama de gen omica, donde los secuenciadores de genomas son capaces de producir millones de secuencias en un d a. Estos millones de secuencias se deben procesar y evaluar con tal de formar el genoma del ser vivo que se haya analizado. Este procesar y evaluar requieren un tiempo de c omputo y capacidades de memoria muy grandes, s olo al alcance de computadores con m as de un core y una capacidad de almancenamiento signicativa. mbitos donde nos podemos encontrar con estas Otros a necesidades de c omputo son en el disenio de f armacos,

Informalmente, un proceso se puede denir como un programa en ejecuci on. Adem as del propio c odigo al que est a vinculado, un proceso incluye el valor de un contador de programa y el contenido de ciertos registros del procesador. Generalmente, un proceso tambi en incluye la pila del proceso, utilizada para almacenar datos temporales, como variables locales, direcciones de retorno y par ametros de funciones, y una secci on de datos con variables globales. Finalmente, un proceso tambi en puede tener una secci on de memoria reservada de manera din amica. Ver gura 1.

En este contexto, una hebra o hilo se dene como la unidad b asica de utilizaci on del procesador y est a compuesto por los elementos: Un ID de hebra, similar al ID de proceso. Un contador de programa. Un conjunto de registros. Una pila. Ver gura 3.

Fig. 1. Esquema gr aco de un programa y un proceso

II-B.

Gesti on b asica de procesos.

Informalmente, un proceso se puede denir como un programa en ejecuci on. Adem as del propio c odigo al que est a vincu ste va cambiando lado, A medida que un proceso se ejecuta, e de un estado a otro. Cada estado se dene en base a la actividad desarrollada por un proceso en un instante de tiempo determinado. Un proceso puede estar en uno de los siguientes estados: Nuevo: donde el proceso est a siendo creado. En ejecuci on: donde el proceso est a ejecutando operaciones o instrucciones. En espera: donde el proceso est a a la espera de que se produzca un determinado evento, t picamente la nalizaci on de una operaci on de E/S. Preparado: donde el proceso est a a la espera de que le asignen alguna unidad de procesamiento. Terminado: donde el proceso ya ha nalizado su ejecuci on. Ver gura 2.

Fig. 3. Esquema gr aco del modelo multihilo

II-D.

Orden y sincronizaci on de tareas

Una vez enunciadas estas buenas pr acticas, el primer paso que tenemos que efectuar tras realizar la distribuci on en tareas stas, y adem es analizar cu al es el orden entre e as, cu ales son las restricciones de compartici on de datos de estas tareas. En caso de tener alg un tipo de restricci on de orden o de compartici on de datos, tendremos que ver qu e mecanismos de sincronizaci on se deben usar. Tambi en puede ser que nos encontremos que haya una paralelizaci on donde no se tenga que realizar ning un tipo de sincronizaci on, siendo todas la tareas completamente independientes, en este caso estamos hablando de un paralelismo embarazoso. Esto no quita que tengamos que tener en cuenta aspectos de balanceo de carga o de localidad de datos que pueden traducirse en una paralelizaci on poco eciente del programa. II-E. El problema del productor/consumidor

Fig. 2. Diagrama general de los estados de un proceso

II-C.

Procesos e Hilos

El modelo de proceso presentado hasta ahora se basa en un nico ujo o hebra de ejecuci u on. Sin embargo, los sistemas operativos modernos se basan en el principio de la multiprogramaci on, es decir, en la posibilidad de manejar distintas hebras o hilos de ejecuci on de manera simult anea con el objetivo de paralelizar el c odigo e incrementar el rendimiento de la aplicaci on.

Considere un buffer de tamano limitado que se comparte por un proceso productor y otro proceso consumidor. Mientras el primero anade elementos al espacio de almacenamiento compartido, el segundo los consume. Evidentemente, el acceso concurrente a este buffer puede generar incosistencias de dichos datos a la hora de, por ejemplo, modicar los elementos contenidos en el mismo. Suponga que tambi en se mantiene una variable cont que se incrementa cada vez que se anade un elemento al buffer y se decrementa cuando se elimina un elemento del mismo. Este esquema posibilita manejar buffersize elementos, en lugar de uno menos si dicha problem atica se controla con dos variables in y out.

Aunque el c odigo del productor y del consumidor es correcto de manera independiente, puede que no funcione correctamente al ejecutarse de manera simult anea. Por ejemplo, la ejecuci on concurrente de las operaciones de incremento y decremento del contador pueden generar inconsistencias, tal y como se aprecia en la gura 4, en la cual se desglosan dichas operaciones en instrucciones m aquina. En dicha gura, el c odigo de bajo nivel asociado a incrementar y decrementar el contador inicializado a 5, genera un resultado inconsistente, ya que esta variable tendr a un valor nal de 4, en lugar de 5.

paralelizaci on (con lo que maximizaremos el speedup obtenido), tal y como hemos analizado en el apartado anterior. 2. Productividad en el momento de programar: legibilidad, portabilidad, independencia de la arquitectura destino. IV. C ONCLUSIONES

Fig. 4. C odigo para los procesos productor y consumidor

Este estado incorrecto se alcanza debido a que la manipulaci on de la variable contador se realiza de manera concurrente por dos procesos independientes sin que exista ning un mecanismos de sincronizaci on o control. Este tipo de situaci on, en la que se produce un acceso concurrente a unos datos compartidos y el resultado de la ejecuci on depende del orden de las instrucciones, se denomina condici on de carrera. Para evitar este tipo de situaciones se ha de garantizar que s olo un proceso pueda manipular los datos compartidos de manera simult anea, es decir, dichos procesos se han de sincronizar de alg un modo. Este tipo de situaciones se producen constantemente en mbito de los sistemas operativos, por lo que el uso de el a mecanismos de sincronizaci on es cr tico para evitar problemas potenciales. III. F UNDAMENTOS DE LA P ROGRAMACI ON C ONCURRENTE

Se Comprendi o sobre la importancia de la programaci on concurrente en las aplicaciones de hoy en d a , asimismo se dio a conocer los conceptos b asicos de los fundamentos de la programaci on concurrente paralelas. Se lleg o a comprender como diseniar algoritmos ecientes utilizando distintas t ecnicas algor tmicas. Se conoci o sobre herramientas inform aticas fundamentales para el desarrollo de estas aplicaciones como OpenMP y PMI, entre otros est andares. Se estudi o el caso del algoritmo productor/consumidor y se identic o el problema claro de sincronizaci on de procesos que existen en los sistemas operativos. Se adquiri o experiencia y conocimiento en los mecanismos de sincronizaci on y comunicaci on que se utilizan en la actualidad para desarrollar programas concurrentes tanto para sistemas de memoria compartida como para sistemas distribuidos. R EFERENCES
[1] J. T. Palma, C. Garrido, F. S anchez, A. Quesada, Programaci on Concurrente, Paraninfo. 2008. 2a edici on. [2] Clay Breshears, The Art of Concurrency: A Thread Monkeys Guide to Writing Parallel Applications, OReilly Media, 2009. [3] Francisco. Almeida, Domingo Gim enez, Jos e M. Mantas, Antonio Vidal, Introducci on a la Programaci on Paralela, Paraninfo, 2008. [4] Oscar Rafael Garc a Regis, Enrique Cruz Mart nez, Humberto Carrillo Calvet, Computaci on Paralela, Version 2003.

Un proceso cooperativo es un proceso que puede verse afectado por otros procesos que se est en ejecutando. Estos nicamente datos, intercambiados procesos pueden compartir u mediante alg un mecanismo de env o de mensajes o mediante el uso de archivos, o pueden compartir datos y c odigo, como ocurre con los hilos o procesos ligeros. En cualquier caso, el acceso concurrente a datos compartidos puede generar inconsistencias si no se usa alg un tipo de esquema que garantice la coherencia de los mismos. III-A. Principios de programaci on paralela

Jorge Antonio Linares Vera. Nacio el 03 de Noviembre de 1991 en la regi on Tacna-Per u. Actualmente estudiante de 5to de la E.A.P de Ingenier a en Inform atica y Sistemas - Facultad de Ingenier a - Universidad Nacional Jorge Basadre Grohmann. Coordinador General de la Comunidad de Software Libre Basadrinux - UNJBG. Delegado APEISC ante la Asociaci on Peruana de Ingenier a de Sistemas y AT X Computaci on - APEISC. Art culo editado en L E con el editor TeXmaker en Ubuntu 12.04 Gnu/Linux.

Cuando paralelizamos una aplicaci on, dos de los principales objetivos que se buscan son: 1. Mejorar el rendimiento de la aplicaci on, maximizando la concurrencia y reduciendo los costes adicionales de esta