Architecture

Architecture#

The R2U2 static monitor is designed to be modular, allowing performance to be finely tuned. While default setups exist, unused features can be left out entirely to minimize memory and performance overhead. This loose coupling also translates to strong separation of concerns and allows new modules to be added without fear of interrupting other components.

All components are divided into three categories:

Internals

Common utilities and support functionality like error handling and debug logging

Memory Controllers

Define data types and associated functions

Execution Engines

Triggered by instructions, these manipulate monitor state to evaluate the specification

In general, to maintain separation of concerns, memory domains may be read by any engine, but are only modified by a single engine.

Additionally, main.c provides a reference implementation showcasing how to setup and run an R2U2 monitor.