background image

Jądro Systemu Windows

Wykonał:Bartosz 

Wilczewski

background image

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.

background image

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.

background image

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ę.

background image

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.

background image

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.

background image

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.

background image

Tryby

background image

Tryb Jądra

background image

Dziękuje za obejrzenie 

prezentacji


Document Outline