Arhitektura Windowsa NT

Izvor: Wikipedija
Arhitektura Windows NT porodice operacijskih sustava se sastoj od dva sloja korisničkog načina rada i jezgrinog načina rada), s raznim modulima između ovih dvaju slojeva.

Windows Vista, Windows Server 2003, Windows XP, Windows 2000 i Windows NT su svi dio Windows NT porodice Microsoftovih operacijskih sustava. Svi su preventivni, paralelno iskoristivi operacijski sustavi dizajnirani za rad s ili jednoprocesorski ili simetrično multiprocesorski (SMP) zasnovanim računalima. Za obradu ulazno/izlaznih (U/I) zahtjeva koristi paketno upravljan U/I koji rabi podatkovnu strukturu IRP koja predstavlja ulazno/izlazne pakete zahtjeva, i asinkroni U/I. Počinjući s Windowsima XP, Microsoft je započeo ugradnju 64-bitne podrške u svoje operacijske sustave — prije ovoga su operacijski sustavi bili zasnovani na 32-bitnom modelu. Programi i podsustavi u korisničkom načinu rada imaju ograničen pristup sustavskim sredstvima, dok jezgrin način rada ima neograničen pristup sustavskoj memoriji i vanjskim uređajima. Jezgra operacijskih sustava u ovoj liniji je poznata kao hibridna jezgra - iako valja napomenuti da je ovaj naziv osporavan, naglašujući da je jezgra u suštini monolitna jezgra strukturirana kao mikrojezgra. Arhitektura se sastoji od hibridne jezgre, sloja za apstrakciju sklopovlja (HAL), pogonskih programa i izvršnih komponenti (Executive), pri čemu su svi oni u jezgrinom načinu rada [1]. Servisi više razine su ostvareni u izvršnim komponentama.

Jezgrin način rada u Windows NT liniji se sastoji od podsustava sposobnih prosljeđivati U/I zahtjeve odgovarajućem pogonskom programu koji se izvodi u jezgrinom načinu rada rabeći U/I upravitelj (I/O Manager). Dva podsustava čine korisnički način rada Windowsa 2000: podsustav okoline (Environment subsystem) (pokreće aplikacije napisane za različite vrste operacijskih sustava), i integralni podsustav (Integral subsystem) (funkcije specifične za operacijski sustav koje djeluju u ime podsustava okoline). Jezgrin način rada u Windowsima 2000 ima neograničen pristup sklopovlju i sustavskim sredstvima računala. Jezgrin način rada sprječava servise i aplikacije u korisničkom načinu rada da pristupe kritičnim područjima operacijskog sustava kojima ne bi smjeli imati pristup.

Izvršne komponente sučeljuju s podsustavima u korisničkom načinu rada. Barataju i s U/I, upravljanjem objekata, sigurnošću i upravljanjem procesa. Jezgra sjedi između sloja za apstrakciju sklopovlja i izvršnih komponenti kako bi omogućila multiprocesorsku sinkronizaciju, raspoređivanje i otpremanje prijekida i niti, te rukovanje i otpremanje zamki i iznimaka. Jezgra je također odgovorna za inicijalizaciju pogonskih programa uređaja prilikom pokretanja OS-a. Pogonski programi u jezgrinom načinu rada postoje na tri razine: pogonski programi najviše razine, pogonski programi srednje razine i pogonski programi niske razine. Windows Driver Model (WDM) postoji u međusloju i ponajprvo je dizajniran kako bi bio kompatibilan binarno i na razini izvornog koda između Windowsa 98 i Windowsa 2000. Pogonski programi najniže razine su ili naslijeđeni pogonski programi s Windowsa NT koji izravno upravljaju uređajem, ili pak mogu biti od PnP sklopovske sabirnice.

Korisnički način rada[uredi | uredi kôd]

Korisnički način rada je sačinjen pod podsustava koji mogu prosljeđivati U/I zahtjeve odgovarajućim pogonskim programima preko U/I upravitelja (koji djeluje u jezgrinom načinu rada). Dva podsustava čine sloj korisničkog načina rada Windowsa 2000: podsustav okoline i integralni podsustav.

