The master and the slave communicate through PVM. The master spawns the slaves and sends them the message SEND_WORK which contains the command line arguments, and the first chunk number to treat. When a slave has finished with a chunk it requests the next chunk with SLAVE_REQUEST_WORK, to which the master answers ADD_SLAVE_WORK and gives the next chunk number. When all chunks are treated, the slaves send their results to the master with SLAVE_RESPONSE. If a slave fails, it sends a SLAVE_BFATAL to the master. The master kills the other slaves and sends an END_REQUEST to the deamon and a GET_RESULT to the client.
For reasons we will explain later, we introduced a deamon and a client program. The client program sends a CLIENT_REQUEST with the command line arguments to the deamon. If the deamon can not accept the request, it replies with a REJECT_REQUEST, otherwise it spawns the master and sends it the command line arguments with MASTER_WORK. When the master finishes it sends an END_REQUEST to the deamon, and a GET_RESULT to the client which means, that the client can now access the file, into which the results were written. The involved PVM messages for blastp are displayed in figure 2, but they are the same for all blast programs.
Figure 2: PVM Messages