Check out the new USENIX Web site. next up previous
Next: The Human-Machine Monitor Up: The architecture of the Previous: Alerting the Processors

Collecting Data from the Processors


  
Figure 11: Internal Structure of GetDatafromProc
\begin{figure}\psfig{figure=figs/11-GetDatafromProc.eps,height=2.8in}\end{figure}

If the HM_READY flag is set, DoAllProcs gets the identifier of the first processor to be queried for data about carrier groups, and passes this identifier to the GetDataFromProc Triveni process as a value on the event PROC_NUM. Figure 11 illustrates the internal structure of the GetDataFromProc Triveni process. The PROC_NUM event is received by its internal Triveni process GetProcData, which then sets a timer and sends a FIRST_REQ event (or a NEXT_REQ event) to the corresponding processor, requesting data. If the timer expires before the processor replies (with a CGA_DATA or a LAST_DATA event), the query of this processor is aborted, ABORT_PROC is emitted, and DoAllProcs starts processing the next processor. (As before, this timer event is of lower priority than the TOTAL_TIMER_EXPIRED event, expressed through appropriate nesting of preemption operators.) Otherwise, when the processor replies, the data on the received event is sent to ProcessData as a value on the event PROC_DATA. ProcessData formats the data in a manner suitable for sending to the Human-Machine Interface. Pieces of data are sent individually to OutputToHM via SEND_DATA every time SEND_MORE is received. OutputToHM then sends the data to the HMI; if there is a resource overflow and a message is lost, OutputToHM sends a WARN_HM event to HMMonitor.

This cycle continues, using the JavaTriveni Loop construct, until the last piece of data is collected from a given processor (indicated by the LAST_DATA event), after which GetProcData emits the NEXT_PROC event. DoAllProcs then gets the identifier of the next processor to be queried, and the cycle is repeated until all the data on all the processors is collected. If there is a fatal error in packaging the data or accessing the HMI, the request is aborted by sending ABORT_ALL to ProcessReq. This event is of high-priority, and the resulting behavior is similar to that of the TOTAL_TIMER_EXPIRED event. In particular, control then returns to ProcessReq, the request is aborted, the event DONE is sent to VerifyReq, and its internal Triveni process CheckReq starts accepting new requests. The response to a problem in determining the first or next processor is similar, except that the ABORT_ALL event is not emitted.

When the last processor has been queried, DoAllProcs emits SEND_DATA and FLUSH to OutputToHM so that any remaining data is sent to the HMI. ProcessReq then emits the event DONE so that CheckReq can start accepting new requests.


next up previous
Next: The Human-Machine Monitor Up: The architecture of the Previous: Alerting the Processors
1998-03-16