IMMD Hauptseite Zurück Nach oben Weiter Hilfe Rie - 14. Jan. 1997

AKBP-II 1997: Gruppe 3


Audio-CD-Filesystem


Bearbeitet von Robert Breit und Michael Scheuering


Aufgabenstellung:

Ziel dieser Aufgabe war es zunächst, ein Filesystem für Audio-CDs zu implementieren. Im weiteren Verlauf des Projektes wurden wir jedoch gebeten, zusätzlich eine Erweiterung für Video- und Daten-CDs zu entwickeln. Zuletzt sollte das gesamte Filesystem noch NFS fähig gemacht werden. Unabhängig von der eingelegten CD ist es dann möglich, einzelne Tracks als Files zu behandeln. Beispielsweise können dann Audio-Tracks direkt von CD abgespielt werden. Das Kopieren auf Platte entfällt.

Grundideen und Probleme:

Ausgehend von einem modular ladbaren Filesystem, das nichts bewirkt, haben wir die entsprechenden Funktionen implementiert. Zuerst mußten wir eine geeignete Filesystem-Struktur aufbauen, die alle nötigen Imformationen für jeden Mount speichert.
Dazu zählen vor allem die Vnode-Strukturen, auf denen das UNIX-Betriebssystem operiert. Daher wird in der Mount-Routine aus der Table of Contents (TOC, dem Inhaltsverzeichnis einer CD) für jeden Track ein Vnode erzeugt, der neben den üblichen Angaben für Dateien (Rechte, Inhaber usw.) Track-Typ, Größe und Anfangsadresse enthält. Zusätzlich wird dort noch die CD vor dem Auswerfen gesichert und Grundeinstellungen erledigt.

Das eigentlich Schwierige, neben der Einarbeitung in die Betriebssystemstrukturen, lag im Lesen der Tracks. Zwar hatten wir durch das Plextor-Laufwerk den Vorteil, daß wir, falls der Puffer leergelesen war, beim Wiederaufsetzen des Laufwerks kein Pattern Matching machen mußten um einen korrekten Datenstrom zu gewährleisten (vgl. Gruppe 2). Doch dafür haben wir unser Filesystem auf Video und Daten-CDs erweitert, so daß auch diese korrekt gelesen werden können. Der Unterschied liegt darin, das Audio-Tracks mit einer Blockgröße von 2352 Bytes/Block, Video-Tracks mit 2336 Bytes/Block und Daten-Tracks mit beliebiger Größe geschrieben werden können. Daher muß auch mit der entsprechenden Blockgröße gelesen werden, um den reinen Informationsgehalt ohne Fehlerkorrekturinformationen zu bekommen. Daher kann beim Mounten für Daten-Tracks auch eine Blockgröße angegeben werden.
Problematisch war schließlich nur noch bei Audio-Tracks sowohl das RAW-Format als auch das AU-Format zu unterstützen, was abhängig vom Suffix des Dateinamen gemacht werden sollte. Daher mußten wir für diese zwei Vnodes erstellen, so daß in der READ-Routine entsprechend der fürs AU-Format nötige Header mitgegeben werden kann.
Um einen besseren Durchsatz für datenschlingende Prozesse zu gewährleisten, ist die Anzahl der Blöcke, die aufeinmal eingelesen werden, variierbar. Dadurch lassen sich theoretisch drei Lieder einer CD ohne Qualitätsverluste gleichzeitig abspielen. Denn der Play-Prozeß kann auf einmal bis zu 1,7 MB vom READ übernehmen, so daß für das Laufwerk immer genügend Zeit bleibt an die entsprechende Stelle zu seeken. Da wir noch Zeit hatten haben wir unser File-System noch NFS-fest gemacht, d.h. man kann es über NFS an jeden Rechner im Netz mounten und direkt auf die Tracks zugreifen. Dazu war lediglich eine Abbildung von Vnodes auf eindeutige Filehandles (die NFS weitergibt) und zurück nötig, die wir einfach aus den Tracknummern generierten.

Beschreibung des Moduls:

Das Filesystem leistet die in der Aufgabenstellung gewünschten Anforderungen. Nachdem das Modul in den Kern des Betriebssystems geladen wurde, muß es nur noch gemountet werden. Die Befehlszeile des Mount-Kommandos sieht folgendermaßen aus:

mount [-o B=xx,S=yy] device directory

Dabei beschreibt der Parameter B die Anzahl der Blöcke, die von der CD auf einmal gelesen werden sollen. Ein größerer Wert wirkt sich vor allem positiv bei der Übertragung von Daten über NFS aus. Default Wert ist hier 16.
Der Parameter S kommt nur bei Daten-CDs zum Tragen. Er legt die Blockgröße fest. Bei Audio- und Video-CDs wird der Wert automatisch festgestetzt. Defaultwert ist hier 2048.

Ausblick:

Wünschenswert bei unserem Filesystem wäre noch eine Übereinstimmung mit dem Volume Dämon des Unix-Betriebssystems. Dieser versucht nämlich, bei Einlegen einer neuen CD in das Laufwerk diese mit einem ihm bekannten Filesystem zu mounten. Da ihm Audio- und Video-CDs unbekannt sind, wird ein Mount-Versuch in der Regel scheitern. Die Lösung besteht nur darin, den Volume Dämon zur Terminierung zu zwingen. Dazu werden jedoch Superuser-Rechte benötigt.
Ein weiteres Problem besteht noch bei Daten-CDs. Hierbei können die einzelnen Einträge(z.B. Verzeichnisse) nur als einzelner Tracks gelesen werden. An dieser Stelle wäre eine Anknüpfung an das High Sierra Filesystem wünschenswert.