Lab 5: HAL FSAssignment 14Implementieren 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 15Testen Sie Ihr Programm (Unittest). |