Login
Newsletter
Werbung

Mi, 30. März 2005, 22:47

Software::Distributionen::BSD::FreeBSD

FreeBSD macht Schluß mit Device-Nummern

FreeBSD hat mit den sogenannten »Major Device Numbers« ein Relikt aus der Urzeit von UNIX beseitigt.

»Major Device Numbers« dienen zum Auffinden eines Treibers über die entsprechende Gerätedatei im Verzeichnis /dev. Sie leiden unter zwei prinzipiellen Problemen: Zum einen sind sie statisch, das heißt fest in den Kernel eincompiliert, zum anderen waren ursprünglich nur acht Bit für die Nummer vorgesehen, es konnten also nur jeweils 256 Block- und 256 zeichenorientierte Geräte zugewiesen werden. Dieser beschränkte Vorrat konnte zu Konflikten führen, wenn Treiber außerhalb des Kernels sich einfach eine nicht offiziell zugewiesene Nummer nahmen. Auf sehr großen Rechnern konnte es zudem durchaus sein, daß die Nummern nicht ausreichten für die Peripheriegeräte, besonders wenn eine große Zahl von Terminals oder Festplatten vorhanden war. Fast alle UNIX-Hersteller nahmen daher als Workaround eine Erweiterung vor, in der für die Major- und die Minor-Devicenummer zusammen mindestens 32 Bit bereitgestellt wurden.

Poul Henning Kamp vom FreeBSD-Projekt blickt zurück: »Major- und Minor-Devicenummern sind ein 33 Jahre alter Hack, der einen noch übleren Hack ersetzte. Vorher wurden Devices mit Hilfe von Inode-Nummern indiziert, beispielsweise war Inode 10 /dev/console usw. Damals mag das OK gewesen sein. Als SVR2 kam, sollten die Probleme, die das Schema den Drittherstellern verursachte, genug Anlaß gewesen sein, es einmal richtig zu machen, doch stattdessen kam die »Reconfig Boot«-Prozedur, die mit Hilfe von Shellskripten den Anschein erwecken sollte, daß alles bestens funktionierte. Als VFS (das virtuelle Dateisystem) in BSD eingeführt wurde, wäre eine gute Gelegentheit gewesen, es endlich zu korrigieren, aber nichts passierte.«

Bald darauf machte Plan 9 vor, wie man es anders machen konnte, brach allerdings dabei mit der Kompatibilität zu UNIX. Es sollte daher noch viel Zeit vergehen, bis andere auch so weit waren. Auch Linus Torvalds setzte sich schon früh dafür ein, daß statisch vergebene Nummern aus Linux verbannt wurden. Doch dies hätte die Kompatibilität mit externen Treibern gefährdet. Besonders Alan Cox bezog eine Gegenposition, und so blieben die Nummern bis heute im Kernel. Der Linux-Kernel 2.6 macht daher den Zwischenschritt, den Platz für die Major- und die Minor-Devicenummer auf 32 Bit zu erhöhen, 12 Bit für die Major Number und 20 Bit für die Minor. Dies wird auf absehbare Zeit genügen. In der Zwischenzeit reifen, nach dem Scheitern des ursprünglichen devfs, alternative Mechanismen wie udev heran, das von einer Vielzahl von Distributionen bereits eingesetzt wird. Auch verfügt Linux inzwischen, ebenso wie FreeBSD, über eine Möglichkeit, Major Numbers dynamisch zu vergeben.

Der entsprechende CVS-Eintrag von FreeBSD war es den Entwicklern wert, das Ereignis gebührend zu würdigen:

We don't need no major numbers
We don't need a mknod(2) call
No tricky install documentation
Kernel leave them dev_t alone
Hey Kernel leave them cdevsw alone
All in all it's just another struct in src/sys
All in all you're just another struct in src/sys

Werbung
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung