Sharing resources such as caches and main memory bandwidth in multi-core systems requires a more sophisticated scheduling scheme which takes the characteristics of such systems into account. PAM is a lowoverhead, user-level meta-scheduler which does not require any hardware or software changes. In particular, it operates by detecting resource congestions and providing guidelines to the standard system scheduler by limiting the assignment of processes to subsets of available cores. PAM contains a cache model that it uses to predict the impact of new schedules. PAM can be used to improve the system along three dimensions: performance, power, and energy consumption (and any combination of these three). On our prototype, we show individual benchmarks can improve up to 33% and the overall system performance can be improved by as much as 14%.