Podsustav okoline je dizajniran kako bi omogućio pokretanje aplikacija napisanih za različite vrste operacijskih sustava. Podsustavi okoline ne mogu izravno pristupiti sklopovlju, i moraju zahtijevati pristup memorijskim sredstvima preko upravitelja virtualne memorije koji djeluje u jezgrinom načinu rada. Također, aplikacije se pokreću na nižem prioritetu od procesa u jezgrinom načinu rada. Trenutačno postoje tri glavna podsustava okoline: Win32 podsustav, OS/2 podsustav i POSIX podsustav.

Win32 podsustav okoline može pokretati 32-bitne Windows aplikacije. Sadrži podršku za konzolu i tekstualne prozore, te gašenje i rukovanje teškim grješkama svih drugih sustava okoline. Također podržava VDM-ove koji dopuštaju pokretanje MS-DOS i 16-bitnih Windows 3.x (Win16) aplikacija na Windowsima. Postoji specifični MS-DOS VDM koji je pokrenut u vlastitom adresnom prostoru i koji emulira Intel 80486 s pokrenutim MS-DOS-om 5.

Win16 programi su, međutim, pokrenuti u Win16 VDM. Svaki program pretpostavljeno se pokreće u istom procesu, na taj način rabeći isti adresni prostor, a Win16 VDM daje svakom programu vlastitu nit u kojoj je pokrenut. Međutim, Windows 2000 dopušta korisnicima pokretanje Win16 programa u odvojenim Win16 VDM-ovima, što im dopušta da budu preventivno povišezadaćeni s obzirom na to da će Windows 2000 preventirati cijeli VDM proces, a koji pak sadrži svega jednu pokrenutu aplikaciju. OS/2 podsustav okoline podržava 16-bitne znakovno zasnovane OS/2 aplikacije i emulira OS/2 1.x, ali ne i 32-bitne ili grafičke OS/2 aplikacije kao što se koristi na OS/2 2.x ili naprednijem. POSIX podsustav podržava aplikacije koje su strogo napisane po ili POSIX.1 standardu ili srodnim ISO/IEC standardima.

Integralni podsustav se brine o specifičnim funkcijama operacijskog sustava u ime podsustava okoline. Čine ga sigurnosni podsustav, servis radne stanice i poslužiteljski servis. Sigurnosni podsutav barata sigurnosnim žetonima, dozvolama i odbijenicama pristupima korisničkim računima zasnovanim na sredstvenim permisijama, rukovodi zahtjevima za prijavu i započinje autentikaciju prijave, te određuje koja sustavska sredstva Windows 2000 treba ispitati (audit). Također upravlja aktivnim direktorijem. Servis radne stanice je API na mrežni preusmjerivač, koji omogućuje računalni pristup mreži. Poslužiteljski servis je API koji omogućuje računalu pružanje mrežnih servisa.

Jezgrin način rada[uredi | uredi kôd]

Jezgrin način rada Windowsa 2000 ima neograničen pristup sklopovlju i sustavskim sredstvima računala i izvršuje kod u zaštićenom memorijskom području. Kontrolira pristup raspoređivanju, prioretizaciji niti, upravljanju memorijom i međudjelovanju sa sklopovljem. Jezgrin način rada sprječava servise u korisničkom načinu rada od pristupa kritičnim područjima operacijskog sustava kojima ne bi smjeli pristupiti, te stoga procesi u korisničkom načinu rada vrše zahtjeve jezgrinom načinu rada za obavljanje takvih operacija u svoje ime.

Jezrin se način rada sastoji od izvršnih servisa, koji se sastoje od mnogo modula koji obavljaju specifične zadaće, jezgrinih pogonskih programa, jezgre i sloja za apstakciju sklopovlja (HAL - Hardware Abstaction Layer).

Izvršne komponente[uredi | uredi kôd]

