Der PMM kann Speicher bereitstellen und funktioniert auch ohne VMM und ohne Paging. Also bezieht der VMM seinen Speicher vom PMM und setzt das Mapping selbst auf.Zitat von: svenskaEr ist der VMM, er kümmert sich um die Verwaltung des virtuellen Speichers. Also weiß er, wo da im Adressraum etwas frei ist...Und wo speichert er diese Infos? Die nächste Frage wäre dann woher er den Speicher bekommt das er diese Infos Speichern kann.
Die Umrechnung macht die MMU, aber das Mapping wird vom VMM aufgebaut. Ebenso die Verwaltung, welcher Speicher wo wie gemappt ist (sofern benötigt) und was wo frei ist.Zitat von: svenskader VMM kümmert sich um die Umrechnung von physischen Adressen in virtuelle AdressenNicht wirklich, das macht die MMU, wie du dann weiterschreibst steuert der VMM die MMU. Die eigentliche Aufgabe des VMM ist es, zu wissen welche Bereiche, in einem Adressraum, noch frei sind.
Also gut nur mal so als Bsp. wie ein Pseudo-Code von einem malloc() aussehen könnte:Jo, so kann man das machen.
(schnipp)
Der malloc()-Code hat in dem Sinne erstmal gar nichts mit dem VMM zu tun, sondern er benutzt ihn. Wenn du als User mit 4KB-Pages an Speicher klarkommst, könntest du auch malloc() gar nicht benutzen. malloc() ermöglicht dir einfach das du dich nicht darum kümmern brauchst.Richtig. Damit implementierst du malloc() nicht im VMM, sondern eine Ebene darüber, auf der gleichen Ebene wie z.B. den Slab Allocator.
Der SlabAllocator funktioniert ähnlich, auch er holt sich immer ein vielfaches der Page-Größe vom VMM (was anderes bekommst du auch nicht und das ist der Unterschied zu malloc()) und gibt dann einen Pointer auf ein freies Objekt raus, hat auch nichts mit dem VMM zu tun.Es sei denn, du implementierst deinen VMM so, dass er ein malloc() bereitstellt und eben nicht mit Pagegrößen arbeitet, sondern mit Speicherblöcken variabler Größe umgehen kann.
Ich mache mir die Welt, widewidewie sie mir gefällt... ich hätte das halt anders gelöst.Zitat von: svenskaKein Grund, mir Inkompetenz vorzuwerfen.Sorry, aber nachdem was du geschrieben hast, hast du halt nicht verstanden wie das normalerweise so miteinander funktioniert.
Ist "nur" ein Praktikum. Und wenn der Chef überarbeitet ist und ich nichts zu tun habe, dann ergibt sich das halt...Zitat von: svenskaAußerdem bin ich auf Arbeit und habe nebenher noch andere Dinge zu tun. Code analysieren kostet halt Zeit.Du darfst auf Arbeit nebenbei surfen
Ich meinte damit auch gar nicht das du den Code schnell mal analysieren sollst. Es ging mir darum, das nur weil ich den Code in meinem OS verwende, muss man sich nicht mit OS Programmierung auskennen, um den Code zu verstehen.Wenn man den Code hat und relativ wenig Kontext dazu (Dokumentation!) und aus dem Code rauspopeln muss, wie die Datenstrukturen aussehen, ohne ihn ausführen und nachschauen zu können, dann ist das recht schwer, wenn man den Code nicht geschrieben hat oder nicht so sehr in der Thematik drin ist.
Ich denke als Programmierer sollte man schon so grundlegende Datenstrukturen wie Bäume (auch ausgeglichene) kennen. Ich weiß nun nicht ob du beruflich programmierst oder nicht (wenn nicht dann schiebe ich das jetzt mal auf noch keine Erfahrung), aber Bäume gibt es schon ziemlich langeIch programmiere hauptsächlich sowas, sowas oder sowas. Das ist ein bisschen simpler.
Ich kenne einfache binäre Suchbäume und eine Möglichkeit, diese auszugleichen. Sich selbst ausgleichende Bäume (wie z.B. der von dir verwendete AVL-Baum) sind mir vom Prinzip her bekannt, jedoch nicht von der Implementierung. (Ich könnte mir das schon selbst implementieren, aber eben nicht aus dem Effeff.)
Auch ist es keine Ausrede in welcher Sprache du das mal geschrieben hast, wer programmieren kann, dem ist die Sprache (nicht das Paradigma!) egal.Das ist korrekt. Und Delphi/C sind nicht die einzigen Programmiersprachen, in denen ich programmieren kann. Es ist aber ein Unterschied, wenn du gewisse Paradigmen vor Jahren in einer Programmiersprache letztmalig angefasst hast, das ewig nicht benutzt hast und dann von dir erwartet wird, das spontan hochzuhusten. Das kann ich nicht.
Ich habe "man likely" und "man unlikely" eingegeben und anschließend dein Angebot für Nachfragen angenommen...Zitat von: svenskaund die Compilerinterna vom gcc kenne ich auch nicht.Ich denke mal du spielst auf likely/unlikely an? Ich hab mal "gcc likely" bei google eingegeben und gleich die ersten beiden Ergebnisse waren dahingehend sehr hilfreich
Das meinte ich nicht.Zitat von: svenskaLässt sich das Mergen nicht durchführen, indem du den Baum mit den Adressen als Suchschlüssel stupide in-order traversierst und, wenn du deine freizugebende Adresse findest, das vorhergehende und das nachfolgende Element vergleichst? (Die drei Elemente fallen beim Traversieren eh raus.)Ich bin mir jetzt nicht sicher ob ich dich verstanden habe, aber in einem Baum muss das vorhergehende (der Vater) Element (Node) nicht auch der Vorgänger sein!
Wenn du InOrder-Traversierst, dann bekommst du die Einträge des Baumes in sortierter Reihenfolge, bei entsprechender Strukturierung also den Adressraum von Null bis Ende. Da du nur aufeinanderfolgende Bereiche mergen kannst, brauchst du also deinen Suchschlüssel, das vorhergehende und das nachfolgende Element - also speicherst du immer das aktuelle und die beiden letzten Elemente extra ab und traversierst exakt einmal mehr, als du für das Finden brauchst und brichst dann ab.
Damit hast du das "Suchschlüssel+1" (das aktuelle), "Suchschlüssel" (das letzte) und "Suchschlüssel-1" (das vorletzte) Element gleichzeitig aus dem Baum gepopelt und brauchst nur nachschauen, ob diese auch aufeinander folgen (dann sind sie mergebar) oder nicht.
Du bringst mich allerdings auf die Idee, das ich gleichzeitig gucken kann, ob ich einen Bereich am Ende oder am Anfang gefunden habe, mit dem ich mergen kann (das mach ich momentan in 2 Baum-Traversierungen). Denn wenn ich eins gefunden haben kann der eventuell andere Bereich nur noch in den Kind-Knoten davon liegen. Damit würde ich mir eine weitere Traversierung sparen.Ist mir spontan zu hoch, klingt aber für mich falsch. Der "hintere" Bereich liegt immer hinter dem "vorderen" Bereich. Da du die Bäume balanciert hältst, kann der hintere Bereich auch im anderen Zweig liegen und nicht in einem Kindknoten, nämlich dann, wenn dein Suchwort in irgendeinem Zweig bereits das rechteste Element ist.
Gruß,
Svenska

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert

