Out of the six typical cases mentioned in Section 7.1 in which a process gets new memory regions, the first one—issuing a fork( ) system call—requires the creation of a whole new address space for the child process. Conversely, when a process terminates, the kernel destroys its address space. In this section we'll discuss how these two activities are performed by Linux.
We have mentioned in Section 3.3.1 in Chapter 3, that the kernel invokes the copy_mm( ) function while creating a new process. This function takes care of the process address space creation by setting up all page tables and memory descriptors of the new process.
Each process usually has its own address space, but lightweight processes can be created by calling __clone( ) with the CLONE_VM flag set. These share the same address space; that is, they are allowed to address the same set of pages.
Following the COW approach described earlier, traditional processes inherit the address space of their parent: pages stay shared as long as they are only read. When one of the processes attempts to write one of them, however, the page is duplicated; after some time, a forked process usually gets its own address space different from that of the parent process. Lightweight processes, on the other hand, use the address space of their parent process: Linux implements them simply by not duplicating address space. Lightweight processes can ...