Current-day applications are written to execute on a wide range of platforms ranging from fast desktop computers to mobile laptops all the way to hand-held PDAs, spanning several orders of magnitude in processing, storage, and communication capabilities. Applications running on these platforms may exhibit diverse and unpredictable performance because of platform heterogeneity and varying resource availability, resulting from competition with other applications or from migration of applications themselves to a different execution environment. However, application users typically expect a desired level of Quality of Service (QoS), either in terms of performance optimization (e.g., shortest completion time) or in terms of predictability (e.g., bounded completion time). This motivates development of resource-aware applications, which proactively monitor and control their utilization of the underlying platform, and ensure a desired performance level by adapting themselves to changing resource characteristics.; In this dissertation, we describe an application-independent adaptation framework that simplifies the design of resource-aware applications. This framework eliminates the need for adaptation decisions to be explicitly programmed into applications by relying on three components: (1) a tunability interface, which exposes adaptation choices in the form of alternate application configurations while encapsulating core application functionality; (2) a virtual execution environment, which emulates application execution under diverse resource availability enabling off-line collection of information about resulting behavior; and (3) run-time adaptation agents, which permit monitoring and steering of the application execution. Together, these components permit automatic run-time decisions on when to adapt the application behavior by continuously monitoring resource conditions and application progress, and how to adapt by dynamically choosing an application configuration most appropriate for the prescribed user preferences.; We evaluate the framework using a distributed image visualization application and a parallel image processing application. The framework permits automatic adaptation to changes of execution environment characteristics such as network bandwidth and image arrival pattern by switching application configurations to satisfy user preferences for output quality and execution timeliness. |