|
Some communication systems are based on wire-level protocols that do not allow any channel multiplexing. This means that the given communication channel is always blocked for the entire time that it takes for any single transfer. This is not a problem if any two nodes in the distributed system exchange non-prioritized data, but quickly becomes a limitation if some of the messages are expected to be ``more important'' than others. A simple example is a monitoring camera which periodically sends its captured frames to the central server, and can also notify it of its status changes. Usually the latter notifications are much smaller in volume, but can also carry urgent event descriptions like overheating or error reports. It might not be acceptable for that smaller but urgent message to wait until the whole capture frame is transmitted.
Support for message priorities as well as the time-awareness of the communication system in terms of timeouts and progress reports are crucial in real-time systems, where such features allow the designers to plan the message flow with appropriate timing guarantees.
YAMI4 supports construction of distributed real-time systems.
The support for real-time systems in YAMI4 relies on wire-level multiplexing based on message priorities. There is no practical limit on the number of priorities that are used at the same time. YAMI4 offers also an extensive timeout API with both relative- and absolute time descriptions.
The support for real-time systems is particularly extensive in the Ada library, where the messaging-related artifacts are directly implemented as protected objects with appropriate entries, so that the native language mechanisms can be naturally used for time-related programming activities.