Jaka jest różnica między trybami użytkownika i jądra w systemach operacyjnych?

Jakie są różnice między trybem użytkownika a trybem Jądra, dlaczego i jak je aktywować i jakie są ich przypadki użycia?

7 answers

  1. Tryb Jądra

    W trybie jądra, kod wykonujący ma pełną i nieograniczoną dostęp do podstawowego sprzętu. Informatyka może wykonać dowolną instrukcję procesora i odwołaj się do dowolnego adresu pamięci. Jądro tryb jest zwykle zarezerwowany dla najniższe, najbardziej zaufane funkcje systemu operacyjnego. Wypadki w tryb jądra jest katastrofalny; oni zatrzyma cały komputer.

  2. Tryb Użytkownika

    W trybie użytkownika, kod wykonujący nie ma możliwości bezpośredniego dostępu pamięci sprzętowej lub referencyjnej. Kod uruchomiony w trybie użytkownika musi delegować do API systemowe umożliwiające dostęp do sprzętu lub pamięć. Ze względu na zapewnioną ochronę przez tego rodzaju izolację, rozbija się w tryb użytkownika jest zawsze możliwy do odzyskania. Najbardziej kodu uruchomionego na twoim komputerze zostanie uruchomiony w trybie użytkownika.

Czytaj więcej

Zrozumienie trybu użytkownika i jądra

 125
Author: rahul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-24 00:07:39

Są to dwa różne tryby pracy komputera. Wcześniej, gdy komputery były jak duży pokój, jeśli coś się zawiesza-zatrzymuje cały komputer. Więc architekci komputerowi decydują się to zmienić. Współczesne mikroprocesory implementują w sprzęcie co najmniej 2 różne stany.

Tryb użytkownika:

  • tryb, w którym uruchamiane są wszystkie programy użytkownika. Nie ma dostępu do pamięci RAM i sprzęt. Powodem tego jest to, że jeśli wszystkie programy uruchomione w tryb jądra, będą potrafią nadpisać sobie nawzajem pamięć. Jeśli musi uzyskać dostęp do każdej z tych funkcji – dzwoni do podstawowe API. Każdy proces uruchamiany przez windows z wyjątkiem systemu proces działa w trybie użytkownika.

Tryb Jądra:

  • tryb, w którym uruchamiane są wszystkie programy jądra (różne sterowniki). Ma dostęp do każdego Zasobu i podstawowego sprzętu. Dowolna Instrukcja procesora mogą być wykonywane i każdy adres pamięci może być dostępny. Ten tryb jest zarezerwowany dla kierowców, którzy pracują na najniższy poziom

Jak Następuje przełącznik.

Przełączenie z trybu użytkownika na tryb jądra nie jest wykonywane automatycznie przez procesor. Procesor jest przerywany przez przerwania (timery, klawiatura, I / O). Po wystąpieniu przerwania procesor przestaje wykonywać aktualnie uruchomiony program, przełącza się w tryb jądra, wykonuje procedurę obsługi przerwań. Ta Obsługa zapisuje stan procesora, wykonuje jego operacje, przywraca stan i powraca do użytkownika mode.

Http://en.wikibooks.org/wiki/Windows_Programming/User_Mode_vs_Kernel_Mode

Http://tldp.org/HOWTO/KernelAnalysis-HOWTO-3.html

Http://en.wikipedia.org/wiki/Direct_memory_access

Http://en.wikipedia.org/wiki/Interrupt_request

 43
Author: Salvador Dali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-02 06:14:28

Procesor w komputerze z systemem Windows ma dwa różne tryby: tryb użytkownika i tryb jądra. Procesor przełącza się między dwoma trybami w zależności od tego, jaki rodzaj kodu jest uruchomiony na procesorze. Aplikacje działają w trybie użytkownika, a podstawowe komponenty systemu operacyjnego w trybie jądra. Podczas gdy wiele sterowników działa w trybie jądra, niektóre sterowniki mogą działać w trybie użytkownika.

Po uruchomieniu aplikacji w trybie użytkownika System Windows tworzy proces dla aplikacji. Proces zapewnia aplikacja z prywatną wirtualną przestrzenią adresową i prywatną tabelą uchwytów. Ponieważ wirtualna przestrzeń adresowa aplikacji jest prywatna, jedna aplikacja nie może zmieniać danych należących do innej aplikacji. Każda aplikacja działa w izolacji, a jeśli aplikacja ulegnie awarii, awaria jest ograniczona do tej jednej aplikacji. Awaria nie wpływa na inne aplikacje i system operacyjny.

Oprócz tego, że jest prywatna, wirtualna przestrzeń adresowa aplikacji w trybie użytkownika jest ograniczona. Procesor działający w trybie użytkownika nie może uzyskać dostępu do adresów wirtualnych zarezerwowanych dla systemu operacyjnego. Ograniczenie wirtualnej przestrzeni adresowej aplikacji w trybie użytkownika zapobiega zmianie i ewentualnemu uszkodzeniu krytycznych danych systemu operacyjnego.

Cały kod uruchamiany w trybie jądra dzieli jedną wirtualną przestrzeń adresową. Oznacza to, że sterownik trybu jądra nie jest odizolowany od innych sterowników i samego systemu operacyjnego. Jeśli sterownik trybu jądra przypadkowo zapisuje się na niewłaściwy adres wirtualny, dane należące do systemu operacyjnego lub innego sterownika mogą zostać naruszone. Jeśli sterownik trybu jądra ulegnie awarii, cały system operacyjny ulegnie awarii.

Jeśli jesteś użytkownikiem Windows raz przejść przez ten link dostaniesz więcej.

Komunikacja pomiędzy trybem użytkownika a trybem jądra

 8
Author: Sangeen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-03 08:20:03

W ciemnoĹ " ci chyba măłwisz o oknach. W skrócie, tryb jądra ma pełny dostęp do sprzętu, ale tryb użytkownika nie. na przykład, wiele, jeśli nie większość sterowników urządzeń jest pisanych w trybie jądra, ponieważ muszą kontrolować drobniejsze szczegóły swojego sprzętu.

Zobacz teżTen wikibook .
 5
Author: Mark Rushakoff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-21 11:27:46

Inne odpowiedzi wyjaśniały już różnicę między trybem użytkownika a jądra. Jeśli naprawdę chcesz wejść w szczegóły powinieneś dostać kopię okna wewnętrzne, doskonała książka napisana przez Marka Russinowicza i Davida Solomona opisująca architekturę i wewnętrzne szczegóły różnych systemów operacyjnych Windows.

 3
Author: Dirk Vollmar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-21 11:52:13

Pierścienie procesora są najbardziej wyraźnym rozróżnieniem

W trybie chronionym x86 procesor jest zawsze w jednym z 4 pierścieni. Jądro Linuksa używa tylko 0 i 3:

  • 0 dla jądra
  • 3 dla użytkowników

Jest to najtrudniejsza i najszybsza definicja kernel vs userland.

Dlaczego Linux nie używa Pierścieni 1 i 2: pierścienie uprawnień procesora: dlaczego pierścienie 1 i 2 nie są używane?

Jak ustala się obecny pierścień?

The obecny pierścień jest wybierany przez kombinację:

  • Globalna tablica deskryptorów: tablica wpisów GDT w pamięci, a każdy wpis ma pole Privl, które koduje pierścień.

    Instrukcja LGDT ustawia adres do bieżącej tabeli deskryptorów.

    Zobacz też: http://wiki.osdev.org/Global_Descriptor_Table

  • Segment rejestruje CS, DS, itp., które wskazują na indeks wpisu w GDT.

    Na przykład CS = 0 oznacza pierwszy wpis GDT jest obecnie aktywny dla wykonującego kod.

Co może zrobić każdy pierścień?

Układ CPU jest fizycznie zbudowany tak, że:

  • Pierścień 0 może zrobić wszystko

  • Pierścień 3 nie może uruchomić kilku instrukcji i zapisać do kilku rejestrów, w szczególności:

    • Nie może zmienić własnego pierścienia! W przeciwnym razie może ustawić się na pierścień 0 i pierścienie byłyby bezużyteczne.

      Innymi słowy, nie można modyfikować bieżącego deskryptora segmentu , który określa bieżący pierścień.

    • Nie można modyfikować tabel stron: jak działa stronicowanie x86?

      Innymi słowy, nie można modyfikować rejestru CR3, a samo stronicowanie uniemożliwia modyfikację tabel stron.

      Uniemożliwia to jednemu procesowi zobaczenie pamięci innych procesów ze względów bezpieczeństwa / łatwości programowania.

    • Nie można zarejestrować programów obsługi przerwań. Te są konfigurowane przez zapis do miejsc pamięci, co jest również uniemożliwione przez stronicowanie.

      Obsługa działa w pierścieniu 0 i łamie model bezpieczeństwa. Innymi słowy, nie można używać instrukcji LGDT i LIDT.
    • Nie może wykonywać instrukcji IO, takich jak in i out, a tym samym mieć dowolny dostęp sprzętowy.

      W Przeciwnym Razie, na przykład, uprawnienia do plików byłyby bezużyteczne, gdyby jakikolwiek program mógł odczytać bezpośrednio z dysku.

      Dokładniej dzięki W rzeczywistości System Operacyjny może zezwolić na instrukcje IO na pierścieniu 3, jest to w rzeczywistości kontrolowane przez segment stanu zadania .

      Nie jest możliwe, aby pierścień 3 dał sobie na to pozwolenie, jeśli w ogóle go nie miał.

      Linux zawsze go odmawia. Zobacz także: dlaczego Linux nie używa przełącznika kontekstu sprzętowego przez TSS?

Jak działają programy i systemy operacyjne przejście między pierścieniami?

  • Kiedy CPU jest włączony, zaczyna uruchamiać początkowy program w pierścieniu 0 (No tak, ale jest to dobre przybliżenie). Możesz myśleć, że ten początkowy program jest jądrem (ale zwykle jest to bootloader, który następnie wywołuje jądro nadal w pierścieniu 0).

  • Gdy proces userland chce, aby jądro zrobiło coś dla niego, jak zapis do pliku, używa instrukcji, która generuje przerwanie, takie jak int 0x80, aby sygnalizować jądro.

    Gdy tak się dzieje, procesor wywołuje i przerywa funkcję obsługi wywołania zwrotnego, którą jądro zarejestrowało podczas rozruchu.

    Ta funkcja obsługi działa w pierścieniu 0, który decyduje, czy jądro zezwoli na tę akcję, wykonuje tę akcję i uruchamia ponownie program użytkownika w pierścieniu 3.

  • Kiedy używane jest wywołanie systemowe exec (lub kiedy jądro rozpocznie /init), jądro przygotowuje rejestry i pamięć nowego procesu userland, a następnie przeskakuje do wejście i przełącza procesor na ring 3

  • Jeśli program próbuje zrobić coś niegrzecznego, jak zapisanie do Zakazanego rejestru lub adresu pamięci (z powodu stronicowania), procesor wywołuje również obsługę wywołania zwrotnego jądra w pierścieniu 0.

    Ale ponieważ obszar użytkownika był niegrzeczny, jądro może tym razem zabić proces lub dać mu Ostrzeżenie sygnałem.

  • Kiedy jądro uruchamia się, ustawia zegar sprzętowy o określonej częstotliwości, który generuje przerywa okresowo.

    Ten zegar sprzętowy generuje przerwania, które uruchamiają ring 0 i pozwalają mu zaplanować, które procesy Użytkownika mają się obudzić.

    W ten sposób planowanie może się zdarzyć, nawet jeśli procesy nie wykonują żadnych wywołań systemowych.

Jaki jest sens posiadania wielu pierścieni?

Istnieją dwie główne zalety oddzielenia jądra od userlandu:

  • łatwiej jest tworzyć programy, ponieważ jesteś bardziej pewny, że nie / align = "left" / Np. jeden proces użytkownika nie musi się martwić o nadpisanie pamięci innego programu z powodu stronicowania, ani o umieszczenie sprzętu w nieprawidłowym stanie dla innego procesu.
  • Jest bezpieczniejszy. Np. uprawnienia do plików i separacja pamięci mogą uniemożliwić aplikacji hakerskiej odczytanie danych bankowych. Zakłada to oczywiście, że ufasz jądru.

Jak się nim bawić?

I ' ve created a bare metal setup to powinien być dobry sposób na bezpośrednie manipulowanie pierścieniami: https://github.com/cirosantilli/x86-bare-metal-examples

Nie miałem cierpliwości, aby zrobić przykład z userlandu, niestety, ale posunąłem się tak daleko, jak konfiguracja stronicowania, więc userland powinien być wykonalny. Chciałbym zobaczyć prośbę o pociągnięcie.

Alternatywnie, moduły jądra Linuksa działają w pierścieniu 0, więc możesz ich użyć do wypróbowania uprzywilejowanych operacji, np. odczytać rejestry sterowania: jak uzyskać dostęp do sterowania rejestruje cr0, cr2,cr3 z programu? Błąd segmentacji

Jeśli nie chcesz, aby twój host był gotowy do pracy, możesz go wypróbować bez zabijania swojego hosta.

Minusem modułów jądra jest to, że inne kthready są uruchomione i mogą zakłócać twoje eksperymenty. Ale teoretycznie możesz przejąć wszystkie programy obsługi przerwań za pomocą swojego modułu jądra i posiadać system, to byłby interesujący projekt.

Negatywna pierścienie

Podczas gdy pierścienie ujemne nie są w rzeczywistości wymienione w podręczniku Intela, istnieją tryby procesora, które mają dalsze możliwości niż sam pierścień 0, a więc dobrze pasują do nazwy "pierścienia ujemnego".

Jednym z przykładów jest tryb hipernadzorcy używany w wirtualizacji.

Po więcej szczegółów patrz: https://security.stackexchange.com/questions/129098/what-is-protection-ring-1

Ramię

W ramieniu pierścienie nazywane są Zamiast tego poziomy wyjątków, ale główne idee pozostają takie same.

W ARMv8 Istnieją 4 poziomy WYJĄTKÓW, powszechnie używane jako:
  • EL0: userland

  • EL1: kernel

  • EL2: hypervisory , na przykład Xen.

    Hipernadzorca jest dla systemu operacyjnego, czym jest dla użytkownika.

    Na przykład Xen pozwala na uruchamianie wielu systemów operacyjnych, takich jak Linux lub Windows na tym samym systemie w tym samym czasie, i izoluje osy od siebie dla bezpieczeństwa i łatwości debugowania, podobnie jak Linux robi dla programów userland.

    Hypervisory są kluczową częścią dzisiejszej infrastruktury chmury: umożliwiają działanie wielu serwerów na jednym sprzęcie, utrzymując zużycie sprzętu zawsze na poziomie 100% i oszczędzając dużo pieniędzy.

    AWS na przykład używał Xen do 2017 roku, kiedy jego przejście do KVM sprawiło, że news.

  • EL3: kolejny poziom. TODO przykład.

The model odniesienia architektury ARMv8 DDI 0487c. a - Rozdział D1 - Model programisty poziomu systemowego AArch64-rysunek D1-1 pięknie to ilustruje:

Tutaj wpisz opis obrazka

Zauważ, że ARM, być może z perspektywy czasu, ma lepszą konwencję nazewnictwa dla poziomów przywilejów niż x86, bez konieczności stosowania poziomów ujemnych: 0 jest niższym, a 3 najwyższym. Wyższe poziomy powstają częściej niż niższe.

 2
Author: Ciro Santilli 新疆改造中心 六四事件 法轮功,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-29 15:10:44

Co

Zasadniczo różnica pomiędzy trybami jądra i użytkownika nie jest zależna od systemu operacyjnego i jest osiągana tylko przez ograniczenie niektórych instrukcji do uruchamiania tylko w trybie jądra za pomocą konstrukcji sprzętowej. Wszystkie inne cele, takie jak ochrona pamięci, mogą być wykonywane tylko przez to ograniczenie.

Jak

Oznacza to, że procesor żyje w trybie jądra lub w trybie użytkownika. Za pomocą pewnych mechanizmów architektura może zagwarantować, że kiedykolwiek jest przełączony w tryb jądra kod systemu operacyjnego jest pobierany do uruchomienia.

Dlaczego

Mając taką infrastrukturę sprzętową można to osiągnąć we wspólnych osach:

    [19]}Ochrona programów użytkownika przed dostępem do całej pamięci, aby nie pozwolić programom nadpisać system operacyjny, na przykład,
  • uniemożliwianie programom użytkownika wykonywania wrażliwych instrukcji, takich jak te, które zmieniają granice wskaźnika Pamięci PROCESORA, aby nie pozwalały programom łamać ich granic pamięci dla przykład.
 1
Author: Alto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-26 20:45:14