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.
Dies ist keine technische Antwort, sondern eine historische Antwort auf die vom OP gestellte Frage : "Was war der Grund für die Nicht-Präemptivität älterer Linux-Kernel?"
(Ich nehme an, wie von @peterh in seiner Antwort und seinen Kommentaren erläutert, dass sich das OP unter "Nicht-Präemptivität" auf eine oder beide der Tatsachen bezieht, dass sich nur ein Benutzerprozess innerhalb des Kernels (in einer API) auf einem befindet time und / oder the Big Kernel Lock.)
Linus Torvalds war daran interessiert zu lernen, wie Betriebssysteme funktionieren, und er lernte, wie man eines schreibt. Sein Modell, seine Basis und seine anfängliche Entwicklungsumgebung waren Minix, ein vorhandenes Betriebssystem für Bildungszwecke (dh kein Produktionsbetriebssystem), das nicht kostenlos war (wie damals in Open Source - es war nicht kostenlos wie in Bier). entweder).
Also hat er einen Kernel ohne Vorkenntnisse geschrieben (das Big Kernel Lock, das in anderen Antworten erwähnt wurde), weil Sie es so machen, wenn Sie Ihr neues Betriebssystem schnell zum Laufen bringen wollen, zu Lernzwecken: Es ist auf diese Weise viel, viel einfacher. Ein Kernel, der die gleichzeitige Mehrfachprogrammierung von Benutzerprogrammen und Geräten unterstützt, ist schwierig genug - es ist äußerst schwierig, den Kernel selbst gleichzeitig auszuführen.
Wenn er gewusst hätte, wie beliebt / nützlich / wichtig Linux werden würde ... hätte er es wahrscheinlich genauso gemacht. (Nur IMO, ich habe keine Ahnung, was er tatsächlich denkt.) Weil du laufen musst, bevor du rennen kannst.
Und das blieb lange Zeit so, denn a) es gab noch viel zu tun, um Linux zu dem zu machen, was es heute ist (oder was es damals war), und b) es zu ändern, wäre ein großes schwieriges Unterfangen (wie in anderen Antworten erklärt).
quelle