Your operating system also has to divide them in space, so that processes can't step on each others' working memory. Even if you assume that all programs are trying to be cooperative, you don't want a bug in one of them to be able to corrupt others. The things your operating system does to solve this problem are called memory management . Each process in your zoo needs its own area of memory, as a place to run its code from and keep variables and results in. The data segment is truly unique to each process, but if two processes are running the same code Unix automatically arranges for them to share a single code segment as an efficiency measure.
Efficiency is important, because memory is expensive.
Sometimes you don't have enough to hold the entirety of all the programs the machine is running, especially if you are using a large program like an X server. To get around this, Unix uses a strategy called virtual memory . It doesn't try to hold all the code and data for a process in memory. As the process runs, Unix tries to anticipate how the working set will change and have only the pieces that are needed in memory. Memory is far less expensive nowadays and even low-end machines have quite a lot of it.