The architectures of embedded systems are becoming increasingly non-standard and app\-lic\-a\-tion-specific. They frequently contain multiple heterogenous processing cores, non-uniform memory, complex interconnect or custom hardware elements such as DSP and SIMD cores. However, programming languages have traditionally assumed a single processor architecture with a uniform logical address space and abstract away from hardware and implementation details. As a result, the programmer is prevented from making efficient use of unique hardware features by the abstraction models of the programming language and must use abstraction-breaking techniques such as libraries, OS calls, or inline low-level coding.\ud \ud This thesis describes Compile-Time Virtualisation (CTV), a virtualisation-based technique for assisting the mapping of general-purpose software onto complex hardware. CTV introduces the Virtual Platform, an idealised view of the underlying hardware that presents a simplified programming model. The Virtual Platform ensures that general-purpose code will execute correctly regardless of the complexity of the actual platform. In order to effectively exploit application-specific architectures, CTV allows the programmer to influence the mappings implemented by the Virtual Platform, for example to target specific processors or hardware elements. CTV differs from existing run-time virtualisation systems in that its virtualisation layer only exists at compile-time, resulting in a system which displays minimal run-time overheads.\ud \ud An implementation of CTV called Anvil is developed which is evaluated alongside the general CTV approach. Experiments and simulations demonstrate that CTV-based systems can be used to efficiently target a wide range of complex systems
To submit an update or takedown request for this paper, please submit an Update/Correction/Removal Request.