MISIONEROS Gian Carlo Gonzalo Mamani Cdigo: 2013-39104 Carlo Alberto Braez Vargas -Codigo 2013-39### E.A.P. de Ingeniera en Informtica y Sistemas Facultad de Ingeniera Universidad Jorge Basadre Grohmann Tacna-Per carlos_18_1229 @hotmail.com cbraez.fitness@gmail.com
Abstract: This scientific article, I am going to announce, an option for everything that one that begins in the world of the programming, the competing programming is one of the biggest options to the moment to create software and complex systems, since me to save the consumption of memory to demonstrate that us it is suitable to use this type of programming we will focus to solving an algorithm which is named zthis we will use types of solutions that will be the semaphores and monitors and will analyze which is convenient for us to use. Palabras clavez: programacin concurrente, semforos, monitores, algoritmo, canbales y misioneros. 1. INTRODUCCIN
A fines de los aos 50 aparece la programacin concurrente con el problema de la interrupcin, por esos tiempos la arquitectura para los ordenadores era complejo y no tenan en cuenta la comparticin de datos entre los distintos procesos que podan ser interrumpidos, con la intencin de continuarlos ms tarde. Para ello era necesario encontrar soluciones a los problemas de la programacin concurrentes: exclusin mutua, condicin de sincronizacin de los personajes que tuvo gran influencia en la programacin corriente es E. W. Dijkstra quien propuso el mecanismo de los semforos y posteriormente los monitores, estos dos mecanismos sern tratados en los puntos posteriores aplicndolos a la solucin del algoritmo de los canbales y misiones.[1]
2. El PROBLEMA: Algoritmo de canbales y misioneros En una tribu de canbales todos comen de la misma olla, la cual puede albergar N raciones de comida. Cuando un canbal quiere comer, simplemente se sirve de la olla comn, a no ser que est vaca. En ese caso, el canbal despierta al cocinero de la tribu y espera hasta que ste haya rellenado la olla. Este es un problema tpico al momento de inicializarse en la programacin concurrente, al igual que problemas como la cena de los filsofos, lector y escritor, productor consumidor, etc. Problemas que nos ponen a prueba la exclusin mutua, sincronizacin de datos. Estos problemas son la base para posteriormente utilizarlos en la creacin de sistemas operativos y software.
3. SOLUCIONAR LOS PROBLEMAS DE LA PROGRAMACION CONCURRENTE Como ya hemos mencionado la programacin concurrente presenta problemas en su implementacin y es que por su misma arquitectura por ello es necesario solucionar los problemas inherentes: exclusin mutua, condicin de sincronizacin. Tenemos dos maneras de resolver el problema utilizando semforos o monitores cada uno tiene su ventaja, lo analizaremos de las dos formas y veremos cual nos he ms eficiente.
3.1. Semforos Un semforo es una herramienta de sincronizacin genrica e independiente del dominio del problema, ideada por Dijsktra en 1965. Las operaciones de sincronizacin de los semforos son dos: signal, wait. Y nos resuelve el problema de exclusin mutua y sincronizacin.
3.1.1. Operacin wait: Fig. 1Programacin concurrente Decrementa el valor de una variable si esta es mayor que cero. Si es igual a 0 el proceso se bloquea en el semforo.
Wait (s): If s>0 then s:=s-1; else bloquear proceso
3.1.2. Operacin signal: desbloquea algn proceso bloqueado y e n el caso de que no haya ninguno incrementa el valor de la variable Signal(s); if (hay procesos bloqueados) then Desbloquear un proceso else S:=s+1;
Pseudocodigo en monitores Las variables que van a ser necesarias para que nuestro algoritmo funcione son olla,m,i enteros mutex,comer,cocina semforos olla que nos presenta la cantidad de misioneros capturados, m la cantidad de misioneros que el usuario ingresara.
Necesitamos un proceso canbal que representara a los propios canbales, primero cogern un canbal de la olla y se lo comern y disminuirn en uno la cantidad de canbales en la olla, si es que un canbal quiere ingresar y no hay porciones entonces tendr que esperar. comenzar para un i:1 repetir hasta N espere mutex si olla=0 comenzar desbloquear cocina espere comer fin 'Canibal comiendo' olla=olla-1 desbloquear mutex fin El siguiente proceso ser el del cocinero quien dormir hasta que la olla este vacia y se despertara cuando esta este vacia. proceso cocinero comenzar repetir espere cocina olla=m 'Cocinero llena la olla' desbloquear comer para siempre fin
Esta es la funcin principal que inicializa las variables que se utilizaran, inicializamos el semforo mutex=1 para que primero el cocinero llene la olla y para que luego mutex=0 y asi pasar al proceso canbal la cual si la olla esa vacia se bloqueara hasta el cocinero la llene. comenzar j=0 inicializar mutex=1 inicializar cocina=0 inicializar comer=0 escribir :Ingrese la cantidad de porciones de la olla' leer m concurrencia canibal cocinero fin fin
3.2. Monitores Los monitores son mecanismos de abstraccin de datos: agrupan o encapsulan las representaciones de recursos, abstractos y proporcionan un conjunto de operaciones que son las nicas que pueden realizar se pueden realizar cambios sobre dichos recursos. Las operaciones que se pueden realizar son: 3.2.2. Delay: Suspende el proceso que la ejecuta (que ha invocado el procedimiento del monitor en que se encuentra) y lo introduce en la cola asociada a la variable condition. delay (variableCondition). 3.2.3. Resume: Ejecutada sobre una variable tipo Condition, se reactiva uno de los procesos de la lista asociada a la variables. resume(variableCondition) 3.2.4. Funcin empty: En algunos problemas resulta necesario comprobar si la cola de una variable codition esta vaca o no. para ello se orece la funcin empty (c) que devuelve un valor boleano indicando si la cola de la variable condicin esta vacia o no.
Fig. 2 Modelo de funcionamiento de un semforo PROGRAMACIN CONCURRENTE APLICADA AL PROBLEMA DE LOS CANBALES Y MISIONEROS Gian Carlo Gonzalo Mamani Cdigo: 2013-39104 Carlo Alberto Braez Vargas -Codigo 2013-39### E.A.P. de Ingeniera en Informtica y Sistemas Facultad de Ingeniera Universidad Jorge Basadre Grohmann Tacna-Per carlos_18_1229 @hotmail.com cbraez.fitness@gmail.com
Pseudocodigo en monitores Para este en monitores tendremos que exportar dos procedimientos: llenar,comer; y las variables misioneros,y:entero ; olla:condicin ; el primer procedimiento del monitor sera el de comer que sera exportado. Primero preguntara si cantidad de misioneros es mayor que cero, si es asi decrementara en uno caso contrario se bloqueara y dara paso al otro procedimiento
procedimiento comer; comenzar if misioneros>0 then comenzar escribir COMIENDO EL CANIBAL misioneros:=misioneros-1; fin else retrasar(olla); fin;
El procedimiento llenar la olla a la cantidad que ingreso el usuario y si la cantidad de la olla es mayor que la olla libera a esta. procedimiento llenar; comenzar if misioneros=0 then comenzar misioneros:=y; el cocinero lleno la olla reanudar(olla); fin; fin;
comenzar misioneros:=0; ingrese la cantidad de misioneros en la olla readln(y); fin; vamos a crear dos procesos canbal y cocinero que sern utilizados en la funcin principal proceso canibal; comenzar repetir canibales.comer; para siempre fin; proceso cocinero; comenzar repetir canibales.llenar; para siempre fin; funcin principal comenzar cobegin canibal; cocinero; coend; fin. 4. APLICACIN DE LA PROGRAMACIN CONCURRENTE EN LA VIDA REAL La aplicacin que podemos dar a la programacin concurrente es muy variada, especficamente al algoritmo que hemos resuelto se puede aplicar al igual que el problema de buffer, si hacemos peticiones a un servidor de forma concurrente o en un sitio web que est relacionado a una base datos obtendremos resultados en nuestro caso ser los canbales, pero en cierto tiempo las peticiones ya no se podrn realizar por falta acceso o truncamiento del servidor. Tener una visin mas amplia acerca de problemas clsicos, para as relacionarla con algunos problemas de vida real y poder aplicar dichos conocimientos para solucionarlas, ya sean empresas, organizaciones, instituciones pblicas, etc. Aporta una mirada bastante profunda sobre problemas fundamentales de la computacin, y a veces, del razonamiento humano. Simulacin de sistemas dinmicos.
5. CONCLUSIONES Se logr analizar el algoritmo de los canbales y comensales tanto con semforos y monitores. Este algoritmo al igual que el de lector y escritor tiene una muy buena aplicacin en campo financiero donde hacen retiros y abonos. Los monitores son mejores que los semforos ya que no necesitan que una variable se igual a cero para bloquearla.
Referencias Palma Mndez, J.T., Garrido Carrera, M.C., Sanchez Figueroa, F., Quesada Arencibia, A. (2003). Programacin Concurrente. Espaa: Thomson. Fernndez, D.V., Morcillo, C.G., Albusac Jimnez, J.A. (2003). Programacin Concurrente y Tiempo Real. Espaa: Edlibrix.