Izvršne komponente (Executive) sučeljuju sa svim podsustavima u korisničkom načinu rada. Barataju s U/I, upravljanjem objekata, te upravljanjem sigurnošću i procesima. Neformalno se dijeli na nekoliko podsustava, među kojima su upravitelj priručnom memorijom, upravitelj konfiguracijom, U/I upravitelj, lokalni poziv procedura (LPC), upravitelj memorije, upravitelj objekata, sturktura procesa i nadglednik sigurosnih referenci (SRM). Zajednički grupirani, komponente se mogu zvati izvršni servisi (interno ime Ex). Sustavski servisi (interno ime Nt), tj. sustavski pozivi, su također ostvareni na ovoj razini, osim tek nekolicine koji izravno pozivaju u jezgru radi poboljšanja performansi.

Svaki objekt u Windowsima 2000 postoji u globalnom prostoru imena. Ovo je screenshot iz SysInternalsovog programa WinObj

Upravitelj objektima (Object Manager - interno ime Ob) je posebni izvršni podsustav kroz koji prolaze svi drugi izvršni podsustavi, napose sustavski pozivi, kako bi pristupili Windows 2000 sredstvima, na taj ga način čineći servisom za upravljanje infrastrukturom sredstava.

Upravitelj objektima se koristi u svrhu redukcije udvostručenja funkcionalnosti upravljanja sredstvima u drugim izvršnim podsustavima, što bi možebitno moglo voditi ka programskim grješkama i otežati razvoj Windowsa 2000.[2] S gledišta upravitelja objekata, svako je sredstvo objekt, bez obzira na to radi li se o fizičkom sredstvu (poput datotečnog sustava ili vanjskog uređaja) ili logičkog resursa (poput datoteke). Svaki objekt ima strukturu ili tip objekta koji upravitelj objekata razumije.

Stvaranje je objekata dvofazni postupak, stvaranja i umetanja. Stvaranje uzrokuje alokaciju praznog objekata i rezerviranje bilo kakvih sredstava koje upravitelj objekata zahtijeva, kao što je (opcionalno) ime u prostoru imena. Ako stvaranje nije uspjelo, podsustav odgovoran za stvaranje popunjuje prazan objekt. [3] U konačnici, ako podsustav označi inicijalizaciju uspješnom, instruira upravitelj objekata za umetanje objekta, što ga čini dostupnim preko njegova (opcionalnog) imena ili magičnog kolačića zvanog ručica (handle). Od tog trenutka, životom objekta upravlja upravitelj objekata a na podsustavu je da drži objekt u radnom stanju sve dok mu upravitelj objekata ne signalizira da ga se riješi.

Ručice su svrhom slične UNIX datotečnim opisnicima, na način da svaka predstavlja referencu na jezgrino sredstvo kroz neprozirnu vrijednost. Slično, otvaranje objekta po imenu potpada u sigurnosnu provjeru, ali djelovanje kroz već postojeću, otvorenu, ručicu je ograničeno tek na razinu pristupa zahtijevanu prilikom stvaranja ili otvaranja objekta.

Tipovi objekata definiraju procedure nad njima i bilo koje specifične podatke. Na taj način, upravitelj objekata dopušta Windowsima 2000 da budu objektno orijentiran operacijski sustav, s obzirom na to da se tipovi objekata mogu shvatiti kao polimorfne klase koje definiraju objekte. Većina podsustava se, doduše, s U/I upraviteljom kao istaknutom iznimkom, pouzdaje na pretpostavljenu implementaciju za sve tipove procedura.

Svaka instanca kreiranog objekta pohranjuje ime, parametre proslijeđene funkciji koja je kreirala objekt, sigurnosne atribute i pokazivač na tip objekta. Objekt također sadrži proceduru za zatvaranje objekta i broj referenci na njega koji upravitelju objekata govori koliko drugih objekata referencira objekt, te stoga određuje može li objekt biti uništen prilikom prosljeđivanja zahtjeva za zatvaranje. [4] Svaki imenovani objekt egzistira u hijerarhijskom prostoru imena objekata.

