Preemptive-Kernel bedeutet nur, dass es keine Big-Kernel-Sperre gibt .
Linux hatte von Anfang an präemptives Multitasking (dh Benutzercode war präemptibel) (meines Wissens war das allererste Linux 0.0.1, das von Linus auf den FTP-Server von funet hochgeladen wurde, bereits präemptives Multitasking). Wenn Sie beispielsweise mehrere Komprimierungs- oder Kompilierungsprozesse ausgeführt haben, wurden diese vom ersten Moment an parallel ausgeführt.
Im Gegensatz zu dem damals weit verbreiteten Win31. Wenn unter Win31 eine Aufgabe die CPU vom "Kernel" erhielt, war es standardmäßig ihre Verantwortung, zu bestimmen, wann die Steuerung an das Betriebssystem (oder an andere Aufgaben) zurückgegeben werden sollte. Wenn ein Prozess für diese Funktion keine spezielle Unterstützung hatte (was zusätzliche Programmierarbeit erforderte), wurden alle anderen Aufgaben während der Ausführung angehalten. Selbst die meisten in Win31 integrierten Basis-Apps funktionierten so.
Präventives Multitasking bedeutet, dass die Tasks keine Möglichkeit haben, die CPU nach Belieben zuzuweisen. Wenn stattdessen ihr Zeitfenster abläuft, entfernt der Kernel die CPU von ihnen. Daher kann in präventiven Betriebssystemen ein schlecht geschriebener oder schlecht funktionierender Prozess das Betriebssystem nicht einfrieren oder die Ausführung anderer Prozesse verhindern. Linux war immer präventiv für User-Space-Prozesse.
Die Big-Kernel-Sperre bedeutet, dass in einigen Fällen im Kernel-Bereich noch Sperren vorhanden sein können, die verhindern, dass andere Prozesse den geschützten Code ausführen. Zum Beispiel könnten Sie nicht montieren mehrere Dateisysteme gleichzeitig - wenn Sie mehrere montieren Befehle gab, wurden sie noch nacheinander ausgeführt, weil Montage Dinge , die Big Kernel Lock zuzuteilen erforderlich.
Um den Kernel präventiv zu machen, musste diese große Kernel-Sperre aufgehoben werden, dh der Mount und alle anderen Aufgaben mussten gleichzeitig ausgeführt werden können. Es war ein großer Job.
In der Vergangenheit wurde dies durch die zunehmende Unterstützung von SMP (Multi-CPU-Unterstützung) dringend erforderlich. Zum ersten Mal gab es wirklich Mainboards mit mehreren CPUs. Später wurden mehrere CPUs ("Kerne") in einen einzigen Chip integriert, heute sind die wirklich Multi-CPU-Mainboards bereits rar (sie sind typischerweise in teuren Serversystemen). Auch die wirklich Single-Core-Systeme (wo es nur eine einzige CPU mit einem einzigen Kern gibt) sind selten.
Daher lautet die Antwort auf Ihre Frage nicht "Was war der Grund für die Nicht-Präemptivität?", Weil sie immer präventiv war. Die eigentliche Frage ist, was die Ausführung des präventiven Kernels wirklich notwendig machte . Die Antwort lautet: das zunehmende Verhältnis der Systeme mit vielen CPUs und vielen Kernen.