HUMBOLDT-UNIVERSITÄT ZU BERLIN
COMPUTER SCIENCE DEPARTMENT
Systems Architecture Group

Head: Prof. Dr. Jens-Peter Redlich
Secretary:  Silvia Schoch
Phone: +49(30)2093-41150

 

     

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).

Legal disclaimer. .  © 2024 Humboldt-Universität zu Berlin, Computer Science Department, Systems Architecture Group. Contact: sar@informatik.hu-berlin.de .