Speicherverwaltung mit Minipages
-
Hallo,
ich beschäftige mich zur Zeit etwas mit Speicherverwaltung und bin dabei vor kurzem auf folgende Seite gestoßen: http://www.emulators.com/docs/nx04_malloc.htm.
Der Autor propagiert die Verwendung kleiner Pages (mit 256 Bytes) für die effiziente Verwaltung des virtuellen Speichers. Er sagt im wesentlichen das man für jedes per malloc gelieferte Speicherhäppchen eine oder mehrere dieser kleinen Pages gefolgt von einer Guard-Page verwenden sollte um damit z.B. Puffer-Überläufe (zumindest auf dem Heap) zuverlässig zu verhindern.
Zum einen zweifle ich an der Zuverlässigkeit, niemand hindert mich in einem Puffer einfach 256 Bytes weiter zu gehen, und zum anderen Stelle ich es mir extrem schwierig vor dafür eine effiziente MMU (mit gutem TLB usw.) zu entwickeln (vor allem weil der Autor dann auch noch vorschlägt das die Pages im physischen Speicher eine noch kleinere Größe haben können und auch entsprechend engmaschig ausgerichtet werden). Außerdem steigt mit den mini-kleinen (physischen) Pages der Verwaltungsaufwand im OS erheblich an. Auch das Swapping von so kleinen Pages dürfte zu einer ordentlichen Herausforderung für die OS-Programmierer werden.Was haltet Ihr davon? Klingt das nach einer sinnvollen Idee? Gibt es da nicht bessere Alternativen?
Der Autor geht ganz kurz auf Segmentierung ein, wobei er vorschlägt für jedes von malloc gelieferte Speicherhäppchen ein eigenes Segment zu erstellen, was aber (auch nach Ansicht des Autors) den Nachteil hat das damit die Segment-Descriptor-Tabellen schnell zum Problem werden.
Wie denkt Ihr darüber? Wäre es nicht geschickter die Segmente mit vielen kleinen Speicherhäppchen mit ähnlicher Größe zu befüllen?
Der Autor geht davon aus das Pufferüberläufe ein massives Problem darstellen.
Ist das wirklich so? Ist es nicht eher Aufgabe des Programmierers/Compilers dafür zu sorgen das nirgends über das Ende von Arrays hinaus geschrieben wird? Hat sich dieses Thema nicht auch mit VM-basierten Systemen (z.B. .Net oder Java) erledigt?
Außerdem wird mit dem Konzept der kleinen Pages ja nicht die Puffer-Überläufe auf dem Stack (oder anderen Speicher-Sektionen) angegangen, dafür müsste man die Stack-Verwaltung zur Laufzeit entsprechend managen (z.B. Gaurd-Pages einfügen). Der Stack ist IMHO viel relevanter bei Angriffen o.ä. so das mit den Mini-Pages eher an der falschen Stelle geschönt wird.
Was denkt Ihr dazu?
Das sind gleich ne Menge Fragen, so das hoffentlich für jeden was dabei ist.
Ich hoffe auf zahlreiche interessante Antworten!
Grüße
Erik