En una fábrica de montaje se utilizan piezas de 4 clases (A, B, C y D). El almacén de piezas está automatizado con un robot, el cual puede retirar bateas ("pallets") con 6 piezas de la clase que se desee. A la entrada del almacén hay 4 depósitos temporales, cada uno de los cuales puede contener una batea de una de las 4 clases de piezas.
Los operarios solicitarán piezas del almacén de una en una. Al solicitar una pieza se mira si hay una batea en el correspondiente depósito temporal, y si es asi, se retira la pieza de la misma, sirviéndola inmediatamente. Si la batea queda vacía, se ordena al robot del almacén que vaya reponiendo una nueva batea en el depósito temporal, en cuando pueda. Hay un solo robot que maneja el almacén, y debe traer las bateas de una en una (se supone que la retirada de una pieza de una batea es instantánea, mientras que traer una batea del almacén tarda un cierto tiempo).
Si al solicitar una pieza no hay batea en el almacén temporal, porque la operación de reponerla no ha sido completada todavía, la solicitud debe esperar hasta que se produce dicha reposición, y entonces se sirve la pieza.
Al iniciarse el funcionamiento de la fábrica se supone que hay una batea de cada clase en cada uno de los depósitos temporales. También se supone que las existencias de cada pieza son ilimitadas.
La figura muestra una posible situación del almacén en un momento dado. Hay disponibles 5 piezas de tipo A y 2 de tipo D en forma inmediata, y operarios esperando para obtener piezas de tipo B y C. El robot está reponiendo una batea de piezas de tipo B, y cuando lo haga procederá a reponer la batea de piezas de tipo C.
Se pide: Desarrollar el diagrama de procesos, basado en paso de mensajes, correspondiente al almacén y los operarios. Desarrollar el código del servidor del almacén, incluyendo el tratamiento de los depósitos temporales y del robot. No es necesario desarrollar el código de los procesos que simulan a los operarios, ya que serán simplemente un bucle indefinido de peticiones de piezas.