|
|
Bei der Ausgabe von ls erkennt man drei wesentliche Angaben pro Geräte-Inode: b und c unterscheidet block- und zeichenorientierte Geräte, und in jeder der beiden Gruppen gibt es einen ersten Index (major), der die Geräteklasse (Terminal, Platte, ...) wählt, sowie einen zweiten Index (minor), der in der Klasse zum Beispiel ein bestimmtes Gerät oder eine Betriebsart definiert.
Block- und Zeichen-Orientierung ergibt sich daraus, daß der Zugriff im Betriebssystem über zwei Tabellen erfolgt, die primär Funktionen enthalten:
bdevsw[] .open .close .strategy cdevsw[] .open .close .read .write .ioctl
b oder c wählen die Tabelle, major die Zeile in der Tabelle, minor wird als Argument an die Treiberfunktion übergeben. Die Funktionen .open und .close können zum Beispiel exklusiven Zugriff auf ein Gerät erzwingen oder kontrollieren, ob eine Floppy eingelegt ist.
Bei Block-Geräten werden Puffer fixer Größe an .strategy übergeben. Diese Funktion sorgt dann für den Transfer zum Gerät in einer möglichst effizienten Reihenfolge. Siehe auch mknod(8) und mknod(2)
Bei Zeichengeräten transferieren .read und .write sequentiell ziemlich beliebig viele Zeichen. ioctl implementiert Gerätesteuerungen wie stty oder Formatierung einer Floppy.
|
|
Last modified 03/July/97