Być może słyszałeś o aplikacjach działających w trybie „jądra” lub „użytkownika”. Wszystko zależy od tego, jak działają systemy operacyjne podczas wykonywania swoich zadań. Gdy to zrozumiesz, łatwo będzie uchwycić różnicę pomiędzy trybem użytkownika a trybem jądra.
Zrozumienie działania systemu operacyjnego
Komputer składa się ze sprzętu, komponentów elektronicznych i oprogramowania, czyli kodu komputerowego wykonywanego przez ten sprzęt. Mniej jasne może być jednak to, jak ze sobą współpracują.
Najważniejszym elementem komputera jest bit, czyli „cyfra binarna”. Wszystko, co robi komputer, jest przedstawiane jako jedynki i zera. Różne komponenty komputera reprezentują bity na różne sposoby. W procesor mikroskopijne tranzystory reprezentują jedynki i zera poprzez włączenie lub wyłączenie. Tranzystory te są ułożone w struktury logiczne zwane bramkami logicznymi.
W pamięci komputera elektronicznego bity są reprezentowane przez komórki pamięci, których ładunek jest wyższy lub niższy od określonego progu. Na mechanicznym dysku twardym bity są reprezentowane jako fluktuacje magnetyczne mierzone na wirującym talerzu. Na dyskach optycznych wgłębienia i lądy, które odbijają lub nie odbijają światła lasera, spełniają tę samą funkcję.
Bez względu na to, w jaki sposób zostanie osiągnięta fizyczna reprezentacja kodu binarnego, ostatecznie możesz zredukować wszystkie komponenty komputerów konsumenckich do tego surowego kodu maszynowego.
Jak więc przejść od przyjaznego dla człowieka interfejsu komputera do surowych, niskopoziomowych procesów w samym komputerze? Tutaj właśnie wkracza system operacyjny. Kontroluje on bezpośrednio sprzęt komputera.
To oprogramowanie tłumaczy wszystko, czego oczekują aplikacje (a tym samym użytkownik) na instrukcje kodu maszynowego zrozumiałe dla procesora i innych komponentów. Najbardziej krytycznym elementem oprogramowania w tym procesie jest jądro.
Co to jest jądro?
Jądro jest, jak sama nazwa wskazuje, rdzeniem systemu operacyjnego. Jądro to oprogramowanie znajdujące się w Baran i kierujące wszystkim, co robi komputer. Kiedy coś jest zapisywane w pamięci, wykonaniem kieruje jądro.
Jądro wie, jak łączyć się ze sprzętem, takim jak procesory graficzne i karty sieciowe, ale może nie wiedzieć, jak wykorzystać ich pełny potencjał, opierając się na ogólnych standardach obowiązujących w branży komputerowej..
Tutaj wchodzą w grę sterowniki sprzętowe. Sterowniki informują system operacyjny, jak pracować z określonymi komponentami, dlatego potrzebne są na przykład różne sterowniki dla procesorów graficznych Nvidia i AMD.
Wyposażone w odpowiednie sterowniki jądro ma najwyższą władzę w komputerze, łącznie z wykonywaniem czynności, które mogą katastrofalnie zniszczyć dane.
Rola interfejsów programowania aplikacji (API)
W czasach MS-DOS twórcy oprogramowania musieli pisać swoje oprogramowanie specjalnie dla sprzętu użytkownika. Najbardziej znanym tego przykładem w systemach MS-DOS były sterowniki kart dźwiękowych.
Dana gra wideo musiałaby obsługiwać najpopularniejsze karty (Sound Blaster, Ad-lib, Gravis Ultrasound itp.) i mieć nadzieję, że większość graczy będzie obsługiwana. Dziś wszystko działa zupełnie inaczej dzięki interfejsom API.
Microsoft DirectX jest doskonałym przykładem. Jeśli chcesz uzyskać szczegółowe wyjaśnienia, sprawdź Co to jest DirectX i dlaczego jest ważny?. Jednak najważniejszą rzeczą, którą należy wiedzieć, jest to, że interfejs API oferuje twórcom oprogramowania standardowy sposób proszenia o zasoby sprzętowe z komponentów takich jak procesor graficzny. Ponadto producenci sprzętu muszą jedynie upewnić się, że ich produkty są zgodne z DirectX, aby zapewnić pełną kompatybilność z jakimkolwiek podobnie zgodnym oprogramowaniem.
API oferują warstwę translacji pomiędzy aplikacjami a jądrem niskiego poziomu ze sterownikami sprzętowymi. Tak, wiąże się to z niewielkim spadkiem wydajności. Jednak na nowoczesnych komputerach jest to nieistotne i wiąże się z wieloma korzyściami, i tu w końcu dochodzimy do trybu użytkownika i trybu jądra.
Tryb użytkownika a tryb jądra
Nowoczesne systemy operacyjne uruchamiają jednocześnie setki lub tysiące „procesów”, dynamicznie zapewniając im czas procesora w miarę potrzeb w oparciu o ich priorytety i wymagania dotyczące mocy obliczeniowej.
Gdy uruchamiasz aplikację, generuje ona procesy, a procesor może je wykonywać w trybie użytkownika lub w trybie jądra.
Proces systemu Windows działający w trybie użytkownika ma dostęp tylko do swojej prywatnej przestrzeni adresowej pamięci wirtualnej i tabeli obsługi. Oprogramowanie wykorzystuje te tabele do przechowywania danych w pamięci RAM i żądania zasobów. Nie ma bezpośredniego dostępu do pamięci ani innego sprzętu i zadaniem systemu operacyjnego jest mapowanie tych wirtualnych przestrzeni na rzeczywisty sprzęt komputera..
Jest to dobre z wielu powodów, ale najważniejszą zaletą jest to, że aplikacja nie może nadpisywać ani zmieniać danych poza swoją przestrzenią adresową pamięci wirtualnej. Ponadto niektóre funkcje są niedostępne dla procesów trybu użytkownika, głównie tych, które mogą spowodować awarię systemu lub zniszczenie danych.
Gdy proces zostaje uruchomiony lub zostaje przeniesiony do trybu jądra, ma pełny dostęp do zasobów systemowych, nawet tych zarezerwowanych dla systemu operacyjnego. Teoretycznie może więc zastąpić najważniejsze dane potrzebne systemowi operacyjnemu do prawidłowego działania.
Pułapki i wyjątki
Ważne jest, aby zrozumieć, że te dwa tryby są wymuszane na poziomie sprzętowym przez sam procesor. Jeśli aplikacja działająca w trybie użytkownika próbuje wykonać czynność wymagającą dostępu w trybie jądra, generuje „pułapkę” lub „wyjątek”. Następnie system operacyjny zajmie się aplikacją, zwykle zamykając ją i generując dziennik awarii, aby programiści mogli zobaczyć, co wydarzyło się w pamięci, gdy coś poszło nie tak.
Niebezpieczeństwa związane z trybem jądra: niebieski ekran śmierci
Jeśli kiedykolwiek doświadczyłeś niebieskiego ekranu śmierci (kto tego nie zrobił?), który zmusił komputer do wyłączenia lub ponownego uruchomienia, istnieje duże prawdopodobieństwo, że przyczyną był proces działający w trybie jądra.
Kiedy proces w trybie jądra robi coś, czego nie powinien, system operacyjny nie może odzyskać siły, a cały komputer się zatrzymuje. Gdy proces w trybie użytkownika ulegnie awarii, ulega awarii tylko aplikacja, a reszta oprogramowania i system operacyjny mogą działać bez żadnych problemów.
To jest jeden obszar, w którym interfejsy API odgrywają zasadniczą rolę, ponieważ jest to interfejs API proszący o uprawnienia trybu jądra. Aplikacje działające w trybie użytkownika zasadniczo delegują żądania, które wymagałyby uprawnień w trybie jądra, do interfejsu API.
Dlatego tryb jądra jest zwykle przyznawany tylko procesom systemowym niskiego poziomu, które wymagają bezpośredniego dostępu do sprzętu komputera. Zwykle to uprawnienie jest rozszerzane na proces, ponieważ wymaga on większej wydajności, niż może zapewnić tryb użytkownika. Niektóre instrukcje procesora działają tylko w trybie jądra, więc jeśli proces musi korzystać z tych funkcji, należy je podnieść.
Jeśli masz problem z niebieskim ekranem śmierci, koniecznie przeczytaj nasze Przewodnik rozwiązywania problemów z niebieskim ekranem śmierci w systemie Windows 10!.
.