Hallo,
Das folgende gilt nur wenn Du eine richtige RAM-Disk zum lesen und beschreiben willst, wenn Du nur irgendetwas brauchst das eine Art Init-ROM-Disk darstellt gibt es ne Menge anderer guter Wege.
wie kann ich gut eine Ramdisk erstellen
Falls Du einen Monolithen entwickelst dann schau doch mal wie Linux das macht, also wie tmpfs funktioniert. Falls Du einen Micro-Kernel baust dann sollte die RAM-Disk als ganz normaler User-Mode-Prozess laufen und sich an Dein VFS als File-System anmelden.
und gut drauf zugreifen
Das hängt davon ab wie Dein VFS arbeitet.
Mir wäre Fat auf der Ramdisk am liebsten
Das heist Du möchtest ein Block-Device bestimmter Größe simulieren? Kann man machen aber davon würde ich eher abraten. Das belegt ja dann immer den vollen Speicher auch wenn kaum Daten drauf abgelegt sind und lässt sich auch nicht dynamisch vergrößern oder verkleinern.
Habt ihr bessere Vorschläge?
Falls Du ein Micro-Kernel-OS entwickelst würde ich vorschlagen das Du dafür einfach dynamische Listen (in C++ am einfachsten vector) und malloc/realloc nimmst. Ein Verzeichnis ist eine Liste von Descriptoren und jeder Descriptor beschreibt entweder eine Datei oder ein Verzeichnis. Die Descriptoren sollte immer gelich Groß sein damit die Liste möglichst simpel sein kann. Dateien sind einfach per malloc allozierte Speicherbereiche (wenn Du die Größe der Datei ändern willst nimmst Du realloc, da musst Du Dich noch nicht mal um das umkopieren der Daten kümmern). Diese Speicherbereiche solltest Du aber am besten immer auf das nächste Vielfache einer Page-Größe aufrunden und das malloc entsprechen optimieren. Für die Funktionen create/read/write/resize/delete sollte ein geübter C Programmierer höchstens 2 oder 3 Tage brauchen, komplexer wird es wenn dann noch sowas wie Zeitstempel (für Erstellung/letzte Modifikation/letzten Zugriff) dazu kommen oder Extras wie Sparse-Files unterstützt werden sollen. Der Vorteil dieses Konzepts ist das Du nicht mehr RAM als nötig verbrauchst und die simpelste Version sehr schnell getippt ist. Was noch fehlt sind globale Variablen in denen Du die Anzahl der Dateien/Verzeichnisse, die aktuelle Gesamt-Größe aller Dateien und den (durch aufrunden) tatsächlich verbrauchten Speicher mitführst. Damit kannst Du auch problemlos ein vorgegebenes (flexibles) Maximum an Speicherverbrauch einhalten (um Disk-Voll-Error zurückmelden zu können).
Nach dieser Methode werde ich wahrscheinlich meine erste RAM-Disk bauen.
Wenn jemand eine bessere Idee hat würde ich es auch sehr begrüßen diese hier lesen zu können.
Grüße
Erik