Soundtreiber unter Linux exportieren char Schnittstellen für den Digital-Analog-Wandler, den Mixerchip und die MIDI-Komponente. Wieviele Schnittstellen angeboten werden, ist vom Gerätetreiber und dem tatsächlichen Gerät abhängig, da z.B. auch mehrere DSPs zur Signalumwandlung auf der Steckkarte sein können.
Die Linux-Sound-Schnittstelle ist kompatibel zum Open Sound System, einer platformunabhängigen Schnittstelle zu Audio-Geräten.
Eine zentrale Komponente -- soundcore -- übernimmt eine Koordinationsrolle und alle Audio-Gerätetreiber sind unter derselben major number erreichbar. Soll nun ein D/A-Wandler geöffnet werden, wird die open Routine der zentralen Komponente aufgerufen und die ,,wahre`` Schnittstelle als Rückgabewert geliefert. Der soundcore repräsentiert das Sound Subsystem.
Die eigentlichen Gerätetreiber registrieren sich beim Koordinator über eine
definierte Schnittstelle, d.h. sie registrieren die Schnittstellen, welche
sie exportieren möchten, z.B.
register_sound_dsp() für einen
D/A-A/D-Wandler.
Die Abbildung auf DROPS ist also intuitiv und originalgetreu: ein soundcore Thread (Koordinator) und ein Thread je Schnittstelle des registrierten Gerätetreibers. Als mögliche Optimierung bietet sich an, den Koordinator-Thread einzusparen, in dem jeder Schnittstellen-Thread beim zentralen Namensdienst registriert ist und sich potentielle Klienten direkt an die Threads wenden.
Hier ist die Frage, wie der Namensdienst unter DROPS in Zukunft aussehen wird und ob alle Informationen zentral verwaltet werden sollen. Da darüber keine Informationen existieren und eine spätere Anpassung geringen Aufwand bedeutet, habe ich mich für den Koordinator entschieden.
Für DROPS-Komponenten sollte jeder Thread eine an das OSS angelehnte IPC-Schnittstelle (möglicherweise unter Nutzung des DSI [LHR01]) exportieren.