Wywłaszczenie jądra

Z Wikipedii, wolnej encyklopedii

Wywłaszczenie jądra (ang. Kernel preemption) – pojęcie używane w projektowaniu systemów operacyjnych, których jądro (rdzeń systemu operacyjnego) pozwala na wywłaszczenie własnego kodu. Czyli, w trakcie wykonywania kodu jądra, praca procesora może zostać przerwana i przydzielona do innych zadań (procesor potem wraca aby zakończyć wykonywanie kodu jądra).

Oznacza to, że planista niskopoziomowy może wymusić przełączanie kontekstu (w imieniu procesu o wyższym priorytecie) na sterowniku lub innej części jądra podczas jego wykonywania, zamiast czekać na sterownik lub zakończenie funkcji jądra (np. wywołania systemowego)[1][2][3][4]. Mechanizm wywłaszczenia jest używany głównie w jądrach monolitycznych i hybrydowych, w których wszystkie lub większość sterowników urządzeń jest uruchamiana w przestrzeni jądra. Przykładem takiego systemu z monolitycznym jądrem i mechanizmem wywłaszczenia jądra jest Linux.

Główną zaletą wywłaszczania jądra jest to, że rozwiązuje ono dwa problemy, które w innym przypadku byłyby problematyczne dla jąder monolitycznych. W takim systemie jądro składa się z jednego dużego pliku binarnego (zamiast wielu „usług”, jak w systemie operacyjnym opartym na mikrojądrze, takim jak Windows NT/Vista /7/10 lub macOS)[5]. Te dwa, główne problemy dla jąder monolitycznych i hybrydowych, to:

  • Sterownik urządzenia może wejść w pętlę nieskończoną lub inny krytyczny stan, powodując awarię całego systemu[1].
  • Niektóre sterowniki i wywołania systemowe na jądrach monolitycznych mogą być stosunkowo wolne. W związku z tym przez dłuższy czas nie mogłyby zwrócić kontroli nad procesorem do programu planującego lub innego programu[2].

Zobacz też[edytuj | edytuj kod]

Przypisy[edytuj | edytuj kod]

  1. a b FAQ/Preemption [online], Linux Kernel Newbies [dostęp 2022-09-15] (ang.).
  2. a b Driver porting: the preemptible kernel [online], LWN.net [dostęp 2022-09-15] (ang.).
  3. Chapter 8. SMPng Design Document [online], FreeBSD Documentation Portal [dostęp 2022-09-15] (ang.).
  4. Lowering Latency in Linux: Introducing a Preemptible Kernel [online], Linux Journal [dostęp 2022-09-15] (ang.).
  5. Robert Love, Linux kernel development, wyd. 3rd ed, Boston, Mass.: Addison-Wesley, 2010, ISBN 978-0-7686-9697-4, OCLC 608305609 [dostęp 2022-09-15] (ang.).