Interprocess Communication
Processes may be independent or cooperating
Cooperating processes - are processes that can affect one another, i.e. sharing data
Independent processes - are processes that cannot affect or be affected by other processes
Reasons to cooperate:
- information sharing
- computation is sped up
- modularity
- convenience
To cooperate the processes need Interprocess Communication (IPC)
Two models IPC are:
- Shared memory
- Message passing

Producer and Consumer
There is always a Producer and Consumer, processes that send and receive data.
Unbounded-buffer - no limit on the size of the buffer (send as much data as it likes)
Bounded-buffer - there is a fixed buffer size