To provide a secure processing environment, some systems employ two separate processors: one to execute secure code, and another to execute non-secure code. When a single processor is used, program execution sometimes relies on a cached memory hierarchy and a memory management unit (MMU) to identify which parts of the memory are secure and which are not. This protects memories from access by the central processing unit (CPU), but not by other bus masters, such as direct memory access (DMA) controllers and coprocessors. Thus, a non-secure application running on the CPU might program a DMA controller or a coprocessor to perform memory accesses that compromise the Confidentiality, Integrity, and Authenticity (CIA) of the system. Smaller single-processor systems (e.g., many embedded systems) may not even provide the security benefit of operating with a cache and an MMU.