Patent ID: 8032634

Claim:
A non-transitory machine-readable medium for allocating resources to an apparatus, the machine readable medium carrying instructions which, when executed by one or more processors, cause performance of the steps of: receiving a request that specifies a plurality of resource requirements for the apparatus, wherein the plurality of resource requirements comprises a first resource requirement, a second resource requirement, a third resource requirement, and a fourth resource requirement; in response to receiving the request, generating a traversable hierarchical resource requirements tree based on the plurality of resource requirements, wherein the traversable hierarchical resource requirements tree comprises a plurality of nodes representing the plurality of resource requirements, wherein, within the traversable hierarchical resource requirements tree, each branch between a parent node and a child node indicates that a resource requirement represented by the parent node is dependent on a resource requirement represented by the child node, and that the resource requirement represented by the child node is dependent on the resource requirement represented by the parent node, wherein a first parent node of the plurality of nodes represents the first resource requirement, wherein a first child node of the plurality of nodes represents the second resource requirement, wherein a second parent node of the plurality of nodes represents the third resource requirement, wherein a second child node of the plurality of nodes represents the fourth resource requirement, wherein the first parent node and the second parent node are children of a root node, wherein the first child node and the second child node are children of the first parent node; evaluating the first parent node by determining whether a first resource is available that satisfies the first resource requirement; upon determining that the first resource is available: evaluating the first child node by determining whether a second resource is available that satisfies the second resource requirement; upon determining that the second resource is available: allocating the first resource to the first resource requirement; allocating the second resource to the second resource requirement; indicating that the first resource requirement and the second resource requirement are fulfilled; upon determining that the second resource is not available: indicating that the first resource requirement and the second resource requirement are not fulfilled; and without evaluating the second child node, evaluating the second parent node by determining whether the third resource requirement is satisfied.