Resource allocation is the process by which a computing system aims to meet the hardware requirements of an application run by it.[1] Computing, networking and energy resources must be optimised taking into account hardware, performance and environmental restrictions.[2] This process may be undertaken by the hardware itself,[3] an operating system, a distributed computing system,[4] or as part of data center management.