Odpowiedzi:
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 A
realizuje obsługę wyjątków, proces B
zostaje obudzić przez żądanie przerwania IRQ jądra zastępuje się proces A
z B
(wymuszonym przełącznika procesu). Proces A
pozostaje niedokończony. Harmonogram decyduje później, czy proces A
uzyska czas procesora, czy nie.
W niepraktycznym jądrze proces A
po 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.
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/
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.