A computer process is, roughly speaking, a task being run by a computer, often simultaneously with many other tasks. Many processes may exist simultaneously but they must take turns on the CPU (unless there are multiple CPU's available).
Processes are often called tasks in embedded operating systems. The sense of 'process' is 'something that takes up time', as opposed to 'memory', which is 'something that takes up space'. Kaare Christian noted it was as if 'processes have "life"'.
Processes are typically managed by the operating system, which keeps them separated and allocates the resources they need so that they are less likely to interfere with each other and cause system failures. The operating system may also provide mechanisms for inter-process communication to enable processes to interact in safe and predictable ways.
In general, a process consists of:
- Memory, (typically a region of virtual memory for suspended processes) which contains executable code or task-specific data.
- Operating system resources that are allocated to the process, such as file descriptors (Unix terminology) or handles (Windows).
- Security attributes, such as the process owner and the process's set of permissions.
- Processor state, such as the content of registers, physical memory addresses, etc.. The state is stored in the actual registers when the process is executing, and in memory otherwise.
At this level of programming, the registers are the least available resource, and the program values must be loaded from memory into the registers, which are first re-set, and then loaded. These steps occur at the clock rate of the CPU and depend on the processor architecture.
If a task is suspended, then it is eligible for swapping to disk, similarly to residence in virtual memory, where blocks of memory values are really on disk and not in physical memory. The block sizes depend on the operating system.