Architektura Windows NT

Windows 7, Windows Vista, Windows Server 2003, Windows XP, Windows 2000 i Windows NT są częścią rodziny Windows NT (w technologii NT) systemów operacyjnych firmy Microsoft. Umożliwiają one między innymi wywłaszczanie oraz wielobieżność i zostały zaprojektowane do pracy na systemach bazujących na architekturze x86 Intela, zarówno jednoprocesorowych, jak i o architekturze SMP. Do obsługi wejścia/wyjścia architektura NT stosuje przetwarzanie pakietowe, które wykorzystuje IRP (I/O request packet - pakiet zamówienia wejścia/wyjścia), oraz wejście/wyjście asynchroniczne. Poczynając od Windows XP, Microsoft rozpoczął wbudowywanie obsługi trybu 64-bitowego w swoje systemy operacyjne — wcześniejsze wersje korzystały tylko z trybu 32-bitowego. Architektura Windows NT jest wysoce modularna i składa się z dwóch głównych warstw: trybu użytkownika i trybu jądra. Programy i podsystemy w trybie użytkownika są ograniczone do zasobów systemowych, do których mają dostęp, w trybie jądra natomiast posiadają nieograniczony dostęp do pamięci systemowej i urządzeń zewnętrznych. Jądra systemów operacyjnych w technologii NT są określane jako jądra hybrydowe, jednakże warto zauważyć, iż jest to sprawą dyskusyjną, gdyż jądro to jest właściwie jądrem monolitycznym o strukturze zbliżonej do mikrojądra. Architektura NT składa się z jądra hybrydowego, warstwy abstrakcji sprzętowej (HAL), sterowników i egzekutora. Wszystkie te moduły działają w trybie jądra[1]. Usługi o wyższym poziomie abstrakcji są implementowane przez egzekutor.

Architektura Windows NT

Tryb użytkownika w technologii Windows NT składa się z podsystemów, umożliwiających przekazywanie zamówień wejścia/wyjścia za pomocą menedżera wejścia/wyjścia do odpowiedniego sterownika programowego, działającego w trybie jądra. Warstwa użytkownika Windows 2000 składa się z dwóch podsystemów: podsystemu środowiska (uruchamia aplikacje napisane dla wielu różnych typów systemów operacyjnych) i podsystemu integralności (uruchamia specyficzne dla systemu funkcje w zastępstwie podsystemu środowiska). Tryb jądra w Windows 2000 ma pełny dostęp do sprzętu i zasobów systemowych komputera. Tryb jądra blokuje dostęp dla usług i aplikacji trybu użytkownika do krytycznych elementów systemu operacyjnego, do których nie powinny mieć one dostępu.

Egzekutor komunikuje się ze wszystkimi podsystemami trybu użytkownika. Obsługuje wejście/wyjście, zarządza obiektami, zabezpieczeniami, oraz procesami. Jądro umieszczone jest pomiędzy HAL i Egzekutorem, zapewniając synchronizację wieloprocesorową, szeregowanie zadań i przerwań wraz z ich przydzielaniem, oraz zarządzanie obsługą pułapek i rozdzielaniem wyjątków. Jądro jest odpowiedzialne również za inicjalizację sterowników sprzętu podczas uruchamiania systemu. Sterowniki poziomu jądra występują na trzech poziomach: wysokim, pośrednim, oraz niskim. Windows Driver Model(inne języki) (WDM - model tworzenia sterowników dla Windows) występuje na poziomie pośrednim i został zaprojektowany tak, aby zachować zgodność binarną i kodu źródłowego pomiędzy Windows 98 a Windows 2000. Sterowniki niskiego poziomu są albo sterownikami Windows NT starszego typu, kontrolującymi urządzenie bezpośrednio, albo szyną systemową typu Plug-and-play.

Tryb użytkownika edytuj

Tryb użytkownika składa się z podsystemów, które przekazują zamówienia wejścia/wyjścia do odpowiednich sterowników w trybie jądra przez menedżera wejścia/wyjścia (który działa w trybie jądra). Dwa podsystemy, na które składa się warstwa trybu użytkownika w Windows 2000, to podsystem środowiska i podsystem integralności.

Podsystem środowiska został zaprojektowany do uruchamiania aplikacji napisanych dla wielu różnych systemów operacyjnych. Żaden z podsystemów środowiska nie może uzyskać bezpośredniego dostępu do sprzętu i musi złożyć zamówienie na dostęp do pamięci poprzez menedżera pamięci wirtualnej (Virtual Memory Manager), który działa w trybie jądra. Ponadto aplikacje otrzymują niższy priorytet niż procesy w trybie jądra. Obecnie istnieją trzy główne podystemy środowiska: podsystem Win32, OS/2 i POSIX.

Podsystem środowiska Win32 może uruchamiać 32-bitowe aplikacje dla Windows. Zawiera on obsługę konsoli i okien tekstowych, oraz obsługę wyłączenia i błędów dla pozostałych podsystemów środowiska. Ponadto umożliwia on korzystanie z maszyn wirtualnych DOS (Virtual DOS Machine), które umożliwiają uruchamianie aplikacji dla systemu MS-DOS oraz 16-bitowych Windows 3.x (Win16). Istnieje specjalna maszyna wirtualna DOS (oparta na sprzętowym trybie wirtualnym 8086 obecnym w architekturze x86), która działa we własnej przestrzeni adresowej, emulując procesor Intel 80486 z uruchomionym systemem MS-DOS 5. Programy Win16 natomiast są uruchamiane w maszynie Win16 (do jej uruchomienia niezbędne jest wcześniejsze uruchomienie odrębnej maszyny wirtualnej DOS). Domyślnie (oprócz systemów NT 3.x) każdy następny program Win16 uruchamiany jest w już działającym procesie Win16 uruchomionym przez pierwszy program Win16 (w związku z tym używa tej samej przestrzeni adresowej, a maszyna Win16 przyznaje każdemu programowi jego własny wątek). Możliwe jest również uruchamianie programu Win16 w oddzielnej maszynie wirtualnej, co umożliwia jego szeregowanie z wywłaszczaniem, gdyż Windows wywłaszcza wtedy cały proces maszyny wirtualnej, który zawiera tylko jeden uruchomiony program — w systemie NT 3.x było to rozwiązanie domyślne, ale w NT 4.0 i nowszych Microsoft to zmienił, ponieważ uruchamianie odrębnej maszyny Win16 zużywało więcej czasu (konieczność uprzedniego uruchomienia maszyny wirtualnej DOS, a potem maszyny Win16) i pamięci. Podsystem OS/2 umożliwia uruchamianie 16-bitowych, działających w trybie znakowym programów dla systemu OS/2 i emuluje OS/2 1.x. Nie udostępnia natomiast trybu 32-bitowego i środowiska graficznego dla OS/2 2.x i nowszych. Podsystem środowiska POSIX umożliwia uruchamianie aplikacji, które ściśle przestrzegają standardu POSIX.1, lub związanych z nim standardów ISO/IEC.

Systemy działające w trybie 64-bitowym nie udostępniają możliwości uruchamiania aplikacji DOS i Win16. Wynika to z tego, że w trybie 64-bitowym (Long) architektura x64 nie dysponuje trybem wirtualnym 8086, a jego programowe emulowanie (przez system) jest nieopłacalne z uwagi na niewielką liczbę stosowanych obecnie aplikacji DOS i Win16. Ponadto dzięki możliwościom wirtualizacyjnym i tak można w razie potrzeby łatwo emulować sprzętowo procesor x86 przy użyciu odrębnej aplikacji.

Podsystem integralności zajmuje się specyficznymi dla systemu operacyjnego funkcjami w zastępstwie podsystemu środowiska. Składa się z podsystemu bezpieczeństwa, usługi stacji roboczej i usługi serwera. Podsystem bezpieczeństwa obsługuje tokeny bezpieczeństwa, udostępnia albo blokuje dostęp do kont użytkowników, korzystając z praw dostępu do zasobów, obsługuje logowanie i inicjuje weryfikację loginu oraz decyduje, które zasoby systemowe muszą być audytowane przez Windows 2000. Ponadto obsługuje Active Directory. Usługa stacji roboczej to API dla readresatora sieciowego, który umożliwia dostęp komputera do sieci. Usługa serwera to API, które pozwala na udostępnianie przez komputer połączeń sieciowych.

Tryb jądra edytuj

Tryb jądra Windows 2000 ma pełny dostęp do sprzętu oraz zasobów systemowych komputera i wykonuje kod w obszarze pamięci chronionej. Kontroluje dostęp do szeregowania, priorytetyzację wątków, zarządzanie pamięcią i komunikację ze sprzętem. Tryb jądra blokuje dostęp usługom i aplikacjom trybu użytkownika do krytycznych obszarów systemu operacyjnego, mogą one jedynie zażądać od jądra wykonania tych czynności w ich imieniu. Tryb jądra składa się z usług egzekutora, które składają się z modułów przeznaczonych do wykonywania specyficznych czynności, sterowników jądra, jądra i HAL.

Egzekutor edytuj

Egzekutor porozumiewa się ze wszystkimi podsystemami trybu użytkownika. Obsługuje operacje wejścia/wyjścia, zarządzanie obiektami i procesami, oraz zabezpieczeniami. Zawiera wiele komponentów, m.in. Menedżera wejścia/wyjścia, Monitor odwołań bezpieczeństwa, Menedżera obiektów, Menedżera IPC, Menedżera pamięci wirtualnej, Menedżera PnP i Menedżera zarządzania energią, oraz Menedżera okien, który współpracuje z GDI Windows. Każdy z tych komponentów udostępnia pomocniczą funkcję jądra, która pozwala innym komponentom na komunikację między sobą. Cała ta grupa komponentów może być nazywana usługami egzekutora. Żadna z nich nie ma dostępu do wewnętrznych funkcji innych komponentów egzekutora.

Menedżer obiektów jest specjalnym podsystemem egzekutora, przez który muszą przejść wszystkie inne podsystemy egzekutora, aby otrzymać dostęp do zasobów Windows 2000 - co czyni go usługą zarządzania zasobami. Menedżer obiektów jest używany do zredukowania duplikacji funkcjonalności zarządzania zasobami w innych podsystemach egzekutora, co mogłoby prowadzić do błędów i utrudnić tworzenie Windows 2000[2]. Dla menedżera obiektów wszystkie zasoby są obiektami, niezależnie od tego, czy zasób jest fizyczny (np. system plików lub urządzenie zewnętrzne), czy logiczny (np. plik). Każdy obiekt ma strukturę - typ obiektu, który menedżer obiektów musi znać. Gdy inny podsystem egzekutora żąda stworzenia obiektu, wysyła to żądanie do menedżera obiektów, co powoduje utworzenie pustej struktury obiektu, którą następnie żądający podsystem wypełnia[3]. Typy obiektów definiują funkcje udostępniane przez obiekt, oraz specyficzne dla niego dane. W ten sposób menedżer obiektów sprawia, że Windows 2000 jest systemem operacyjnym zorientowanym obiektowo, ponieważ typy obiektów mogą być uznawane za klasy, definiujące obiekty.

Każda instancja tworzonego obiektu zachowuje swoją nazwę, parametry przekazywane do funkcji tworzącej obiekt, parametry bezpieczeństwa i wskaźnik na typ obiektu. Każdy obiekt zawiera ponadto procedurę usuwającą oraz licznik referencji, który informuje menedżera obiektów o ilości innych obiektów w systemie posiadających odwołanie do danego obiektu, co pozwala na podjęcie decyzji o możliwości zniszczenia go, gdy jest on usuwany[4]. Każdy obiekt znajduje się w hierarchicznej przestrzeni nazw obiektów.

Przypisy edytuj

  1. MCSE Exam 70-215, Microsoft Windows 2000 Server. Chapter 1, Introduction to Microsoft Windows 2000, pg 7-18.
  2. Mark Russinovich (October 1997). Inside NT's Object Manager. Introduction.
  3. Mark Russinovich (October 1997). Inside NT's Object Manager. "Object Types".
  4. Mark Russinovich (October 1997). Inside NT's Object Manager. "Objects".