Jaka jest różnica między jądrem niepostępującym, prewencyjnym i wybiórczym jądrem prewencyjnym?

Odpowiedzi:

14

W jądrze zapobiegawczym proces działający w trybie jądra można zastąpić innym procesem, gdy jest on w środku funkcji jądra.

Dotyczy to tylko procesów działających w trybie jądra, procesor wykonujący procesy w trybie użytkownika jest uważany za „bezczynny”. Jeśli proces w trybie użytkownika chce zażądać usługi z jądra, musi wydać wyjątek, który jądro może obsłużyć.

Jako przykład:

Proces Arealizuje obsługę wyjątków, proces Bzostaje obudzić przez żądanie przerwania IRQ jądra zastępuje się proces Az B(wymuszonym przełącznika procesu). Proces Apozostaje niedokończony. Harmonogram decyduje później, czy proces Auzyska czas procesora, czy nie.

W niepraktycznym jądrze proces Apo prostu wykorzystywałby cały czas procesora, dopóki nie zostanie ukończony lub dobrowolnie zdecyduje, że inne procesy mogą go przerwać (planowana zmiana procesu).

Dzisiejsze systemy operacyjne oparte na Linuksie zasadniczo nie zawierają w pełni zapobiegawczego jądra, wciąż istnieją kluczowe funkcje, które muszą działać bez przerwy. Myślę więc, że można to nazwać „selektywnym jądrem prewencyjnym”.

Poza tym istnieją sposoby, aby jądro Linuksa (prawie) było w pełni zapobiegawcze.

machać
źródło
Macintosh System 6 i powiązany kod (np. System 7, System 8 i System 9) nie działały zapobiegawczo. Przejście Apple'a na MacOS X również wprowadziło zapobiegawczą wielozadaniowość.
Mei
jądro zamienia proces A na B (wymuszony przełącznik procesu). -> Czy po angielsku możemy wypowiedzieć zdanie, ponieważ proces A jest wyprzedzany (przez proces B)?
snr
2

zwolnienie to -> Zdolność systemu operacyjnego do wstrzymania lub zatrzymania aktualnie zaplanowanego zadania na rzecz zadania o wyższym priorytecie. Planowanie może być jednym z, ale nie wyłącznie, szeregowania procesów lub planowania we / wy itp.

W Linuksie programy w przestrzeni użytkownika zawsze były możliwe do uniknięcia: jądro przerywa programy w przestrzeni użytkownika, aby przejść do innych wątków, używając zwykłego tykania zegara. Jądro nie czeka więc, aż programy w przestrzeni użytkownika jawnie zwolnią procesor (co ma miejsce w przypadku wielozadaniowości kooperacyjnej). Oznacza to, że nieskończona pętla w programie przestrzeni użytkownika nie może zablokować systemu.

Jednak aż do jądra 2.6, samo jądro nie było preemtable: jak tylko jeden wątek wszedł do jądra, nie można było zablokować wykonania innego wątku. Jednak brak prewencji w jądrze spowodował szereg problemów związanych z opóźnieniami i skalowalnością. Tak więc blokowanie jądra zostało wprowadzone w jądrach 2.6 i można je włączyć lub wyłączyć za pomocą opcji CONFIG_PREEMPT. Jeśli CONFIG_PREEMPT jest włączony, kod jądra można zablokować wszędzie, z wyjątkiem sytuacji, gdy kod wyłączył lokalne przerwania. Nieskończona pętla w kodzie nie może już blokować całego systemu. Jeśli CONFIG_PREEMPT jest wyłączony, zachowanie 2.4 zostaje przywrócone.

Ponownie cytowany i sformatowany z: http://www.linuxquestions.org/questions/linux-general-1/pre-emptive-vs-non-pre-emptive-kernel-582437/

Madhur Ahuja
źródło
Dlaczego jądro 2.4 nie było zapobiegawcze?
Sen
Lepiej zapytaj Linusa Torvaldsa :)
Madhur Ahuja
1

Jądro wyprzedzające pozwala na zapobieganie procesowi, gdy działa on w trybie jądra. Nieprewencyjne jądro nie pozwala na zatrzymanie procesu działającego w jądrze modeto; proces w trybie jądra będzie działał, dopóki nie wyjdzie z trybu jądra, nie zablokuje się lub nie przejmie kontroli nad procesorem. Oczywiście, nieprzewidziane jądro jest zasadniczo wolne od warunków wyścigu w strukturach danych jądra, ponieważ tylko jeden proces jest aktywny w jądrze naraz. Nie możemy powiedzieć tego samego o jądrach zapobiegawczych, dlatego należy je starannie zaprojektować, aby zapewnić, że wspólne dane jądra są wolne od warunków wyścigu. Jądra zapobiegawcze są szczególnie trudne do zaprojektowania dla architektur SMP, ponieważ w tych środowiskach możliwe jest jednoczesne działanie dwóch procesów w trybie jądra na różnych procesorach. Jądro zapobiegawcze jest bardziej odpowiednie do programowania w czasie rzeczywistym, ponieważ pozwoli to procesowi w czasie rzeczywistym zablokować proces aktualnie działający w jądrze. Co więcej, zapobiegawcze jądro może być bardziej responsywne, ponieważ istnieje mniejsze ryzyko, że proces w trybie jądra będzie działał przez arbitralnie długi okres, zanim przekaże procesor procesom oczekującym. Oczywiście efekt ten można zminimalizować, projektując kod jądra, który nie zachowuje się w ten sposób. W dalszej części tego rozdziału badamy, w jaki sposób różne systemy operacyjne zarządzają zapobieganiem w jądrze. efekt ten można zminimalizować, projektując kod jądra, który nie zachowuje się w ten sposób. W dalszej części tego rozdziału badamy, w jaki sposób różne systemy operacyjne zarządzają zapobieganiem w jądrze. efekt ten można zminimalizować, projektując kod jądra, który nie zachowuje się w ten sposób. W dalszej części tego rozdziału badamy, w jaki sposób różne systemy operacyjne zarządzają zapobieganiem w jądrze.

nimesh thakur
źródło