Eine Warnung vorweg: Ich persoehnlich (aber auch die meisten "echten" Linux-Entwickler) habe nicht viel Ahnung von nicht Intel-386 basierten Systemen, alles untige bezieht sich daher auf die I386er.
Am 30. September 1996 begann mit dem Kernel Patch von 2.0.21 nach 2.1.0 die Entwicklung am 2.1er Kernel.
Bereits der erste 2.1er, der 2.1.0, enthielt eine der groessten Neuerungen, namentlich die interne Neustrukturierung des virtuellen
Adressraumes. Waehrend bei den 2.0er Kernels noch der vorhandene physikalische Speicher am Anfang des virtuellen Speicherraumes eingeblendet war,
wurde dies nun komplett umgeworfen. Der physikalische Speicher wird nun ab einer (hohen) Adresse eingeblendet, den Programmen steht dann der restliche
(niedrige) Adressraum zur Verfuegung. Standardmaessig ist die dafuer verantwortliche Konstante __PAGE_OFFSET (aus include/asm-i386/page.h)
auf 0xC0000000 gesetzt, dies erlaubt bis knapp 1 GB physikalischen Speicher und 3 GB virtuellen Adressraum fuer laufende Programme.
Will man mehr physikalischen Speicher betreiben, nimmt die maximale Programmgroesse halt ab.
Dies impliziert ein paar zusaetzlich zu beachtende Dinge: Erstens entsprechen physikalische Adressen von z.B. dem BIOS eben nicht mehr denen im virtuellen
Adressraum, eine Umrechnung erreicht man jedoch leicht per __va(x), so bestimmt __va(0x0e0000) die virtuelle Adresse des BIOS
Anfangs. (Umgekehrt funktioniert __pa(x).) [TODO: mmaped devices, bus/phys/virt adresses]
Im Kernel 2.1.2 wurde dann die Funktion verify_area() entfernt, diese Funktion hatte bisher die Aufgabe aus dem Userspace uebergebene Pointer auf Korrektheit zu testen (Ist da Speicher? Gehoert der dem Programm? ...). Ab sofort soll dies durch den Prozessor erledigt werden, schliesslich beherrscht dies jede bessere MMU, es werden nun halt entsprechend Exceptions ausgeloest. Ergebnis ist jedenfalls eine nette Geschwindigkeitssteigerung einiger Kernel-Funktionen.
Mit dem Kernel 2.1.23 begann dann die hauptsaechliche Arbeit am SMP-Support. Hier wurde das gesammt SMP-Handling von Assembler- auf C-Code umgestellt, zwecks besserer Wart- und Optimierbarkeit.
In 2.1.30 wurde dies dann ergaenzt durch die Aufweichung des bisherigen globalen Locks und Einfuehrung erster lokaler Locks. Ein Lock ist hierbei, wenn der Kernel ausgefuehrt wird und das System solange auf einzel-Prozessor Modus schaltet, damit z.B. nicht mehrere CPU's gleichzeitig dem Festplattencontroller einen Befehl geben. Bisher gab es primaer ein globales Lock, sobald irgendetwas im Kernel los war, lief nur noch eine CPU. Von nun an aber sind spezielle Bereiche des Kernels mit z.T. eigenen Locks versehen, so das selbst wenn eine CPU etwas unkritisches im Kernel ausfuehrt die anderen CPU's davon nicht mehr betroffen sind.
Der MagicSysRq-Key wurde dann in 2.0.43 eingefuehrt. Er erlaubt es per Tastendruck spezielle Aktionen (wie z.B. Sync, RemountRO, Reboot, Dumps, ...) auszuloesen und funktioniert selbst noch bei halb-abgestuerzten Rechnern oder wildgewordenen X-Sessions. Ebenfalls in diesem Kernel begann eine der kritischsten Aenderungen, die Struktur file_operations (aus include/linux/fs.h) wurde sowohl um Eintraege erweitert, als auch die Typen der uebergeben Parameter zum Teil geaendert. Zusammen mit einigen internen Neuschreibungen am Filesystem-Codes ergab dies die Notwendigkeit alle Device-Treiber zumindest kraeftig zu patchen. In 2.0.43 und 2.0.44 ist dies noch nur unzureichend geschehen, es ist deutlich von einem 2.0.44er Testlauf abzuraten, da er nahezu mit 100%iger Garantie zu massiven Filesystem-Beschaedigungen fuehrt. (Erst so etwa ab Kernel 2.1.53 funktioniert alles wieder richtig.)
Am 15. Oktober 1997 erschien dann der Patch auf 2.1.58.
Das folgende Jahr nun stand vermehrt unter dem Stern "echter" neuer Features. In 2.1.60 wurde Unterstuetzung fuer FAT32 und Joliet eingebaut. FAT32 ist das von Microsoft mit Win95b eingefuehrte aufgebohrte FAT-Filesystem, das nun mehr als 2 GB pro Partition und der Plattengroesse angemessene Clustergroessen unterstuetzt. Joliet ist das um (fuer Windows) lange Dateinamen und Mehrsprachenunterstuetzung aufgebohrte ISO9660-CDROM Protokoll.
Mit 2.1.67 wurde dann das neue modularisierte und per /etc/conf.modules konfigurierbare Sound-System eingefuehrt.
2.1.68 brachte dann DMA-Mode Support fuer IDE-Controller, sowie diverse Erweiterungen im Netzwerk-Bereich, wie z.B. die AdvancedRouter oder die KernelLevel-Autoconfig Faehigkeiten. (Ausserdem erwaehnte Linus Thorvalds nun zum ersten Mal waehren der 2.1er Entwicklung einen "Feature Freeze".)
In 2.1.70 wurden dann Client-Treiber fuer Coda, ein weltweit verteiltes Dateisystem, ins Kernel aufgenommen.
Das bisherige automatische Laden von Modulen aenderte sich nun in 2.1.90. Was vormals der Kerneld, ein Userlevel-Daemon, getan hatte erledigt ab jetzt der Kmod, er enthaelt die identische Funktionalitaet, ist jedoch als Kernel-Thread implementiert. Bereits in 2.1.99 wurde dies aber schon wieder umgeworfen, der Kernel ruft Modprobe (was die Aufgabe von erst Kerneld und dann Kmod war) nun selber aus anstatt diese Aufgabe irgendwie weiterzugeben.
(In 2.1.92 sprach Linus dann von einem "Real Feature Freeze".)
Mit 2.1.93 war dann schliesslich der bereits bei 2.1.87 begonnene Einbau der Unix98 PTY's abgeschlossen. [TODO: description]
2.1.100 brachte nun in unerwartetes Problem: Der ppp-Daemon enthielt einen Programmteil, der die Verionsnummer von Linux verarbeiten sollte, und kam absolut nicht mit der auf einmal 3-stelligen Subversionsnummer zurecht. (Y2K wir kommen... ;)
Nach dieser Zwischenzeit der eher leichten Aenderungen, brachten die ersten paar Kernel der 100er Reihe ein paar doch deutliche Neuerungen. Zuerst wurde in 2.1.102 IPChains als Ersatz fuer das bisherige Firewall-System aufgenommen.
Dann kam in 2.1.107 schliesslich das Consolen Code "Update". Dies entstammt den Entwicklern der nicht-I386er Plattformen, da auf einigen dieser in der Regel eine Grafikkarte eingestzt wird, die keinen Textmodus unterstuetzt, somit muss also der Kernel eine Unterstuetzung enthalten, um zumindest fuer den Bootprozess eine Text-Console zu simulieren. Das Problem hier war nur, das der neue Code einige Fehler im Kernel produzierte.
(In 2.1.115 erklaerte Linus dann den "Final Future Freeze".)
Aktuell ist Heute (9. Oktober 1998) der Kernel 2.1.124. Er ist mit seinen etwa 1,5 Millionen Zeilen ziemlich genau doppelt so "dick" wie der 2.0.0.
KaPet