In computing, a system resource is any physical or virtual component accessible to a computer, including devices, files, network connections, and memory. Proper resource management prevents resource leaks and handles resource contention, ensuring efficient operation. These resources are critical in modern cloud computing, where they enable network-based service delivery by managing limited availability components effectively.
Major resource types
- Interrupt request (IRQ) lines
- Direct memory access (DMA) channels
- Port-mapped I/O
- Memory-mapped I/O
- Locks
- External devices
- External memory or objects, such as memory managed in native code, from Java; or objects in the Document Object Model (DOM), from JavaScript
General resources
- CPU, both time on a single CPU and use of multiple CPUs – see multitasking
- Random-access memory and virtual memory – see memory management
- Hard disk drives, include space generally, contiguous free space (such as for swap space), and use of multiple physical devices ("spindles"), since using multiple devices allows parallelism
- Cache space, including CPU cache and MMU cache (translation lookaside buffer)
- Network throughput
- Electrical power
- Input/output operations
- Randomness
Categories
Some resources, notably memory and storage space, have a notion of "location", and one can distinguish contiguous allocations from non-contiguous allocations. For example, allocating 1 GB of memory in a single block, versus allocating it in 1,024 blocks each of size 1 MB. The latter is known as fragmentation, and often severely impacts performance, so contiguous free space is a subcategory of the general resource of storage space.
One can also distinguish compressible resources from incompressible resources.1 Compressible resources, generally throughput ones such as CPU and network bandwidth, can be throttled benignly: the user will be slowed proportionally to the throttling, but will otherwise proceed normally. Other resources, generally storage ones such as memory, cannot be throttled without either causing failure (if a process cannot allocate enough memory, it typically cannot run) or severe performance degradation, such as due to thrashing (if a working set does not fit into memory and requires frequent paging, progress will slow significantly). The distinction is not always sharp; as mentioned, a paging system can allow main memory (primary storage) to be compressed (by paging to hard drive (secondary storage)), and some systems allow discardable memory for caches, which is compressible without disastrous performance impact. Electrical power is to some degree compressible: without power (or without sufficient voltage) an electrical device cannot run, and will stop or crash, but some devices, notably mobile phones, can allow degraded operation at reduced power consumption, or can allow the device to be suspended but not terminated, with much lower power consumption.
See also
References
The Kubernetes resource model: "Some resources, such as CPU and network bandwidth, are compressible, meaning that their usage can potentially be throttled in a relatively benign manner." https://github.com/kubernetes/kubernetes/blob/release-1.5/docs/design/resources.md ↩