The chief task of an operating system is to manage a set of processes and to perform work on their behalf.
So far we have considered processes as independent. They interact in some way with the operating system, but we have not examined ways in which processes can interact with each other.
Processes that interact with each by cooperating to achieve a common goal are called concurrent processes.
Many problems can be naturally viewed in a way that leads to concurrent programming.