What is a Process?
A process is a program in execution. Process is not as same as program code but a lot more than it. A process is an 'active' entity as opposed to program which is considered to be a 'passive' entity. Attributes held by process include hardware state, memory, CPU etc.
Process memory is divided into four sections for efficient working :
- The text section is made up of the compiled program code, read in from non-volatile storage when the program is launched.
- The data section is made up the global and static variables, allocated and initialized prior to executing the main.
- The heap is used for the dynamic memory allocation, and is managed via calls to new, delete, malloc, free, etc.
- The stack is used for local variables. Space on the stack is reserved for local variables when they are declared.
Processes can be any of the following states :
- New - The process is being created.
- Ready - The process is waiting to be assigned to a processor.
- Running - Instructions are being executed.
- Waiting - The process is waiting for some event to occur(such as an I/O completion or reception of a signal).
- Terminated - The process has finished execution.
PROCESS CONTROL BLOCK
There is a Process Control Block for each process, enclosing all the information about the process. It is a data structure, which contains the following :
- Process State - It can be running, waiting etc.
- Process ID and parent process ID.
- CPU registers and Program Counter. Program Counter holds the address of the next instruction to be executed for that process.
- CPU Scheduling information - Such as priority information and pointers to scheduling queues.
- Memory Management information - Eg. page tables or segment tables.
- Accounting information - user and kernel CPU time consumed, account numbers, limits, etc.
- I/O Status information - Devices allocated, open file tables, etc.