Daljnji izvršni podsustavi su sljedeći:

  • Upravitelj priručnom memorijom (interno ime Cc - od Cache Controller): usko koordinira s upraviteljem memorije, U/I upraviteljem i U/I pogonskim programima kako bi omogućio zajedničku priručnu memoriju za obični datotečni U/I. Jedinstvena je značajka da Windowsov upravitelj priručnih objekata djeluje nad datotečnim blokovima (radije nego nad blokovima uređaja), omogućuje dosljedno djelovanje između lokalnih i udaljenih datoteka, te osigurava određen stupanj koherentnosti s memorijski preslikanim pogledima datoteka, jer su blokovi priručne memorije poseban slučaj memorijski preslikanih pogleda i promašaji priručne memorije su poseban slučaj stranične grješke.
  • Konfiguracijski upravitelj (interno ime Cm - od Configuration manager): implementira Windows registar.
  • U/I upravitelj (interno ime Io): dopušta uređajima komunikaciju s podsustavima u korisničkom načinu rada. Translatira naredbe za čitanje i pisanje iz korisničkog načina rada u IRP-ove za čitanje i pisanje koje pak prosljeđuje pogonskim programima uređaja. Prihvaća U/I zahtjeve datotečnog sustava i translatira ih u pozive specifične za uređaj, te može inkorporirati pogonske programe uređaja niske razine koji izravno barataju sklopovljem kako bi ili čitali ulaz ili pisali izlaz. Također uključuje upravitelj priručne memorije kako bi poboljšao performanse diskova keširanjem zahtjeva za čitanjem i pisanjem na disk u pozadini.
  • Lokalni poziv procedura (LPC) (interno ime Lpc - od Local Procedure Call): omogućuje međuprocesne komunikacijske portove sa semantikom povezivanja. LPC portovi se koriste od strane podsustava u korisničkom načinu rada kako bi komunicirali sa svojim klijentima, od strane izvršnih podsustava za komunikaciju s podsustavima u korisničkom načinu rada, te kao osnovica za lokalni prijenos za MSRPC.
  • Upravitelj memorije (interno ime Mm - od Memory Manager): upravlja zaštitom memorije i straničenjem memorije u i izvan fizičke memorije u sekundarnu pohranu, te ostvaruje općenamjensku alokaciju fizičke memorije. Također ostvaruje parser PE (Portable Executable) izvršnih datoteka i omogućuje njihovo preslikavanje i odpreslikavanje u jedinstvenom, atomičkom koraku.
