Skip to Main Content
Self-adaptive applications are capable of changing their behavior thousands of times per second to autonomically find a way to accomplish given goals despite working in an unpredictable environment whose conditions can vary continuously. In this work we propose an evolvable system that runs self-adaptive applications on top of a heterogeneous system consisting of a general purpose processor and a reconfigurable device. Self-adaptive techniques enable an effective runtime exploration of a rich design space at the intersection of hardware and software and prove how their adoption can improve applications' ability to meet given performance goals. The operating system running on top of the heterogeneous system is responsible for providing self-adaptive capabilities. It answers applications' requests for functionality by choosing at runtime the best suiting implementation with respect to the given constraints and the environment. We designed and developed an evolvable system exploiting self-adaptive techniques by running a customized version of GNU/Linux and a set of self-adaptive applications on top of a heterogeneous system featuring a multi-core processor, i.e., an Intel Core i7, and a reconfigurable device, i.e., a Xilinx Virtex-5 FPGA-based board.