Zitat von: erik
Also der Kernel-Heap muss nicht nur in der Lage sein Objekte zu liefern sondern auch ganze virtuelle Pages (ohne gleich zwangsläufig physischen Speicher dahinter zu legen, sondern nur optional). Diese Fähigkeit muss er doch eigentlich sowieso haben da er ja auch ganze Pages benutzen muss um daraus SLAB-Blöcke zu bauen (und was anderes als ganze Pages können auch nicht mit Hilfe des PMM mit echtem physischen Speicher hinterlegt werden). Dann musst Du diese interne Fähigkeit des Kernel-Heap als zusätzliches Interface verfügbar machen. Der Kernel-Heap muss doch eh intern einen Baum pflegen um den virtuellen Kernel-Speicher zu managen (so wie der Prozess-VMM den virtuellen Speicher der Prozesse managed, nur mit dem Unterschied das der Prozess-VMM für seine Baum-Objekte einfach den Kernel-Heap benutzt und der Kernel-Heap dafür sich selbst benutzen muss).Und das empfindest du nicht als Hack? Weil ich ja immer den jeweiligen Allocator um eine Funktionalität erweitern muss, die er normalerweise nicht erfüllen muss.
Also für mich hat der SlabAllocator nix mit der Verwaltung virtueller Adressen zu tun, das ist gar nicht seine Aufgabe. Anders gefragt, wieso findest du eine Ebene mehr beim User ok und beim Kernel nicht? Mit der Ebene mehr meine ich das was ich unter einem VMM verstehe, sprich das Verwalten virtueller Adressen/Pages.
Zitat von: erik
Warum soll das bei meinem Vorschlag nicht gehen? Solange man jeder Ebene ein sauberes Interface verpasst und die anderen Ebenen dieses Interface korrekt benutzen kann man auch jede Ebene individuell beliebig austauschen.Wenn ich die Verwaltung für die virtuellen Adressen ändern möchte, müsste ich bei deiner Idee am SlabAllocator rumspielen bzw. wenn ich den SlabAllocator gegen was anderes austauschen möchte, muss ich auch den neuen Allocator dahingehend anpassen, dass er diese Verwaltung mit beinhaltet. Das ist für mich halt weder sauber getrennt noch einfacher.
Du baust zw. beiden eine zu große Abhängigkeit voneinander auf. Um nochmal mein Bsp zu bringen. Bei deiner Variante ist es nicht einfach möglich den Allocator auszutauschen, bei meiner schon.
Ich bin, was deine Idee betrifft, auch leider schon negativ vorbelastet. Ich hatte, wie gesagt, vorher den SlabAllocator für die Objekte des VMMs mit genutzt und das gab nur Probleme und war ein einziger Hack. Alleine schon deswegen, weil ich von außerhalb des SlabAllocators Pages für bestimmte Objekte "injezieren" musste.
Im Endeffekt geht es ja darum, dass ich um Speicher in einem anderen Prozess zu allozieren, dass PD wechseln muss. Davon ausgehend dass das eigentlich nur der Fall ist wenn ich sowieso an einen Thread in dem anderen Prozess abgebe (mir fällt gerade kein wirklicher Fall ein, wo das nicht so ist, es gibt ihn aber bestimmt), dürfte das doch nicht so das Problem sein oder?
Ich weiß ich reite immer gerne auf dem worst-case rum, aber der kommt manchmal schneller als man denkt. Mir gefällt an der Variante das die User-VMMs alle den SlabAllocator nutzen nicht, dass im worst-case eine riesige Speicherverschwendung auftritt. Mir ist auch klar dass das gleiche Problem auch bei meiner Variante (jeder User-VMM nutzt praktisch seinen eigenen SlabAllocator) auftritt, aber halt in wesentlich kleiner Ausführung. Dem könnte man entgegnen dass bei deiner Variante der verschwendete Speicher wieder von anderen User-VMMs genutzt werden kann und bei meiner nicht.
Auf der anderen Seite, ich kann es zu gegebener Zeit auch einfach mal Testen, dazu muss ich genau einen Konstrukturaufruf ändern (2 Werte) und es wird der allgemeine SlabAllocator dafür genutzt.

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert

Ich habe eine 3/1 Aufteilung, also 3GB Prozess und 1GB Kernel. Es gibt allerdings im KernelSpace noch einen kleinen (8MB oder so) Prozess-lokalen Bereich für den User-VMM.