La propuesta de cada una de las diferentes arquitecturas condiciona la evolución global del sistema y su comportamiento, aún a pesar de basarse en los mismos principios. Las características diferenciadoras de cada arquitectura, darán lugar a que aunque todas proponen el uso de proxies para la comunicación, el comportamiento de los mismos sea diferente. El proxy será la parte principal de cada procesador, que además de contener las membranas asignadas, contendrá un proxy que se encargará de la comunicación entre procesadores, del paralelismo global del sistema, y del secuenciamiento de las etapas que se realizan en el procesador.
Con los estudios de [Frutos et al., 2009] y [Gil et al., 2009] están perfectamente definidos los4primeros
micropasos de la evolución del P sistema. Para los3siguientes -y últimos- será el proxy el encargado de su
realización. Para todas las arquitecturas, en cada procesador, se ejecutará de forma secuencial (con varias unidades de proceso, podría ser en paralelo), las etapas de selección y aplicación de reglas para todas las membranas, de la forma que se propone en [Tejedor et al., 2008]. Después, entrará el funcionamiento el proxy, cuyo comportamiento será diferente para cada una de las arquitecturas descritas.
(micropaso5). Si el destino está en el mismo procesador, será un movimiento directo, pero si el destino está
en otro procesador, los almacenará para enviarlos agrupados a posteriori. El proxy se encargará también de indicar a sus proxies adyacentes (proxies de procesadores adyacentes - padre e hijos) las membranas que se han disuelto (micropaso 6). Por último, el proxy al recibir los objetos y situarlos en la membrana destino
contribuirá a la composición del nuevo multiconjunto (micropaso7).
Para realizar esta composición del multiconjunto, los objetos no utilizados por ninguna regla, nunca saldrán de la membrana. Los objetos creados en la membrana y con ese destino, tampoco saldrán. Los objetos creados en membranas hijas cuyo destinooutsea una membrana del mismo procesador, será movidos directamente en la etapa en que se recorren los objetos creados, y los que estén en un procesador hijo, serán enviados a través de proxy, y a su recibimiento serán colocados en la membrana. De forma similar ocurrirá con los objetos cuyo destino indicado sea una membrana hija específica. Por último, con un correcto ordenamiento de los mensajes entre los proxies (máximo uno entre cada par de proxies), los objetos cuyo destino sea una membrana disuelta, modificarán su destino por el de la membrana madre, y serán enviados a ésta.
Para evitar la pérdida de objetos porque se envíen a membranas disueltas, los proxies establecerán un orden que permita que los objetos lleguen a las membranas antes de su disolución; y en el momento de su disolución, mande su multiconjunto a su membrana madre.
Además de estas comunicaciones, analizando el proceso de evolución del P sistema, y las necesidades marcadas por los algoritmos descritos, existe otra comunicación a realizar. En el algoritmo de Frutos para la selección de reglas, es necesario que cada membrana conozca la existencia y la permeabilidad de la membrana madre, y de las hijas. Para este conocimiento en el momento de realizar la selección de reglas, sería necesario realizar comunicaciones entre proxies (o procesadores) para conocer estos valores de cada una de las membranas involucradas. Para buscar un rendimiento óptimo al sistema, no debería realizarse ninguna comunicación, salvo la indicada por el proxy para las tres etapas mencionadas. Añadiendo nuevas características a los proxies, a los mensajes que intercambian, es posible conocer este valor en cada momento, sin necesidad de nuevas comunicaciones. El proxy, debe contener la estructura (topología) del P sistema, y los cambios que se produzcan. Así, cuando una membrana necesite conocer la existencia de otras, solo debe hacer una consulta al proxy. De igual forma, se puede mantener la permeabilidad de las membranas. Para mantener estos valores conocidos permanentemente, el proxy debe comunicar los cambios en la permeabilidad de membranas, y los cambios en la existencia de membranas, que vienen marcados por las disoluciones. Es decir, el proxy conocerá el contexto total de las membranas que contiene.
Por supuesto, el proxy debe conocer para cada membrana, el procesador (o proxy) que la contiene, para poder orientar la comunicación. En caso contrario, con cada proxy con el que se comunicara tendría que enviar todos los objetos que no son de las membranas de ese procesador. Esto indica que los objetos a enviar, y que no se están enviando, sino agrupando para ser enviados a su correspondiente procesador, deben ser almacenados en algún lugar. Este lugar es el proxy, y para ello contará con un lugar de almacenamiento denominado “ObjectToSend”. De igual forma, el proxy debe conocer qué membranas se van a disolver, aunque la disolución se haga a posteriori (por lo indicado unos párrafos atrás). Para ello, contará con una lista de indicaciones de membranas a disolver, denominada “MembranesToDissolves”. Por simplicidad, no se contempla la permeabilidad de membranas, pero su inclusión consistiría en repetir el proceso descrito para las membranas disueltas.
En la figura 4.12 se observa cómo sería el contenido del procesador y del proxy del procesador2para la
distribución de la misma figura. Cada membrana se representa por un círculo y se observa que el procesador2
contiene las membranas4,7y8, con sus respectivos objetos, reglas y prioridades. El proxy además, contiene
las referencias del resto de membranas, y al resto de proxies. Para los proxies y las membranas, contiene las relaciones jerárquicas. También contiene los almacenes de objetos para enviar, y las membranas disueltas. Así, cuando una membrana pregunte al poxy por otras membranas, este contendrá la información actualizada y podrá responder sin necesidad de comunicarse con otros procesadores.
Para cada membrana contenida en el proxy, éste solo contiene su identificador, la indicación de las membranas hijas y madre, y la referencia al proxy (o procesador) que la contiene. El proxy también contiene la información de los otros proxies. Para cada uno de estos, contiene su identificador, su dirección, sus
Figura 4.12: Ejemplo de distribución de un P sistema en
4
procesadores y el contenido del
procesador
2y de su proxy asociado.
proxies padre e hijos, y las membranas incluidas en el proxy o procesador. Así, si contuvieram membranas yp proxies, sería necesario:
4m+5p números
El comportamiento del proxy, y parte de su contenido variará en función de la arquitectura sobre la que se sustente.
Arquitectura Peer-to-Peer (P2P)
La arquitectura entre iguales, o Peer-to-Peer -P2P-, por sus siglas en inglés, se basa en que los procesa- dores tienen una topología arbórea, manteniendo la presentada por el P sistema. En esta arquitectura, cada proxy esperará a que el padre se comunique con él, y procesará la información recibida. Después, comunicará con uno de sus hijos, y esperará a que este le responda. Tras procesar la información recibida, realizará el proceso con otro de sus hijos, y así sucesivamente para todos los hijos. Cuando haya terminado de comunicar con los hijos, preparará el mensaje para comunicar con el padre, y aplicará la disolución. Finalmente, enviará
el mensaje al padre, y podrá comenzar la siguiente evolución. En la figura 4.13a se puede ver cómo sería esta arquitectura con7procesadores, las comunicaciones existentes, y el orden de las mismas.
(a) Arquitectura Peer to Peer (b) Arquitectura Peer to Peer jerárquica
(c) Arquitectura maestro-esclavo (d) Arquitectura maestro-esclavo jerárquico
Figura 4.13: Diferentes arquitecturas de P sistemas distribuidos, incluyendo el orden de co-
municación. [Fuente: [Peña et al., 2011]]
El proxy contendrá las membranas ascendientes y descendientes de las que contiene el procesador, como se muestra en la figura 4.14. El funcionamiento del proxy se basa en varias etapas, que serán comunes (aunque con peculiaridades) para los proxies de todas las arquitecturas:
Elanálisis local (local analysis)consiste en recorrer todas las membranas del procesador y analizar el
destino de los nuevos objetos creados. Se pondrán los objetos en su membrana correspondiente si esta está en el procesador o en ObjectToSend para después ser enviados a sus destinos correspondientes. Además, si alguna membrana ha ejecutado alguna regla que implique su disolución, ésta será añadida a MembranesToDissolve. (Algoritmo 3).
Para evitar las colisiones en la comunicación, se debensincronizar (synchronization)los procesadores
Figura 4.14: Ejemplo del proxy según la arquitectura P2P, para el procesador2del P sistema
de la figura 4.12.
hacer esto, cuando los procesadores necesiten comunicar con otros, pararán su ejecución y esperarán la orden para continuar (Es el token descrito en [Tejedor et al., 2008]). El procesador 0 o raíz se
auto-ordenará continuar la ejecución. (Algoritmo 4).
La otra forma de que un procesador o proxy continúe, es con la orden indicada en larecepción de un mensaje de su padre (parent receiving message)que contendrá objetos con su destino y las
membranas disueltas. Este mensaje se debe procesar, poniendo los objetos en su correspondiente lugar (la membrana si está en el procesador, o en ObjectToSend los demás). Como también se recibe la indicación de otras membranas que se van a disolver, las añadirá a la lista de membranas disueltas (MembranesToDissolve). (Algoritmo 5).
Después de recibir y procesar la información enviada por el padre, debe comunicar con sus hijos (communicates with the children). Para ello, de forma secuencial, para cada hijo preparará un
mensaje que le enviará, y esperará a que el hijo le responda. En el mensaje a enviar al hijo, añadirá todos los objetos de ObjectToSend cuyo destino esté el procesador hijo, o en alguno de sus descendientes. Además, añadirá la indicación de todas las membranas a disolver. Enviará el mensaje, y esperará a que el hijo responda para continuar su ejecución. Es decir, enviará el token, y esperará a que sea devuelto por el hijo. El mensaje que recibe del hijo, además del token, contendrá objetos y qué membranas se han disuelto. Procesará este mensaje de forma similar a como ha procesado el mensaje del padre. (Algoritmo 6).
en ObjectToSend tendrán como destino el padre o cualquiera de los ascendientes del procesador, así que deben ser añadidos en unnuevo mensaje que preparará para enviar al padre (new message that is preparing to send the parent). También indicará cuales son las membranas que se van a
disolver, cuyas referencias están en MembranesToDissolve. Después procesará todas las membranas marcadas para disolver (en MembranesToDissolve). La disolución de una membrana consiste en mover sus objetos a la membrana madre si está en el procesador, o añadirlos al mensaje indicando como destino la membrana madre. Completará la disolución borrando la membrana (tanto si está en el procesador como si está en el proxy) y reajustando el árbol de membranas que indica las relaciones entre membranas. (Algoritmo 8).
Por último,enviará el mensaje al padre (sends the message to the father), indicando que ha
finalizado la etapa de comunicación. Añadirá el token para que el padre pueda continuar. (Algoritmo 9).
Estas etapas, para el caso del proxy de la arquitectura P2P está descrito en el Algoritmo 2, donde se referencia al resto de algoritmos utilizados.
Algoritmo 2
Algoritmo del proxy para la arquitectura P2P
1:
Local analysis (Algoritmo 3)
2:Synchronization (Algoritmo 4)
3:
Parent receiving message and Process the message (Algoritmo 5)
4:Children communication (Algoritmo 6)
5:
Preparing the message for the parent with dissolved membranes application (Algoritmo
8)
6:
Father sending (Algoritmo 9)
Algoritmo 3
Local analysis
1:
for
all membrane of current processor
do
2:
for
all new object
do
3:
if
current processor contain the destine of object
then
4:
Put the object in the membrane
5:
else
6:
Put the object in objectToSend
7:
end if
8:
end for
9:
if
execute a rule to dissolve the membranethen
10:
Add membrane to MembranesToDissolve
11:
end if
12:
end for
Arquitectura P2P Jerárquica (HP2P)
Esta arquitectura fomenta las comunicaciones en paralelo, sin que se produzcan colisiones. Para ello, el orden debe ser reordenado, de forma que sobre la misma subred no se realicen nunca dos comunicaciones simultáneas. La distribución de los procesadores sigue siendo en forma de árbol, y su proxy por tanto mantiene
Algoritmo 4
Synchronization
1:
if
currentProcessor =0
then
2:
Create a message (Algoritmo 7)
3:
SEND (processor0, message)
4:
end if
5:
WAIT (message)
Algoritmo 5
Process the message
1:
for
all objectdo
2:
if
CurrentProcessor contain the destinethen
3:
PUT the object in the membrane
4:
else
5:
PUT the object in ObjectToSend
6:
end if
7:
end for
8:
for
all membrane in MembraneToDissolve received in the messagedo
9:
ADD to MembranesToDissolve if not exists
10:
end for
Algoritmo 6
Children communication
1:
for
all child processordo
2:
Create a message (Algoritmo 7)
3:
SEND (child processor, message)
4:
WAIT (message)
5:
Process the message (Algoritmo 5)
6:
end for
Algoritmo 7
Create a message
1:
for
all object in ObjectToSenddo
2:
if
membrane’s destine is in this child processor or another descendant of this child
processor
then
3:
PUT the object in the message (and remove to the ObjectToSend)
4:
end if
5:
end for
6:
for
all membrane in MembranesToDissolve
do
7:
PUT the membrane in the message
Algoritmo 8
Preparing the message for the parent with dissolved membranes application
1:
for
all object in ObjectToSenddo
2:
PUT the object in the message (and remove to the ObjectToSend)
3:end for
4:
for
all membrane in MembranesToDissolve
do
5:
PUT the membrane in the message
6:
if
parent membrane in other processorthen
7:
for
all object in the membranedo
8:
PUT the object in the message, but the destine is the parent of membrane.
9:
end for
10:
else
11:
for
all object in the membranedo
12:
MOVE the object to the parent membrane
13:
end for
14:
end if
15:
ADJUST the tree removing this membrane
16:
end for
Algoritmo 9
Father sending
1:
if
currentProcessor <>0then
2:
SEND (parent processor, message)
3:
end if
los principios de la arquitectura P2P. La figura 4.14 muestra el contenido del proxy para la arquitectura P2P, pero sería igual para la arquitectura HP2P. Las comunicaciones ordenadas que se realizan entre los proxies se pueden ver en la figura 4.13b. En las comunicaciones se observa como un procesador comunicará con sus hijos secuencialmente, sin esperar respuesta de ellos. Después, y siguiendo el mismo orden, recibirá la respuesta. Esta variante permite que en el mismo nivel, varios procesadores estén comunicando en paralelo, sin que se produzcan colisiones. El funcionamiento del proxy presenta solo esta variante, como se puede ver en el Algoritmo 10.
Algoritmo 10
Algoritmo del proxy para la arquitectura HP2P
1:
Local analysis (Algoritmo 3)
2:Synchronization (Algoritmo 4)
3:
Parent receiving message and Process the message (Algoritmo 5)
4:Children communication (HP2P) (Algoritmo 11)
5:
Preparing the message for the parent with dissolved membranes application (Algoritmo
8)
Algoritmo 11
Children communication in HP2P architecture
1:
for
all child processordo
2:
Create a message (Algoritmo 7)
3:
SEND (child processor, message);
4:
end for
5:
for
all child processordo
6:
WAIT (message)
7:
Process the message (Algoritmo 5)
8:
end for
Arquitectura Maestro-Esclavo (MS)
La arquitectura Maestro-Esclavo presenta diferencias topológicas respecto a las anteriores. Estas diferen- cias influyen en que existan dos tipos de procesadores, y que la distribución no deba mantener la topología arbórea. Esta diferenciación de procesadores en dos tipos, hace que los proxies alojados en los procesadores tengan contenido y comportamiento diferentes. Incluso, en la distribución de membranas se aprecia esta di- ferenciación: los procesadores esclavos contienen membranas, mientras que el maestro no. Para el P sistema de la figura 4.12, se puede obtener una distribución como la mostrada en la figura 4.15. Las comunicaciones controladas por los proxies también tienen un orden diferenciado al de otras arquitecturas. Los esclavos, por orden, comunican con el maestro, que tras procesar todos los mensajes, comunica en secuencia a todos los esclavos. Este orden de comunicación se observa en la figura 4.13c.
Figura 4.15: Ejemplo de distribución de un P sistema según la arquitectura MS.
El contenido de los proxies es diferente en los procesadores esclavos y en el maestro. Mientas que los esclavos solo contienen la dirección del procesador maestro y las membranas ascendientes y descendientes de las contenidas; el maestro contiene todas las membranas con su jerarquía, las direcciones de los procesadores esclavos, y la ubicación de membranas en procesadores. La figura 4.16 muestra el contenido de ambos tipos de proxies.(a) Proxy Esclavo (b) Proxy Maestro
Figura 4.16: Ejemplo de los proxies según la arquitectura MS, para el procesador
2
y el
maestro del P sistema de la figura 4.15.
De igual forma que el contenido de los proxies es diferente para el maestro comparándolo con los esclavos, en el funcionamiento existen estas diferencias. Además, los esclavos no se comportan como en la arquitectura P2P, aunque mantienen intacta alguna de las partes. El comportamiento del proxy esclavo es analizar los objetos creados y membranas disueltas, para enviarlos a su correspondiente destino, que o bien es una membrana del procesador, o bien, debe enviarlos al maestro. Después del envío espera a la respuesta del maestro, y procesa la información recibida colocando los objetos en sus correspondientes membranas y aplicando la disolución de membranas. El algoritmo 12 muestra en detalle este procedimiento.
El proxy maestro se encarga de recibir los nuevos objetos creados y la indicación de las membranas a disolver. Como contiene todas las membranas (sin objetos y sin reglas), pone los objetos recibidos en las membranas correspondientes, y aplica la disolución de membranas, recolocando los objetos. Después, de forma secuencial, para cada proxy hijo crea un mensaje, y con el recorrido de todas sus membranas secuencialmente añade al mensaje los objetos que tienen sus membranas (quitándolos de éstas). A todos estos mensajes les añade todas las membranas disueltas. Y comunica a los proxies esclavos, como se observa en el algoritmo 13.
Arquitectura Maestro-Esclavo Jerárquica (HMS)
Esta arquitectura es una variante de la anterior, donde el uso de múltiples maestros permite aumentar la eficiencia del sistema, aumentando el número de comunicaciones en paralelo que se pueden realizar. En la figura 4.13d se observan como son las comunicaciones en esta arquitectura. La distribución de membranas se hace de forma similar a la arquitectura maestro-esclavo, con la peculiaridad de que ahora los esclavos están conectados a varios procesadores maestros que son hoja de una distribución arbórea de procesadores. La figura 4.17 muestra un ejemplo de distribución para esta arquitectura.
En cuanto al funcionamiento del proxy, ya no se tienen dos tipos de proxies diferenciados, sino tres: los proxies de los procesadores esclavos, los proxies de los procesadores maestros y el proxy del procesador raíz. Los proxies de los procesadores esclavos se comportan igual que en la arquitectura MS (Algoritmo 12). Lo mismo ocurre con el proxy del procesador raíz, que se comporta como el proxy maestro de la arquitectura MS (Algoritmo 13). Los proxies de los procesadores maestros tienen un comportamiento muy sencillo, pues solo se encargar de agrupar y desagrupar mensajes de objetos y membranas disueltas. Así, un proxy recibirá
Algoritmo 12
Algoritmo del proxy de los procesadores esclavos para la arquitectura MS
1:
CREATE a new message
2:
for
all membrane of current processor
do
3:
for
all new object
do
4:
if
current processor contain the destine of object
then
5:
Put the object in the membrane
6:
else
7:
Put the object in the message
8:
end if
9:
end for
10:
end for
11:
for
all membrane of current processor
do
12:
if
execute a rule to dissolve the membranethen
13:
Add membrane with object to message and remove the membrane
14:
end if
15:
end for
16:
SEND message in its turn.
17:
WAIT message
18:
/*PROCESS THE MESSAGE */
19:
for
all objectdo
20:
PUT the object in its corresponding membrane
21:
end for
22:
for
all dissolve membranedo
23:
REMOVE the membrane in the proxy and ADJUST the tree
24:
end for
25:
/*END PROCESS THE MESSAGE*/
secuencialmente mensajes de los procesadores hijos, y los agrupará para enviarlos al procesador padre. A la vuelta, y con el mensaje recibido por el procesador padre, desagrupará el mensaje, partiéndolo en tantos como procesadores hijos. Los objetos recibidos los pondrá en el mensaje hacia el procesador donde se encuentre, directamente o a través de sus descendientes, la membrana destino. En todos los mensajes añadirá las membranas a disolver.
Algoritmo 13
Algoritmo del proxy del procesador maestro para la arquitectura MS
1:
for
all slavedo
2:
WAIT(message)
3:
/* PROCESS THE MESSAGE: */
4:
for
all object
do
5: