Co to znaczy, gdy kod jest wykonywany w trybie [jądro | użytkownik]?

14

Co to znaczy, gdy kod jest wykonywany w trybie jądra lub użytkownika?

Luc M.
źródło

Odpowiedzi:

15

Tryb jądra

Program działający w tym trybie ma pełny dostęp do podstawowego sprzętu. Może wykonywać dowolne instrukcje CPU, uzyskiwać dostęp do dowolnego adresu pamięci i zasadniczo robić wszystko, co chce.

Tryb użytkownika Kod wykonywany w tym trybie jest ograniczony do modyfikacji sprzętowej za pośrednictwem interfejsu API systemu operacyjnego. To nie może uzyskać dostępu do sprzętu bezpośrednio w ogóle .

Interesujące jest to, że na popularnych architekturach wymusza się to sprzętowo - nie tylko system operacyjny. W szczególności architektura x86 ma pierścienie ochronne .

Dużą zaletą tego rodzaju separacji jest to, że gdy program ulega awarii w trybie użytkownika, nie zawsze jest to fatalne. W rzeczywistości w nowoczesnych systemach zwykle tak nie jest.

Sprawdź recenzję Jeffa . To jego zwykłe dobre rzeczy.

gvkv
źródło
3

Krótka odpowiedź brzmi: mówi tylko, gdzie programy spędzają czas.

Aby uzyskać dłuższą odpowiedź, wyjaśnię to w dwóch krokach. Pierwszy:

1. Wejście w tryb jądra

Każdy napisany kod działa w „trybie użytkownika”.

Programy mogą używać bibliotek do wykonywania typowych zadań. Jest to również kod trybu użytkownika.

W pewnym momencie program może wymagać podstawowej funkcji z systemu. Na przykład:

  • dostęp do zawartości pliku z dysku
  • rezerwowanie części wolnej pamięci
  • uzyskiwanie ramki wideo ze sterownika kamery internetowej
  • wysyłanie danych obrazu na kartę graficzną.
  • wysyłanie pakietu sieciowego.

Ta niezbędna - zbliżona do sprzętu - funkcjonalność jest częścią jądra. To centralny program, który stoi za wszystkim na twoim komputerze. Zarządza wszystkim programami potrzebnymi do działania.

Aby użyć funkcji w jądrze, ścieżka wykonania programu dosłownie przeskakuje z trybu użytkownika do kodu jądra. Jądro wykonuje swoją pracę i składa ścieżkę wykonania z powrotem do trybu użytkownika.

Kiedy program spędza dużo czasu w trybie jądra, często oznacza to, że wykonuje wiele czynności związanych ze sprzętem. Na przykład wyszukiwanie dysku lub przesyłanie strumieniowe wideo. Sprzęt może również działać nieprawidłowo; spowalniając przetwarzanie i powodując, że program spędza niezwykłą ilość czasu w przestrzeni jądra.


2 różnica

Kod w przestrzeni jądra ma wysoką wydajność. Pozostałe części jądra mogą go wywoływać bezpośrednio, a kod ma bezpośredni dostęp do każdego zasobu systemu, bez sprawdzania granic. Przełączanie między trybem jądra / użytkownika jest również kosztowną operacją, której można całkowicie uniknąć, uruchamiając wszystko w kodzie jądra.

Wewnątrz jądra nie ma jednak wiele miejsca na sprawdzanie bezpieczeństwa, ochronę przed awariami lub zapisywanie w niewłaściwych częściach pamięci. Są to usługi, które jądro może udostępniać innym programom. Podstępnie oszukuje programy, aby wierzyć, że świat wygląda inaczej (programy żyją w wirtualnym środowisku z piaskownicą / ograniczeniami), dlatego wszystko, co wchodzi / wychodzi z programów, może być tłumaczone i strzeżone.

Samo jądro nie może mieć dużej ochrony, ponieważ nie ma za nim nic, co mogłoby go chronić. To jest serce systemu, a kiedy to się skończy, wszystko się kończy. Występuje panika jądra lub w systemie Windows słynny BSOD.

Takie jest również ryzyko kodu opartego na jądrze i powód, dla którego więcej podsystemów o niskich wymaganiach wydajnościowych jest przenoszonych do przestrzeni użytkownika. Niezbędnymi częściami związanymi ze sprzętem są zazwyczaj kod jądra, który nie zmieni się w najbliższym czasie.

vdboor
źródło
2

Jest to rozróżnienie, czy aktualnie wykonywany kod może bezpośrednio oddziaływać na różne elementy sprzętu. Kod trybu jądra może zapisywać na szynach urządzeń, zmieniać odwzorowania pamięci, przełączać uruchomione procesy i tak dalej. Tryb użytkownika może wykonywać obliczenia i może wykonywać wywołania systemowe w jądrze w celu interakcji z resztą świata.

Phil Miller
źródło