Jądro zapobiegawcze oznacza tylko, że nie ma blokady dużego jądra .
Linux miał zapobiegawczą wielozadaniowość (tj. Kod użytkownika był możliwy do uniknięcia) od pierwszej chwili (o ile wiem, bardzo pierwszy Linux 0.0.1 przesłany przez Linusa na funet ftp server był już zapobiegawczą wielozadaniowością). Jeśli wykonałeś na przykład wiele procesów kompresji lub kompilacji, były one wykonywane równolegle od pierwszej chwili.
W przeciwieństwie do ówczesnego powszechnie używanego Win31. W Win31, jeśli zadanie pobiera procesor z „jądra”, domyślnie jego zadaniem jest określenie, kiedy przekazać kontrolę systemowi operacyjnemu (lub innym zadaniom). Jeśli proces nie miał specjalnego wsparcia dla tej funkcji (co wymagało dodatkowej pracy programistycznej), wówczas podczas wykonywania wszystkie inne zadania zostały zawieszone. Tak działały nawet najbardziej podstawowe aplikacje zintegrowane z Win31.
Zapobiegawcza wielozadaniowość oznacza, że zadania nie mają możliwości przydzielenia procesora według własnego uznania. Zamiast tego, jeśli upłynie ich przedział czasowy , jądro odbierze od nich procesor. Dlatego w zapobiegawczych systemach operacyjnych źle napisany lub źle działający proces nie może zawiesić systemu operacyjnego ani uniknąć uruchomienia innych procesów. Linux zawsze zapobiegał procesom przestrzeni użytkownika.
Blokada dużego jądra oznacza, że w niektórych przypadkach w przestrzeni jądra nadal mogą występować pewne blokady, uniemożliwiające innym procesom uruchomienie chronionego kodu. Na przykład nie można zamontować wielu systemów plików jednocześnie - jeśli wydano wiele poleceń montowania, były one nadal wykonywane kolejno, ponieważ montowanie elementów było wymagane do przydzielenia Big Kernel Lock.
Uaktywnienie jądra wymagało wyeliminowania tej wielkiej blokady jądra, tj. Uczynienia montowania i innych zadań, aby mogły być uruchomione jednocześnie. To była wielka praca.
Historycznie stało się to bardzo pilne ze względu na rosnącą obsługę SMP (obsługa wielu procesorów). Po raz pierwszy istniały naprawdę płyty główne z wieloma procesorami. Później wiele procesorów („rdzeni”) zostało zintegrowanych w jednym układzie, dziś naprawdę wieloprocesorowe płyty główne są już rzadkie (zwykle w kosztownych systemach serwerowych). Również naprawdę systemy jednordzeniowe (w których jest tylko jeden procesor, z jednym rdzeniem) są rzadkie.
Zatem odpowiedź na twoje pytanie nie brzmi „co było przyczyną braku prewencyjności”, ponieważ zawsze była prewencyjna. Prawdziwe pytanie brzmi: co sprawiło, że zapobiegawcze wykonanie jądra było naprawdę konieczne . Odpowiedź brzmi: rosnący stosunek systemów wieloprocesorowych i wielordzeniowych.
To nie jest odpowiedź techniczna, ale historyczna odpowiedź na konkretne pytanie postawione przez OP: „Jaka była przyczyna braku prewencyjnego starszych jąder Linuksa?”
(Zakładam, jak wyjaśnił @peterh w swojej odpowiedzi i komentarzach, że przez „brak uprzedzeń” OP odnosi się do jednego lub obu z faktu, że tylko jeden proces użytkownika może być w jądrze (w API) w czas i / lub blokada dużego jądra).
Linus Torvalds chciał dowiedzieć się, jak działają systemy operacyjne, a sposób, w jaki się nauczył, polegał na napisaniu jednego. Jego modelem, a także podstawowym i początkowym środowiskiem programistycznym był Minix, istniejący system operacyjny do celów edukacyjnych (tj. Nie system operacyjny), który nie był darmowy (jak wtedy w open source - nie był darmowy jak w piwie, zarówno).
Napisał więc jądro bez uprzedzeń (Blokada Wielkiego Jądra wspomniane w innych odpowiedziach), ponieważ właśnie tak to robisz, jeśli chcesz szybko uruchomić nowy system operacyjny w celach edukacyjnych: w ten sposób jest o wiele znacznie prostsze. Jądro obsługujące jednoczesne programowanie wielu programów i urządzeń użytkownika jest wystarczająco trudne - niezwykle trudno jest sprawić, aby samo jądro było współbieżne.
Gdyby wiedział, jak popularny stałby się popularny / użyteczny / ważny Linux ... prawdopodobnie zrobiłby to w ten sam sposób. (Tylko IMO, nie mam pojęcia, co on tak naprawdę myśli). Ponieważ musisz iść zanim będziesz mógł biegać.
I tak pozostało przez długi czas, ponieważ a) było wiele innych prac do zrobienia, aby Linux był tym, czym jest dzisiaj (a nawet tym, czym był wtedy) ib) jego zmiana byłaby dużym trudnym przedsięwzięciem (jak wyjaśniono w innych odpowiedziach).
źródło