Lab 5: HAL FS
Assignment 14
Implementieren Sie ein einfaches
Dateisystem HALFS mit folgenden Anforderungen:
-
Das HALFS besteht nur aus einem Verzeichnis.
-
Legen Sie das HALFS in einem Linux File ab.
-
Im HALFS dürfen Dateinamen maximal 14 Zeichen lang sein.
-
Das HALFS besteht aus 256 Blöcken à 64 Byte, die in
einer File Allocation Table (FAT) zu verwalten sind.
-
Die Liste der Dateinamen und die FAT sind in die
vorhandenen Blöcke zu integrieren.
-
Zum Absetzen der u.g. Kommandos benötigen Sie eine
einfache Shell (ohne fork()-Aufrufe etc.).
(a) Wie viele Blöcke werden für die FAT gebraucht?
(b) Wie viele Blöcke werden für die Namensliste gebraucht?
(c) Implementieren Sie ein HALFS-Shell Kommando ls, das die
Namen aller vorhandener HALFS-Dateien auf dem Bildschirm ausgibt!
(d) Implementieren Sie ein HALFS-Shell Kommando lcp <src> <dest>,
das eine Datei aus dem LinuxFilessystem in das HALFS kopiert!
(e) Implementieren Sie ein HALFS-Shell Kommando cp <src> <dest>,
das eine Datei innerhalb des HALFS kopiert!
(f) Implementieren Sie ein HALFS-Shell Kommando rm <file>,
das eine HALFS-Datei löscht!
(g) Implementieren Sie ein HALFS-Shell Kommando cat <file>,
das eine HALFS-Datei auf dem Bildschirm ausgibt!
(h) Implementieren Sie ein HALFS-Shell Kommando fat, das
den Inhalt der FAT auf dem Bildschirm ausgibt!
Hinweise
Für die Implementierung der Kommandos (c. bis h.) ist eine
Anpassung am HAL-Interpreter notwendig:
-
Die Register 7, 8 und 9 sind für das I/O-Subsystem
reserviert.
-
Mit Hilfe des Registers 7 kann die HAL Anweisungen an
das I/O-System stellen (z.B. schreibe die ersten 10 Byte des 64. Blocks (des
FS) in den Hauptspeicher an eine bestimmte Adresse (abgelegt in Register 8)).
-
Über das Register 9 zeigt das I/O-Subsystem dem HAL
seinen aktuellen Verarbeitungszustand (z.B. ready, busy, failed, ect.) an.
Beispiel: Lesen von 10 Bytes des 64. Blocks aus dem FS und
ablegen des Inhalts in die 7. Seite des (virtuellen) Speichers.
-
Lege die Instruktion für das Lesen aus dem FS sowie die
zugehörige Adresse im FS in das
Register 7 ab.
-
Lege die Adresse im virtuellen Speicher in das Register
8 ab (hier: 7. Seite des VM).
-
Überprüfe im nächsten Schritt den Status des
I/O-Systems (Register 9).
-
Hat das I/O-System die Verarbeitung noch nicht
abgeschlossen (busy), so muss gewartet werden.
-
Konnte das I/O-System die Instruktion erfolgreich
ausführen, so kann das Ergebnis aus dem Hauptspeicher gelesen werden.
Assignment 15
Testen Sie Ihr Programm (Unittest). |