OS_FILESystem - Ein virtuelles Dateisystem (C ++)
Einführung
Dies ist ein virtuelles Dateisystem, das Linux imitiert. Das System wird von einer virtuellen Festplattendatei gehostet. Es simuliert das Lesen und Schreiben von Dateien mit dem Lesen und Schreiben von Dateien, ohne den zugrunde liegenden Treiber einzubeziehen.
Um ein einfaches Imitations -Linux -Dateisystem zu schreiben, müssen Sie zunächst ein grundlegendes Framework entwerfen, das Inode, Block, Superblock, virtuelles Festplattenlayout, Speicherplatzzuweisung und andere Informationen enthält. Der Beginn des Dateisystems ist ein Superblock, der wichtige Informationen über das System enthält, einschließlich der Anzahl und Größe des Inode und der Blöcke. Für Inode muss es im Allgemeinen ein Prozent des Scheibenraums einnehmen, aber dies ist ein kleines System mit einer Gesamtgröße von nur 5 m. Daher ist nur sehr wenig Platz für den Inode -Bereich zugewiesen, und der größte Teil des verbleibenden Raums ist der Blockbereich.
Der Gesamtplan für dieses Dateisystem ist wie folgt:

Da beim Schreiben des Programms die Zeit eng ist, habe ich es nur 4 Tage lang geschrieben, bevor ich es akzeptierte, sodass der Code keine Zeit hatte, ihn zu optimieren, und einige Orte werden überflüssig erscheinen. Seien Sie also nicht überrascht.
Obwohl die Zeit begrenzt ist, implementiert sie auch die Funktion eines VI -Editors. Das Schreiben ist relativ einfach und der Code ist sehr unordentlich. Wenn Sie Zeit haben, es zu verbessern.
Im Allgemeinen muss der Code noch optimiert werden. Willkommen, um mehr Vorschläge zu geben und mehr Fehler zu finden.
Wie man benutzt
Schritt 1: Laden Sie das Projekt herunter
git clone https://github.com/windcode/os_filesystem.git
Schritt 2: Öffnen Sie das Projekt mit VC ++ 6.0
Doppelklicken Sie im Verzeichnis auf die mingos.dsw- Datei oder ziehen Sie die Datei in die Schnittstelle VC ++ 6.0.
Schritt 3: Kompilieren, Link, Ausführen

oder
Schritt 1: Führen Sie die Datei mingos.exe direkt im Ordner /debugg aus
Merkmal
- Erstellen Sie zuerst virtuelle Festplattendateien

- Melden Sie sich beim System an
Der Standardbenutzer ist root und das Kennwort ist root


- Benutzer hinzufügen, löschen, anmelden, melden Sie sich an (userAdd, userDel, melden)

- Ändern Sie die Datei- oder Verzeichnisberechtigungen (CHMOD)

- Schreiben und Lesen werden durch Berechtigungen eingeschränkt

- Fügen und löschen Sie Dateien/Ordner (Touch, RM, Mkdir, RMDIR)

- Systeminformationen anzeigen (Super, Inode, Block)

- Nachahmen Sie einen VI -Texteditor (VI) nach

Inode verwaltet Datei- und Verzeichnisinformationen
Verwenden Sie die Gruppenverbindungsmethode , um die Allokation von Leerlaufblöcken zu verwalten
- Blockallokationsprozess: Wenn ein Block zugewiesen werden muss, nimmt die Oberseite des freien Blockstapels eine Leerlaufblockadresse als neu zugewiesenen Block heraus. Wenn der Stapel leer ist, wird der Stapel im freien Block, der durch die untere Stapeladresse dargestellt wird, als neuer kostenloser Blockstapel verwendet.
- Blockrecyclingprozess: Überprüfen Sie beim Recycling eines Blocks, ob der Stapel voll ist. Wenn es nicht erfüllt ist, wird der aktuelle Stapelzeiger nach oben bewegt und die zu recycelte Blockadresse auf der Oberseite des neuen Stapels platziert. Wenn der Stapel voll ist, wird der zu recycelte Block als neuer kostenloser Blockstapel verwendet, und die untere Elementadresse dieses kostenlosen Blockstacks wird gerade jetzt auf den kostenlosen Blockstapel gesetzt.
- Der Block Bitmap und SuperBlock müssen während der Zuordnung und Recycling aktualisiert werden.
Verteilung/Recycling von Inode
- Die Zuweisung und das Recycling von Inode ist relativ einfach, und die sequentielle Zuordnung und das Recycling werden angewendet.
- Wenn die Zuordnung erforderlich ist, finden Sie in der Reihenfolge einen Idle -Inode aus der Inode -Bitmap und finden Sie die Nummer, die den Inode erfolgreich zurückgibt.
- Aktualisieren Sie beim Recycling einfach die Inode -Bitmap.
- Sowohl die Zuordnung als auch das Recycling erfordern die Aktualisierung der Inode -Bitmap.
Beachten
- Die laufende Umgebung ist VC ++ 6.0