Hallo ihr alle,
Mein Problem ist, dass sowohl unter FreeBSD 2.2.7 als auch unter FreeBSD
3.2 mit malloc() mehr Speicher alloziert werden kann als physikalisch
ueberhaupt vorhanden ist.
Wenn in /etc/login.conf datazisze begrenzt ist, stuerzt das Programm bei
malloc() mit einem Code-Dump (Abort-Trap) ab. Die physikalische Grenze
hingegen wird nicht ueberprueft.
Im untenstehende Programm, wird ein Buffer von ca. 256MB alloziert
(wobei ich nur 64MB RAM und 96MB Swap habe).
Danach wird dieser Buffer mit Nullen gefuellt. Irgendwann ist
physikalisch kein Speicher mehr vorhanden und das Programm wird gekillt
mit der Fehlermeldung:
swap_pager: out of swap space
Killed
<date> <foo> /kernel: pid 334 (test), uid 0, was killed: out of swap
space
Falls ich den Eintrag fuer die Swap-Partition in der /etc/fstab
auskommentiere, kommt nur die Meldung:
Killed
Falls das Programm zusaetzlich /dev/io geoeffnet hat (ich weiss, sollte
man eigentlich nicht machen), kommt ueberhaupt keine Fehlermeldung und
FreeBSD haengt sich auf:
- Es werden keine Tastendrücke mehr verarbeitet (<Strg>-C, ...)
- Nur zwischen den Virtuellen Konsolen kann nur hin- und her-
geswitscht werden.
- ping von einem anderen Rechner funktioniert noch
- telnet dagegen nicht.
Meine Frage ist nun folgende:
Kann malloc() so konfiguriert(?) werden, dass maximal nur
soviel Speicher wie physikalisch verfuegbar ist alloziert werden kann
?
Falls mehr Speicher alloziert werden möchte, soll malloc() NULL
zurückgeben und errno auf ENOMEM setzen.
Im Voraus schon vielen Dank fuer euere Hilfe,
Yves
PS: Das Attachment zeigt das Testprogramm, das diesen "Fehler"
produziert (CNT sollte groesser als RAM und SWAP sein.).
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message