Jądro Systemu Windows
Wykonał:Bartosz
Wilczewski
Kernel czyli serce
systemu
Zadaniem jądra jest sterowanie działaniem systemu operacyjnego. Dlatego
jego jakość w znaczący sposób wpływa na sprawność działania całego peceta.
To właśnie jądro utrzymuje wszystko w ruchu, ponieważ zawiera sterowniki
sprzętu umożliwiające komunikację z urządzeniami zewnętrznymi oraz
moduły zarządzające komponentami komputera, takimi jak pamięć
operacyjna, procesor czy dysk twardy.
Jądro dba także o bezpieczne działanie systemu, śledząc wszystkie
uruchomione procesy. Nadaje też uruchomionym programom prawo do
korzystania z urządzeń sprzętowych przez określony czas. Dla zachowania
stabilności najważniejsza jest odpowiednia organizacja zasobów, obejmująca
funkcje, z których korzystamy na co dzień, m.in. zarządzanie systemem
plików.
Wysoka sprawność jądra jest także niezbędna do szybkiego rozwiązywania
konfliktów dostępu występujących na przykład wtedy, gdy wiele programów
chce jednocześnie zapisać dane na dysku. W takich sytuacjach kernel nadaje
aplikacjom określony priorytet, pozwalając jednemu z programów na zapis, a
innym nakazując oczekiwanie na swoją kolej. W dalszej części tekstu bardziej
szczegółowo opisujemy, jak Windows radzi sobie z tymi wszystkimi zadaniami.
Rodzaje Trybów Jąder
Od czasu wprowadzenia linii systemów NT w architekturze Windows istnieje podział na tryb
jądra oraz tryb użytkownika – dotyczy to również Visty. W trybie użytkownika działa
właściwie wszystko, co widzimy, korzystając z komputera, a więc programy takie jak Word
czy Photoshop. Aplikacje działające w tym trybie nie mają bezpośredniego dostępu do
komponentów sprzętowych i pamięci operacyjnej. Można powiedzieć, że tryb użytkownika
Windows jest pokryty otuliną. Dojścia sięgające bardziej w głąb systemu są kierowane przez
odpowiedni interfejs programowy, np. Win32 API korzystający z bibliotek systemowych DLL.
Tryb jądra działa natomiast w tle, a użytkownik dowiaduje się o jego istnieniu tylko wtedy,
kiedy pojawia się poważny problem. Na przykład w sytuacji, gdy nieprawidłowe działanie
sterownika funkcjonującego w trybie jądra (patrz infografika po prawej) doprowadzi do
zawieszenia się systemu, na ekranie pojawi się niebieski ekran śmierci.
Centralną pozycję w systemie Windows zajmuje plik „ntoskrnl.exe”. Aby obsłużyć tryb jądra
i tryb użytkownika, funkcjonuje on dwutorowo, obejmując warstwę jądra i tzw. egzekutor.
Warstwa jądra łączy tryb użytkownika i tryb jądra, a jej głównym zadaniem jest
przydzielanie poszczególnym programom i procesom określonej ilości czasu procesora
(ang. CPU-scheduling). Egzekutor z kolei obejmuje zakresem działania usługi systemowe,
np. Plug&Play.
Najgłębiej w systemie znajduje się tzw. abstrakcyjna warstwa sprzętowa (HAL: Hardware
Abstraction Layer). O co chodzi? Architektury poszczególnych pecetów bardzo się różnią.
Jednak za sprawą HAL od strony jądra wszystkie wyglądają tak samo. Dzięki temu kernel
może przydzielać czas procesora niezależnie od tego, czy dany układ ma dwa rdzenie i
został wyprodukowany przez AMD, czy też jest czterordzeniowy i pochodzi od Intela.
Zadania Jądra
Ważnym zadaniem jądra systemowego jest zarządzanie procesami. Kryje się za tym nie tylko nadawanie
poszczególnym zadaniom odpowiednich priorytetów, ale też ich zabezpieczanie. W systemie Windows
uruchamianiem i kontrolowaniem procesów zajmuje się Win32 API. Częścią jądra odpowiedzialną za ten rodzaj
zadań jest egzekutor warstwy wykonawczej NT. Procesy mogą uzyskać dostęp do komponentów jądra dzięki tzw.
uchwytom (ang. handles).
Windows pozwala też procesom na uruchamianie kolejnych procesów, np. Word (proces 1) może utworzyć nowy
dokument (proces 2). Klasyczny model procedur Windows umożliwia także edytorowi tekstu wprowadzanie zmian
w utworzonym dokumencie lub jego usuniecie. Krótko mówiąc, procesy macierzyste mają kontrolę nad tymi
procesami, które utworzyły.
Istnieje jednak furtka pozwalająca zwykłym procesom obejść hierarchię dostępu. Jest nią tryb debugowania
programów, dający użytkownikowi posiadającemu uprawnienia administratora pełny dostęp do dowolnego
procesu. Użytkownik może w ten sposób sprawdzić pulę adresów wykorzystywanych przez proces, a także
odczytać bądź zmienić przetwarzane przez niego informacje. Korzystając z tej funkcji, haker jest w stanie
wprowadzić do procesu nowe wątki.
Żeby zabezpieczyć użytkownika przed tym rodzajem ataku, w Viście zastosowano nowy typ procesu,
przeznaczony głównie do aplikacji multimedialnych – proces chroniony. Cechuje go silne ograniczenie praw do
zarządzania innymi procesami. System przygotowuje informacje diagnostyczne dla procesów chronionych, ale
nawet administratorzy nie mogą uzyskać do nich bezpośredniego dostępu. Program, np. kodek do odtwarzania
filmu, może zostać uruchomiony jako proces chroniony tylko pod warunkiem, że jego kod został opatrzony
podpisem cyfrowym. Wprowadzenie procesów chronionych to idealny przykład, jak Microsoft dopasowuje nieco
już przykurzoną architekturę Windows do aktualnych wymagań.
W systemach Linux i Mac OS X model obsługi procesów jest podobny jak w Windows: procesy nadrzędne mają
pod kontrolą procesy potomne. Systemy te umożliwiają więc użytkownikom klasy Root samodzielne analizowanie
procesów i ingerowanie w ich przebieg. Brakuje jednak odpowiednika procesów chronionych. Nic dziwnego –
celem Microsoftu było przede wszystkim przystosowanie Visty do obsługi DRM, czyli cyfrowego zarządzania
licencjami treści multimedialnych, czego projektanci Linuksa i Mac OS X nie brali pod uwagę.
Zabezpieczenia
Środkiem zabezpieczającym przed rootkitami jest opracowany przez Microsoft system
podpisywania instrukcji trybu jądra – Kernel Mode Code Signing — pozwalający na
instalowanie tylko tych sterowników, które są podpisane cyfrowo. Sygnatury są zwykle
nadawane przez Laboratorium Jakości Sprzętu Windows (WHQL – Windows Hardware
Quality Lab), choć programiści mogą podpisywać napisane przez siebie instrukcje
samodzielnie.
W tym celu autor kodu musi przypisać swemu programowi cyfrowy odcisk palca, czyli tzw.
hasz, podpisać go kluczem prywatnym i wprowadzić certyfikat oraz zaszyfrowaną wartość
kontrolną do kodu źródłowego. Podczas próby instalacji sterownika, Windows za pomocą
klucza w certyfikacie odczytuje ukrytą wartość hasz i sprawdza, czy pasuje ona do
programu. Kontrolowana jest też zgodność załączonego do sterownika certyfikatu z
wzorami umieszczonymi w programie rozruchowym oraz w jądrze systemu operacyjnego.
Niestety, w odróżnieniu od wersji 64-bitowej, 32-bitowa Vista dopuszcza instalację
sterowników niepodpisanych cyfrowo.
W Mac OS X i w Linuksie cyfrowo podpisywane są dodatkowe moduły jądra. Teoretycznie da
się w ten sposób zabezpieczać również sterowniki, jednak systemy nie dysponują
narzędziami do sprawdzania ich autentyczności.
Adresy:dynamiczne
przydzielanie
32-bitowa architektura procesorów powoduje znaczne ograniczenie zakresu
adresów pamięci operacyjnej. Z tego powodu jądro systemu Windows nie
może być większe niż 2 GB, a przecież musi jeszcze wystarczyć miejsca na
sterowniki, pamięć podręczną oraz stos systemu plików. W Windows XP
Menedżer pamięci już przy starcie określa, ile miejsca zostanie przydzielone
poszczególnym komponentom.
Okazuje się, że nie jest to najlepsze rozwiązanie: często, gdy pamięć
podręczna pęka w szwach, stos ma jeszcze sporo miejsca, którego nie może
jednak oddać. Dlatego w Viście zastosowano dynamiczny podział zakresu
adresów pamięci jądra. Odpowiednia usługa kontroluje zwalnianie i
przydzielanie zasobów w zależności od chwilowego zapotrzebowania. Dzięki
temu pamięć wirtualna może być powiększana w sytuacji, gdy rosną potrzeby
sterowników, i zmniejszana, gdy nie jest w pełni wykorzystana.
Przeciwdziałanie skutkom
zawieszania się aplikacji
Chcąc przeprowadzić sekwencję powiązanych ze sobą zmian, program może
skorzystać z Menedżera transakcji jądra (KTM — Kernel Transaction Manager) i
przeprowadzić transakcję, wykorzystując Koordynator transakcji
rozproszonych (DTC — Distributed Transaction Coordinator), albo też użyć
tylko KTM, a następnie przyporządkować wszystkie zmiany w plikach i
kluczach Rejestru do jednej transakcji. Jeśli instalacja przebiegnie prawidłowo,
modyfikacje są wprowadzane – do tego momentu można je w każdej chwili
cofnąć. Inne aplikacje widzą przeprowadzone zmiany dopiero po zakończeniu
procesu transakcji.
Mac OS X i Linux również korzystają z mechanizmu transakcji. Użytkownik
zwykle o niczym nie wie, chyba że aktualizacja przestanie odpowiadać. W
takiej sytuacji nie ma jednak żadnego zagrożenia dla stabilności systemu –
zostaje jedynie wyświetlony komunikat informujący, że zmiany nie zostały
wprowadzone.
Tryby
Tryb Jądra
Dziękuje za obejrzenie
prezentacji