Počinjući od Windows NT Server 4.0, Terminal Server Edition, upravitelj memorije ostvaruje takozvani sesijski prostor, niz memorije u jezgrinom načinu rada koji je podložan zamjeni konteksta baš kao i memorija u korisničkom načinu rada. Ovo omogućuje paralelno pokretanje višestrukih instanci Win32 podsustava i GDI pogonskih programa u jezgrinom načinu rada, unatoč nedostatcima u početnom dizajnu. Svaki sesijski prostor dijeli više procesa, koji se zajednički naslovljavaju "sesijom".
Kako bi se osigurao stupanj izolacije između sesija bez uvođenja novog tipa objekta, asocijacijom između procesa i sesija upravlja nadglednik sigurnosnih referenci, kao atribut sigurnosnog predmeta (žetona - token), i koji se može izmijeniti samo s posebnim privilegijama.
Relativno nesložena i ad-hoc priroda sesija jest posljedica činjenica da nisu bile dio izvornog dizajna, te da su trebale biti razvijene s minimalnim ometanjem glavne linije razvoja, i to od strane treće ruke (Citrix) kao preduvjet za njihov terminalski poslužitelj proizvod za Windows NT, zvan WinFrame. Počinjući s Windows Vistom, međutim, sesije su konačno postale normalan dio Windows arhitekture. Više nisu konstrukt upravitelja memorije koji ulazi u korisnički način rada neposredno kroz Win32, već su proširene u sveprožimajuću apstrakciju koja utječe na većinu izvršnih podsustava. Ustvari, uobičajena poraba Windows Viste uvijek rezultira u višesesijskoj okolini.[5]
  • Procesno ustrojstvo (interno ime Ps - od Process Structure): rukovodi stvaranjem procesa i niti, te ostvaruje koncept posla (job), skupine procesa koji se mogu poništiti kao cjelina, ili nad kojima se mogu postaviti dijeljena ograničenja (poput najviše zajednički alocirane memorije, ili CPU vremena).
  • PnP upravitelj (interno ime Pnp): upravlja priključi i koristi (Plug and Play) uređajima i podržava detekciju uređaja i instaliranje tijekom podizanja sustava. Također je odgovoran za zaustavljanje i započinjanje uređaja na zahtjev - ovo se može dogoditi kad sabirnica (poput USB ili FireWire sabirnice) dobije novi uređaj i treba podići pogonski program kako bi ga podržala. Većim je dijelom ostvaren u korisničkom načinu rada, u servisu imena servis priključi i koristi, koji rukuje često složenim zadatcima instaliranja odgovarajućih pogonskih programa, obavještavanja servisa i aplikacija po dolasku novih uređaja, te prikaza GUI-ja korisniku.
  • Upravitelj napajanjem (interno ime: Po - od Power Manager): barata događajima vezanim za napajanje (gašenje, pripremno stanje, hibernacija itd.) i obaviještava pogonske programe pod utjecajem posebnim IRP-ovima (IRP-ovi napajanja).
  • Nadglednik sigurnosnih referenci (SRM) (interno ime Se - od Security Reference Monitor): glavno tijelo za nametanje sigurnosnih pravila integralnog sigurnosnog podsustava.[6] Određuje može li se pristupiti objektu ili sredstvu uporabom liste za upravljanje pristupom (ACL-ovima - Access Control List), koji su sami načinjeni od unosa za upravljanje pristupom (ACE-ova - Access Control Entry). ACE-ovi sadrže sigurnosni identifikator (SID) i listu operacija koje ACE daje odabranoj skupini povjerenika - korisničkom računu, grupnom računu, ili prijavnoj sesiji[7] - dozvole (dopusti, odbij, ispitaj) tom sredstvu.[8][9]
  • Upravitelj prozora: odgovoran za iscrtavanje prozora i menija. Upravlja načinom na koji je izlaz iscrtan na zaslonu i upravlja ulaznim događajaima (poput onih s tipkovnice i miša), te prosljeđuje poruke aplikacijama koje trebaju primiti taj ulaz.
  • GDI - sučelje grafičkog uređaja (od Graphics Device Interface): odgovoran je za zadatke kao što su iscrtavanje crta i krivulja, renderiranje fontova i upravljanje paletama. Windows 2000 uvodi nativno alfa miješanje u GDI.

Jezgra[uredi | uredi kôd]

Jezgra sjedi između HAL-a i izvršnih komponenti i omogućuje multiprocesorsku sinkronizaciju, raspoređivanje i otpremanje niti i prijekida, te rukovanje iznimkama i otpremanje iznimki; također je odgovorna za inicijalizaciju pogonskih programa uređaja prilikom pokretanja OS-a, potrebitih za njegov operativni rad. To jest, jezgra obavlja sve zadaće tradicionalne mikrojezgre - strogo razlikovanje između izvršnih komponenti i jezgre je najistaknutija značajka izvornog mikrojezgrastog dizajna, i povijesni dizajn dokumenti dosljedno naslovljavaju komponentu jezgre kao "mikrojezgru".

Jezgra često sučeljuje s upraviteljem procesa [10]. Razina apstrakcije je takva da jezgra nikad ne poziva izravno u upravitelj procesa, već samo obratno (osim za nekolicinu graničnih slučajeva, iako još uvijek ne do razine funkcijske ovisnosti).

Pogonski programi u jezgrinom načinu rada[uredi | uredi kôd]

Windows 2000 rabi pogonske programe u jezgrinom načinu rada kako bi omogućio djelovanje sa sklopovskim uređajima. Svaki od ovih pogonskih programa ima dobro definirane sustavske postupke i nutarnje postupke koje izlaže ostatku operacijskog sustava. Kod u korisničkom načinu rada vidi sve uređaje kao datotečne objekte u U/I upravitelju, iako su samom U/I upravitelju uređaji viđeni kao objekti uređaja, koje pak definira kao ili datotečne, uređajne ili objekte pogonskih programa. Pogonski programi u jezgrinom načinu rada postoje u tri sloja: pogonski programi najviše razine, pogonski programi srednje razine i pogonski programi niske razine. Pogonski se programi najviše razine, poput pogonskih programa datotečnog sustava za FAT i NTFS, pouzdaju na pogonske programe srednje razine. Pogonski se programi srednje razine sastoje od funkcijskih pogonskih programa - ili glavnog pogonskog programa za uređaj - koji su opcionalno umetnuti između filterskih pogonskih programa niske i visoke razine. Funkcijski se pogonski program tad pouzdaje na sabirnički pogonski program - ili na pogonski program koji servisira sabirnički upravljač, prilagodnik, ili most - koji može imati opcionalni filtrirajući pogonski program sabirnice koji sjedi između samog sebe i funkcijskog pogonskog programa. Pogonski se programi srednje razine pouzdaju na pogonske programe najniže razine. Windows Driver Model egzistira u sloju srednje razine. Pogonski programi najniže razine su ili naslijeđeni Windows NT pogonski programi koji izravno upravljaju uređajem, ili su od PnP sklopovske sabirnice. Ovi pogonski programi niže razine izravno upravljaju sklopovljem i ne pouzdaju se na druge uređaje.

Sloj za apstrakciju sklopovlja[uredi | uredi kôd]

Windows 2000 sloj za apstrakciju sklopovlja, ili HAL (od engl. Hardware Abstraction Layer), je sloj između fizičkog sklopovlja računala i ostatka operacijskog sustava. Oblikovan je kako bi sakrio (tj. asptrahirao) razlike u sklopovlju i stoga omogućio dosljednu platformu na kojoj se aplikacije mogu izvoditi. HAL uključuje sklopovski specifičan kod koji upravlja U/I sučeljima, prijekidnim upravljačkim sklopovima i višestrukim procesorima.

Posebice, "sklopovska apstrakcija" ne uključuje apstrakciju instrukcijskog skupa, koji pak potpada pod općenitiju koncepciju prenosivosti. Apstrahiranje instrukcijskog skupa, kada je potrebno (poput rukovanja nekoliko inačica x86 instrukcijskog skupa, ili za emuliranje nedostajućeg matematičkog koprocesora), je obavljeno od strane jezgre, ili putem platformske virtualizacije.

Unatoč svojoj svrsi i označenom mjestu unutar arhitekture, HAL nije sloj koji u potpunosti leži ispod jezgre na način na koji jezgra leži ispod izvršnih komponenti: sve poznate implementacije HAl-a na neki način ovise o jezgri, pa čak i o izvršnim komponentama. Izvedbeno, ovo znači da jezgra i HAL dolaze u paru, posebno inženjerirani za zajednički rad.

Bilješke i reference[uredi | uredi kôd]

  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".
  5. ^ Microsoft. "Active Directory Data Storage".
  6. ^ MSDN. Trustee definition.
  7. ^ Siyan, Kanajit S., 2000.
  8. ^ MSDN. ACE definition.
  9. ^ Inside Microsoft Windows 2000 (Third Edition). Microsoft Press. Pages 543–551.
  10. ^ Microsoft. "Impact of Session 0 Isolation on Services and Drivers in Windows Vista".
Reference
  • Finnel, Lynn (2000). MCSE Exam 70-215, Microsoft Windows 2000 Server. Microsoft Press. ISBN 1-57231-903-8.
  • Russinovich, Mark. Listopad 1997. Inside NT's Object Manager. Windows IT Pro. Inačica izvorne stranice arhivirana 17. svibnja 2013. Pristupljeno 2. srpnja 2007.
  • Microsoft. "Active Directory Data Storage". Retrieved May 9, 2005.
  • Salomon, David; & Russinovich, Mark E. 2000. Inside Microsoft Windows 2000 (Third Edition). Microsoft Press. ISBN 0-7356-1021-5. Inačica izvorne stranice arhivirana 23. ožujka 2005. Pristupljeno 2. srpnja 2007.CS1 održavanje: više imena: authors list (link)
  • Siyan, Kanajit S. (2000). "Windows 2000 Professional Reference". New Riders. ISBN 0-7357-0952-1.

Vanjske poveznice[uredi | uredi kôd]