ProcessAccounting describes generally the resource distribution within a software system, where a 'resource' is any precious and limited commodity that can be distributed. Example resources: CPU time, HDD space, RAM. For a laptop, one might also add power and energy consumption, and heat production. Within a POSIX or Windows OS, one might need to add File Handles to that list.
A goal for ProcessAccounting is to achieve it without sacrificing safety, performance, or security. Performance is sacrificed if resources are under-utilized because they are being "reserved". Safety is sacrificed if resources are unavailable when required, or if they can be revoked without well-defined revocation behavior on part of the process from which the resource was revoked. Security is sacrificed if process A can delay process B to a degree that service B is effectively denied without having authority to do so, as might happen if process A holds a lock upon which process B is waiting.
These contentious forces make ProcessAccounting one of the huge, untamed frontiers for possibly massive improvements in ComputerScience.
A good design for ProcessAccounting would help with:
- RealTime programming - programs that have an upper-bound on time to achieve certain behaviors.
- Well-timed programs - programs that have a lower-bound on time to achieve or begin certain behaviors (i.e. multi-media programs, actuation programs)
- Embedded systems - systems that have tightly managed memory resources
- Safety-critical systems - i.e. medical devices, sensors and actuation for vehicles (i.e. anti-lock breaks)
- Multi-user systems - i.e. shared multi-user OperatingSystems, or open distributed programming languages.
Existing designs involve:
- priority specifications - for resources that can be safely revoked (like CPU time), priority specification allows a process with higher priority to control the resource or to have a larger slice of it.
- quotas - upper-limits on resources "held" by particular processes. This one runs into many challenges, such as the possibility that multiple processes share or partake of a resource, and the issue of what to do when the quota is reached (crash? that's not safe).
- reservation - ensuring that a resource will be available or will be offered for some time-slot in the future. Reservation often runs into performance challenges.
Related to
ProcessAccounting is SystemAdministration
?, which determines which process-configurations are running and policies for distributing resources to them.