[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Wieviel RAM braucht ein Prozess?



Hallo,

Christoph Conrad <christoph.conrad@gmx.de>:

>Evt. werden beim forken nur DATA und BSS neu angelegt, nicht aber der
>CODE, was IMHO auch unnötig ist.

Beim Forken wird zunächst mal (fast) gar kein weiterer physischer Speicher
verbraucht. Der virtuelle Prozessraum wird neu erzeugt, verweist aber
zunächst auf die bestehenden physischen Speicherseiten.

Erst wenn einer der beiden Prozesse den Speicherinhalt ändert, wird eine
Kopie angelegt (Copy on Write, CoW).  Mit der Zeit laufen also die Prozesse
immer stärker auseinander; wobei reine Code Segmente normalerweise nicht
geändert werden und daher auch nie eine Kopie angelegt werden muss.

Was in dem Artikel noch fehlt: Linux hat ab Kernel 2.6.32 das Kernel
Samepage Merging eingeführt (wird manchmal auch als Memory Deduplication
bezeichnet).  Dabei erkennt Linux im Hintergrund, wenn Speicherseiten den
gleichen Inhalt haben, und mappt diese dann auf die gleiche physische Seite. 
Es handelt sich auch hier im CoW, d.h.  sobald ein Prozess die Seite ändert,
wird sie wieder separiert.  Damit lässt sich vor allem bei
Virtualisierungsservern Speicher sparen, wenn mehrfach das gleiche
Gastbetriebssystem läuft.

Shared Memory (SHM) ist Speicher, auf den mehrere Prozesse zugreifen können.
Im Unterschied zu CoW sind Änderungen, die ein Prozess macht, für die anderen
Prozesse sichtbar; es wird also keine Kopie erzeugt.

Für beides (CoW und SHM) gilt aber: wenn einer der beteiligten Prozesse
beendet wird, wird dieser Speicher dadurch nicht frei; sondern erst, wenn
der letzte Prozess terminiert.

Gruß, Harald


Reply to: