Autor Thema: virtuelle Speicherverwaltung - free  (Gelesen 5386 mal)

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« am: 05. April 2009, 21:01 »
Hi,

ich habe mir mal erlaubt den Source der Funktion free von tyndur (oder so) anzuschauen, weil ich wissen wollte, wie ihr das so mit dem wieder freigeben von Speicher macht. Nun stelle ich aber fest, dass der Speicher gar nicht wieder freigegeben wird. Wenn ich den Code richtig verstanden habe, wird stattdessen der memory node einfach in eine "Free-Liste" eingetragen. D.h., dass einmal reservierter Speicher gar nicht mehr freigegeben wird? Ist das nur eine "Notlösung" oder ist das wirklich die Funktionsweise von free?

thx

bitmaster
In the Future everyone will need OS-64!!!

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 am: 05. April 2009, 23:56 »
hm, mir fällt es irgendwie schwer dir auf
Zitat
ist das wirklich die Funktionsweise von free?
zu antworten... Es ist einfach eine relativ einfache und relativ brauchbare Implementation. Es gibt wahrscheinlich dutzende andere - von einem free() das (gar)nichts tut bis zu einem free, dass mit der perfekte Balance an Speicherverbrauch und Geschwindigkeit auf jede Sequenz von (De)Allokationen reagiert und gleichzeitig noch massiv parallel benutzbar ist - die legitim sind. Die Frage wie mans implementiert hängt von den Ressourcen die man zum implementieren verwenden will und von dem Zweck ab. Ich würde sagen, die gewählte Implementation ist ausreichend. Andere Implementationen:
* hoard
* dlmalloc
* liballoc
* ptmalloc
Anderer Algorithmus:
* Buddy allocation

btw. iirc dann verwenden die in tyndur nicht diese Implementation, sondern eine externe unter BSD Lizenz.
« Letzte Änderung: 06. April 2009, 00:01 von bluecode »
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 07. April 2009, 12:50 »
Nun stelle ich aber fest, dass der Speicher gar nicht wieder freigegeben wird.
Was verstehst du denn unter 'wieder freigeben'? Ich hab mir die tyndur-Implementierung jetzt nicht extra angesehen, aber was in der 'Free-Liste' wird wohl von malloc berücksichtigt werden, wenn es neuen speicher allocieren soll. Von daher würde ich das schon als wieder freigegeben bezeichnen.
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #3 am: 07. April 2009, 16:19 »
Er meinte halt an den Kernel zurückgeben, aber das wird eben nicht gemacht, aber dem Programm steht der Speicher natürlich beim nächsten malloc zur Verfügung.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 07. April 2009, 19:25 »
btw. iirc dann verwenden die in tyndur nicht diese Implementation, sondern eine externe unter BSD Lizenz.
Wir haben drei verschiedene Implementierungen im Repository. Wirklich benutzt wird liballoc.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

 

Einloggen