echo $thispage ?>
AURUM is a framework for handling limited resources. I've not put much thought into the details yet, but looking at various contexts in which resource management come up throughout a computer system, I have identified a need for common management of resources and budgeting.
Central to however AURUM works will be the notion of a budget, which is an object that can be used to pay for resource utilisation. A budget provides a number of currencies, and has a balance in each currency. For example, a bank account would be a budget object with a single currency, which is an actual financial currency. While a disk quota would be a budget with a currency of bytes. Also, an embedded system with a limited power supply might use joule budgets to allocate power to software modules; using a peripheral like a motor, a radio transmitter, or a lamp would require spending against the joule budget.
Resources can be spent from a budget. Two or more budgets can be merged into a composite budget, and spends on that budget will be distributed to the component budgets; where the currency being spent is only provided by one of the component budgets this is trivial, but where it is provided by more than one, then the creator of the composite budget will need to be able to choose between completely emptying each budget in turn as they are used up, or splitting payments across the budgets in a given ratio, or other more complex algorithms.
Also, sub-budgets can be created from existing budgets by specifying spending limits for each currency. Each limit has two components, a soft limit and a hard limit; when the sub-budget is created, the soft limit of each currency is reserved within the parent budget so it cannot be spent except through that sub-budget; while the total expenditure through that sub-budget is never allowed to exceed the hard limit.
AURUM needs to integrate carefully with the MERCURY transaction system. A spend that is really a transfer of currency - such as spending money - should be undone by a transaction rollback. However, an irredeemable spend (such as energy in joules) cannot be, or else a process could keep reusing the same energy budget by rolling back the transaction.