username_4567
username_4567

Reputation: 4903

Running two processes in Unix/Linux

When the kernel creates two processes whose code section is same, does the kernel actually copy the code to the virtual address space of both processes? In other words, if I create two processes of the same program, in memory, do we have two copies of the program or just one copy?

Obviously, it may depend on implementation but I'm asking in traditional Unix OS.

Upvotes: 0

Views: 490

Answers (2)

Andrew Aylett
Andrew Aylett

Reputation: 40700

Modern operating systems will use Copy-on-Write to avoid duplicating pages until they are actually updated. Note that on many systems (including Linux) this can lead to overcommit, where the OS doesn't actually have enough RAM to cope with all the copying required should every process decide to modify un-duplicated pages.

Upvotes: 2

Jonathan Leffler
Jonathan Leffler

Reputation: 753595

Does the kernel actually copy the code to the virtual address space of both processes?

The text segment will be mapped (rather than copied) into the virtual address space of each process, but will be referring to the same physical space (so the kernel will only have one copy of the text in memory).

The data and bss segments will also be mapped into the virtual address space of each process, but these will be created per process. At process initiation, the data from the data and bss segments from the executable will be mapped/copied into the process's virtual memory; if it was not copied ab initio then as soon as the processes start writing to the data the process will be given its own private copy.

Clearly, shared memory and mmap'd memory are handled after the process starts. Shared memory is always shared between processes; that's its raison d'être. What happens with mmap depends on the flags used, but it is often shared too.

Upvotes: 3

Related Questions