next up previous contents
Next: 7.5.2 Virtual Hosts Up: 7.5.1 Tasks Previous: 7.5.1.2 Parallel Execution

7.5.1.3 Communication Protocol

The implementation of asynchronous communication is crucial to both, the smooth operation of the simulation environment at extensive parallelization, and the maintainability of the software system. Since call-backs are involved, at least at some level of abstraction, it is a challenge to hide these call-backs as far as possible and make a transition from a procedural view of the involved processes to an event oriented one. This transition can be established using notifications of objects (see ). Notifications offer the possibility to subscribe several so called events. Given that one of these events occurs, the calling object, which is the source of the event, sends a message to the subscribed listening client object.
\begin{Figure}
% latex2html id marker 7236\centering
\includegraphics{fig/task...
...unication between operating system processes and \textsf{SIESTA}{}}
\end{Figure}

For sake of notifications the tasks provide a clear and highly abstract communication protocol between themselves and their clients. Notifications reduce the amount of knowledge, which a client of a task needs to have about the actual implementation of task objects, to a minimum. Remote system processes are communicating with their corresponding task objects. These objects themselves offer various events to their clients (see Figure 7.4), enabling these clients to asynchronously track the state of the remote system process, and to communicate with it. Prominent examples of such events are activated, terminated, success, or failure.

A task object includes buffers for standard input, standard output, and standard error output, as shown in Figure 7.4. As soon as data is available at one of the output buffers, they raise a write event. Therefore, if a component wants to read the output of a system process while that process is still computing, it has to subscribe to the write event of these buffers.


next up previous contents
Next: 7.5.2 Virtual Hosts Up: 7.5.1 Tasks Previous: 7.5.1.2 Parallel Execution
Rudi Strasser
1999-05-27