Re: Speicher vom System

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Thu, 7 Dec 2006 11:48:18 +0100 (CET)

Marc Santhoff wrote:
> - Weiß FreeBSD, wieviel Speicher ein Programm bekommen hat?

Die Frage ist unklar formuliert, daher muss man sie mit
einem klaren »jein« beantworten. :-)

Speicher ist nicht unbedingt eindeutig einem Prozess zuge-
ordnet (ich nehme an, Du meinst mit »Programm« einen Pro-
zess). Wenn ein Prozess Speicher anfordert (explizit per
malloc/break/mmap/sonstwie, oder indirekt durch das Linken
einer Library o.ä.), dann gehört dieser Speicher erstmal
auch allen Child-Prozessen, die per fork() erzeugt werden.

Der Kernel weiß natürlich von jedem Prozess, welche Pages
ihm zugeordnet sind (was aber, wie gesagt, nicht exklusiv
sein muss), denn schließlich muss der Kernel die VM-Maps
aller Prozesse verwalten.

> - Wenn ein Programm seinen Speicher nicht freigibt, bleibt der verloren?

Wenn ein Prozess terminiert (egal wie), werden alle Resour-
cen, die diesem Prozess zugeordnet sind und die von keinem
anderen Prozess mehr verwendet werden, freigegeben. Die
meisten Arten von Resourcen haben Referenzzähler, um fest-
zustellen, von wievielen Prozessen (oder anderen Resourcen)
sie noch verwendet werden. Wenn eine Referenz aufgelöst
wird (z.B. durch Terminierung eines Prozesses), wird der
Zähler herabgezählt. Ist er danach null, wird die Resource
freigegeben.

> - oder fällt aller vom Programm angeforderte Speicher automatisch ans
> Betriebssystem zurück? Z.B. wenn ein Programm frühzeitig stirbt oder mit
> kill(1) abgeschossen wird (womöglich hart mit kill -9)?

Die Speicherverwaltung obliegt dem Kernel, daher ist es
völlig unerheblich, auf welche Weise ein Prozess termi-
niert. Auch sogenannte Zombie-Prozesse (die immer ein
Zeichen von Programmierfehlern sind) haben keine VM-Map
mehr und belegen daher keinen Speicher (abgesehen vom
Eintrag im Process-table).

Man muss aber beachten, dass es Resourcen gib, die keinen
Prozessen zugeordnet sind und daher auch nicht automatisch
freigegeben werden, wenn Prozesse terminieren. Dazu ge-
hören die SysV-IPC-Objekte, die Dominik schon erwähnte.
Diese sind persistent und verhalten sich daher eher wie
Dateien in einem Dateisystem, die ja auch keinen Prozessen
zugeordnet sind. Daher sind sie geeignet, Kommunikation
zwischen Prozessen durchzuführen, die nicht über eine
Parent/Child-Verwandschaft verbunden sind, und/oder die
nicht zur gleichen Zeit laufen.

Gruß
   Olli

-- 
Oliver Fromme,  secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing
Dienstleistungen mit Schwerpunkt FreeBSD: http://www.secnetix.de/bsd
Any opinions expressed in this message may be personal to the author
and may not necessarily reflect the opinions of secnetix in any way.
"I started using PostgreSQL around a month ago, and the feeling is
similar to the switch from Linux to FreeBSD in '96 -- 'wow!'."
        -- Oddbjorn Steffensen
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Thu 07 Dec 2006 - 11:50:53 CET

search this site