Előadás_#10. 1. Az NT kialakulása A Windows NT (New Technology) a Microsoft cég új generációs, eredetileg vállalati felhasználókat megcélzó operációs rendszerének az elnevezése. A Windows NT operációs rendszerrel a Microsoft a DOS-, illetve Windows rendszereket kívánta felváltani. Szoftver fejlesztés azonban nem csak a Microsoft-nál történt, az IBM már 1987. áprilisában bemutatta az OS/2 nevű operációs rendszerének első verzióját. Igazi siker azonban csak az 1992-ben bemutatott valódi 32 bites OS/2 2.0 lett (mely képes volt Windows 3.1-es programok futtatására is), majd az 1994-ben bemutatott OS/2 3.0 Warp lett, mely hatékony és konzisztens rendszer volt. Egy többé kevésbé kényszerű együttműködés után a Microsoft 1990-ben szakított az IBM-mel és 1993. júliusában bemutatta saját 16 bites Windows NT 3.1 nevű operációs rendszerét. Ezek után a Microsoft fejlesztései is a 32 bites irányba indultak el, 1996. júliusában került bemutatásra a Windows 4.0. Az első említésre méltó 64 bites rendszer a Windows XP 64 bit volt, 2003 márciusában. A Microsoft asztali- és szerver operációs rendszerei ma is az NT technológiára épülnek. Az eddig megjelent NT alapú Windows verziók:
Előadás_10
Verzió 3.1 3.5 3.51 4.0
Build 528 807 1057 1381
5.0
2195
5.1
2600
5.2
3790
6.0
600x
6.1
760x
6.2
9200
6.3
9600
10.0
10240
Megnevezés Windows NT 3.1 Windows NT 3.5 Windows NT 3.51 Windows NT 4.0, 32 bit Windows 2000 Windows 2000 Datacenter Windows XP Windows XP, 64 bit Windows Server 2003 Windows Server 2003 R2 Windows Vista Windows Server 2008 Windows 7 Windows Server 2008 R2 Windows Home Server 2011 Windows 8 Windows Server 2012 Windows 8.1 Windows Server 2012 R2 Windows 10
Megjelenés 1993.07.27 1994.07.21 1995.05.30 1996.07.29 2000.02.17 2000.09.26 2001.10.25 2003.03.28 2003.04.24 2005.12.06 2006.11.30 2008.02.27 2009.10.22 2009.11.22 2011.04.06 2012.10.26 2012.09.04 2013.10.18 2013.10.18 2015.07.29 -1-
A Windows NT megalkotásakor a Microsoft két alapvető szempontot kellet hogy figyelembe vegyen. Egyrészt az aktuális piaci igényeket, követelményeket ki kell elégíteni (ez lássuk be nem minden verziónál ment zökkenőmentesen), másrészt a továbbfejlesztési lehetőségek, és a saját (a piacot irányító, befolyásoló) célkitűzések is meg kell hogy jelenjenek a termékben. 2. Az első Windows NT kiadássokkal szemben támasztott követelmények Valós 32 bites (csak az NT 4.0 óta), bármikor megszakítható, preemptív, újrahívható (reentrant) [a rendszerhívásokat több alkalmazás is meghívhatja egyszerre, és ezek nem blokkolódnak, akkor sem, ha már valakit éppen kiszolgál az adott rendszerhívás] és virtuális memóriakezelést használó operációs rendszer megvalósítása a cél. Fusson különböző hardver platformokon. Fusson multiprocesszoros környezetben. Legyen skálázható az összes rendelkezésre álló erőforrás viszonylatában. Fusson elosztott hardver környezetben. Legyen alkalmas a 16 bites MS-DOS és Windows 3.1-es alkalmazások futtatására. (Ez a 64 bites verziók alatt már közvetlenül nem megoldható.) Teljesítse a POSIX 1003.1 szabványt. [Portable Operating System for UniX / formális neve: EEE1003, hivatalos elnevezése ISO/IEC 9945). Teljesítse az ipari környezetnek megfelelő biztonsági szabványokat. Használjon UNICODE-ot a karakterek és stringek ábrázolására. [A UNICODE a karakterek gépi ábrázolásának szabványa. Mivel minden karaktert 16 biten ábrázol, így szinte minden nyelv ábécéjének karakterkészletét lehetséges azonos kódolással használni. A UNICODE így lehetővé teszi az alkalmazások nyelvterülettől független elkészítését. Az első olyan, Microsoft által gyártott operációs rendszer, amely binárisan is egységes az egész világon, a Windows 2000 volt.] Az NT 4.0 a belső karakterábrázolásában már UNICODE-ot használt. Azonban az NT 4.0 alatt futó alkalmazások nagy része még nem használt UNICODE-ot, így a string változókat paraméterként átadó Win32 API-ban (Application Programming Interface / Alkalmazásprogramozási interfész) a definiált függvényeknek két változata létezik: széles: 16 bites UNICODE karakteres keskeny: 8 bites ANSI karakteres Előadás_10
-2-
A 8 bites ANSI függvények megvalósítása egyszerű: először át kell kódolni a string paramétereket 16 bites UNICODE-ba, majd meg kell hívni az adott függvény UNICODE-os változatát. 3. A Microsoft célkitűzései A Microsoft az NT alapú operációs rendszerek minőségének, korszerűségének és továbbfejleszthetőségének biztosítása érdekében jelölték meg a következő célokat: Az NT kódja legyen kiterjeszthető, vagyis könnyen továbbfejleszthető – azaz csak részben nyílt, hiszen maga a kód nem publikus. A kód legyen alkalmas az új hardver platformokon történő futtatásra is. A rendszer legyen több szempontból is megbízható, robusztus. o két program futása ne befolyásolja egymást o a rendszer összeomlást el kell kerülni o a belső komponensek együttműködése zökkenőmentes legyen Megfelelő kompatibilitás a meglévő rendszerekkel a felhasználói interfész, és alkalmazásprogramozási interfész (API) szintjén is. A kompatibilitás két alapvető szintje: o a Microsoft korábbi operációs rendszerei: MS-DOS, Windows 3.1 o a nem Microsoft által készített, azonban széles körben elterjedt rendszerek: OS/2, UNIX, NetWare, stb. A rendszer a hatékonysága legyen független a hardverkörnyezettől, vagyis bármelyik hardver platformon kit tudja használni a rendelkezésre álló erőforrásokat. 4. A Windows NT felépítésének fő jellemzői A Windows NT felépítése réteges szerkezetű, alrendszereinek működése a kliens-szerver kiszolgálás alapú. Az egyes rétegek interfészeken igénybevételével kommunikálnak. Az eredeti elképzelés szerint az NT fejlesztői a mikrokernel használata mellett döntöttek, de ahhoz, hogy a legtöbb szolgáltató folyamat felhasználói (user) módban futhasson, a hibrid kernel megfelelőbbnek bizonyult. A szolgáltatások egy részét nem célszerű és nem is hatékony (főleg a gyakori és nagy számú környezetváltás miatt) felhasználói módba kényszeríteni. Azon szolgáltatásokat, melyek intenzíven használják a hardvert és futásuk gyorsaságára az egész rendszer teljesítménye érzékeny, célszerű mindenképpen kernel módban futtatni. (Ilyen például a cache menedzsment, a címtartomány menedzsment, a szál ütemezés, a folyamatok közti kommunikáció, a virtuális memória kezelés, az Előadás_10
-3-
objektumkezelő és biztonsági alrendszer, vagy a WIN32-es alrendszer grafikus szolgáltatásokat nyújtó részei, stb.) A Windows NT fejlesztésekor alapvető volt az objektumorientált szemlélet. A fejlesztők a rendszert funkciójukban pontosan definiált objektumokból építették fel. Az objektumok közti kommunikáció előre definiált interfészeken igénybevételével történik. Az NT korai verzióiban, minden szándék ellenére, – a hardverközeli programozás szüksége miatt – csak az alábbi három objektumorientált tulajdonságot sikerült maradéktalanul megvalósítani: adatrejtés az operációs rendszer objektumai csak saját adataikat érhetik el interfész-használat az objektumok előre definiált interfészek segítségével kommunikálnak hierarchikus objektum szerkezet kernel objektumok, executive objektumok A következő objektumorientált tulajdonságokat viszont a Windows NT nem valósítja meg: Polimorfizmus Azonos néven különböző objektumokat érhetünk el. Az azonosító környezetétől függ, hogy melyik objektumra hivatkozunk az adott azonosítóval. Jó példa a polimorfizmusra az, amikor azonos névvel, de különböző paraméterlistával definiálunk függvényeket egy objektumon belül. Ez esetben az aktuálisan használt paraméterek típusától függ, hogy melyik funkciót érjük el. Öröklődés (Az NTFS miatt az öröklődés részben megvalósul!) Az objektumok hierarchikusan (is) származtathatók. A származtatott objektum örökli, és így maga is használhatja a szülő megfelelően definiált adatelemeit illetve függvényeit vagy attribútumait. Dinamikus adattípus kötés Lehetőség van adattípussal paraméterezett objektumok definiálása is.
Előadás_10
-4-
5. A Windows NT felépítésének komponensei
HAL A HAL (Hardware Abstraction Layer) az aktuálisan használt hardvert teljesen elfedő, legalacsonyabb szoftverréteg az operációs rendszerben. (A BIOS vagy UEFI – mint szoftverréteg – technikailag az operációs rendszer és a hardver között helyezkedik el.) Az operációs rendszer HAL fölötti rétegei tehát csak a HAL-on keresztül érhetik el a hardvert. Minden NT alatt használható CPU-hoz egyedi HAL-réteg készül, vagyis a HAL a használt CPU típusától függ. Az telepítő CD-n így számos HAL-t találhatunk az NT CD \i386-os alkönyvtárában. Érdekesség, hogy a Vista előtti rendszerekben telepítéskor választódott ki, hogy milyen típusú HAL kerül fel. Ezért se volt biztos, hogy egy másik gépbe átrakva a HDD-t a Windows elindul. Vista óta ezt már megoldották. A HAL feladata, hogy CPU független szolgáltatásokat nyújtson a többi réteg számára. Azonos architektúra esetén – vagyis például az összes x86-os processzoron futó NT rendszer között – csak a HAL-ban van különbség, a többi rétegben nincs. Nyilván ugyanez a helyezet x64 vagy RISC esetében is. Feladatát tekintve tehát a HAL egy olyan – az aktuális hardverre támaszkodó – virtuális gépként dolgozik, melynek funkcionalitása minden rendszerben azonos. (Az 1968-ban készült "2001 Űrodisszeia" című filmben a HAL9000-es nevében a HAL rövidítés ez volt: Heuristically programmed ALgorithmic computer) Előadás_10
-5-
Kernel A kernel az operációs rendszer alapfunkcióit nyújtó komponense (pl. ütemezés, megszakításkezelés). A kernel a rendszer állandóan memóriában levő, kernel (védett) módban futó része. A kernelben is előfordulnak hardver specifikus kódrészletek, hisz például a környezetváltás megvalósításához ismerni kell, hogy milyen regiszterei vannak a CPU-nak. Azonban amíg a HAL a CPU típusától függ, addig a kernel csak a CPU architektúrájától. Ez azt jelenti, hogy azonos architektúrájú CPU-k esetén a kernel is azonos. Például két x86-os rendszerben a kernelréteg is azonos, függetlenül attól, hogy konkrétan milyen CPU-t használunk. Nyilván ugyanez a helyezet x64 vagy RISC esetében is A kernelre (illetve a device driverek rétegre) épülő további komponensek már hardverfüggetlenek, azaz a rendszer további komponensei már gyakorlatilag hordozhatóak. Az NT hordozhatósága ebből következően úgy valósul meg, hogy a hardvert bármely CPU esetében hasonló interfésszel elérhető szoftverrétegek fedik el. Az első két szoftverréteg a HAL és a kernel. A kernelben kerülnek megvalósításra a CPU architektúrától függő funkciók (például a környezetváltás), míg a HAL az azonos architektúrájú CPU-knak az egyedi modelltől függő funkcióit tartalmazza. Más szempontból is (részben) hordozható az NT, hiszen – a UNIX rendszerekhez hasonlóan – hordozható programnyelven íródott. A kód túlnyomó része C programnyelvben készült, de a hardver közvetlen kezelését végző (például a megszakítás kezelés), illetve a rendszer teljesítményét nagymértékben befolyásoló (például a környezetváltás) részek már Assembly nyelven készültek. A kernel feladata – a rendszer további komponenseinek a hardvertől történő függetlenítésén túl – az, hogy az operációs rendszer többi komponense számára egyszerű, jól definiált alapmodulokat (ún. primitíveket) biztosítson. A primitívek a következő funkciókat valósítják meg: thread (szál) ütemezés trap-kezelés, megszakítás kezelés multiprocesszor-ütemezés kernel objektumok kezelése A kernel objektumok egyszerűbbek, mint a többi réteg objektumai. A gyors kezelhetőség érdekében a kernel ugyanis nem végez ellenőrzést az egyes objektumok elérésekor, hanem abból a logikából indul ki, hogy a rendszer tagjai helyesen használják az objektumokat. Előadás_10
-6-
Készülék meghajtók (device driverek) A device driverek a I/O-alrendszer és a hardver közötti kapcsolatot biztosítják, oly módon, hogy a hardvert nem közvetlenül, hanem a HAL rétegen keresztül érik el. Így lehetővé válik, hogy a device driverek akár forráskódjukban is hordozhatók a különböző hardver architektúrák között, és akár binárisan is hordozhatók azonos architektúrájú, de különböző típusú CPU-k esetén. A device driverek négy típusát különböztetjük meg: Hardver driverek, melyek a hardver egységek elérését biztosítják, közvetlenül az eszközök I/O csatornáit érve el. (pl. BUS driverek: PCI, USB, SATA) Fájlrendszer driverek, melyek a fájlrendszerek elérését biztosító igényeket dolgozzák fel, I/O műveletekké alakítva azokat. Szűrő típusú device driverek, melyek az NT által használt réteg szerkezetű device driver struktúra lehetőségeit kihasználva speciális többletfunkciókat valósítanak meg. A szűrő típusú device driverek általában a magas szintű (például fájlrendszer driverek) és a I/O-kéréseket kezelő alacsony szintű driverek közé ékelődnek. (például RAID funkciók, szoftveres hibatűrés a lemezkezeléshez) Hálózat elérését biztosító device driverek, melyek a hálózati kéréseket a megfelelő konverzió közbeiktatásával továbbítják. Executive (az utolsó komponens a kernel mód-ban) Az executive az NT operációs rendszer magas szintű alrendszereinek szolgáltatásait (memóriakezelés, biztonság) megvalósító réteg. Az adatokat objektumokban tárolja, melyeket csak leírókkal (handle) lehet elérni, megfelelően definiált interfészeken keresztül. Önálló részei a következők: folyamat- és szálkezelő virtuálismemória-kezelő biztonsági alrendszer (monitor) cache kezelő I/O-rendszer kezelő Az executive réteg tartalmazza az (egyébként user módban futó) NTDLL.DLL által definiált függvények hívásainak megvalósítását, valamint biztosítja az operációs rendszer belső objektumai közötti kommunikációt. Az executive réteg legfontosabb feladata az LPC (Local Procedure Call / Lokális eljáráshívás) szolgáltatás megvalósítása. Az LPC az NT operációs rendszer IPC (Inter Process Communication / Folyamatok közötti kommunikáció) eszköze. Azaz csak az Előadás_10
-7-
NT belső folyamatai közötti kommunikáció biztosítására szolgál. Az LCP segítségével egy felhasználói objektum egy másik felhasználói objektum adott függvényét hívhatja meg. Az LPC teszi lehetővé, hogy az egyes alkalmazások a hozzájuk tartozó alrendszer(ek) szolgáltatásait igénybe vehessék. Az executive réteg továbbá tartalmaz run-time library függvényeket és különböző támogató funkciókat megvalósító függvényeket is a rendszerfolyamatok és a szolgáltatások részére.
NTDLL.DLL (itt kezdődnek a user módú komponensek) Az NTDLL.DLL az a dinamikusan kapcsolódó (kölcsön)könyvtár (Dinamically Linked Library / Dinamikusan kapcsolódó [kölcsön]könyvtár), amin keresztül a felhasználói módú folyamatok is elérhetik az operációs rendszert. Mivel az egyes objektumok között a kapcsolattartás LPC (Local Procedure Call / Lokális eljáráshívás) hívások segítségével valósul meg, így minden felhasználói objektum az NTDLL.DLL-en keresztül éri el a környezetét. Az NTDLL.DLL segítségével megvalósított működés abszolút egyszerű. Ha egy hívás érkezik, ellenőrizni kell a hívás paramétereit, és végre kell hajtani egy user–kernel módváltást, ami után az NT már meghívhatja a kért funkciót megvalósító függvényét. NTDLL.DLL tartalmilag az executive által kiajánlott függvényeknek megfelelő függvény csonkokból áll, melyek: ugyanolyan a paraméterezésüek, mint az executive-ban lévő párjuk elvégzik az átváltást védett módba átadják a hívást a system service dispatcher-nek az ellenőrzik a hívási paramétereket, majd meghívja az executive függvényt Ezen kívül van benne további számos függvény az alrendszerek támogatására, pl. memória kezelés (heap) image loader NTDLL.DLL-nek ezen kívül létezik jónéhány nem dokumentált függvénye is: Nem dokumentált NTDLL.DLL függvények (Angol nyelvű)
Előadás_10
-8-
Rendszerfolyamatok A rendszerfolyamatok közé az NT operációs rendszer a független felhasználói folyamatként megvalósító, önálló folyamatokat sorolja. Nyilván ez esetben user módban futó folyamatokról van szó, mégis a rendszerfolyamatok olyan alapvető részei az operációs rendszernek, hogy nélkül az NT nem is képes működni. SMSS (Session Manager SubSystem / Munkamenet kezelő alrendszer). Az SMSS folyamat a rendszer indításakor kerül létrehozásra, és a továbbiakban ez a folyamat felelős az alkalmazások elindításáért. Az SMSS indítja el az egyes alrendszereket, ha futásukra szükség van és még nem futnak; valamint biztosítja a kapcsolatot a debugger és az általa futtatott applikáció között; továbbá biztosítja a környezeti változók definiálását és elérését. Logon A felhasználók ki- és beléptetését végző folyamat, melyet bármelyik SAS (Secure Attention Sequence / Biztonsággal felügyelt programszakasz) billentyűkombináció (alapesetben az CTRL-ALT-DEL) aktivizál. Beléptetéskor a felhasználói azonosító (username) és a jelszó (password) kombinációját az önálló folyamatként futó LSASS-hez (Local Security Authentication Server / Helyi biztonsági jogosultság ellenőrző ) továbbítja ellenőrzésre. Ha az azonosítás sikeres, a logon elindítja a userinit.exe programot, ami beállítja a felhasználó által definiált környezetet, és elindítja a felhasználóhoz rendelt shell keretprogramot (alapesetben ez az explorer.exe). Service Controller A szolgáltatások indításáért és leállításáért felelős folyamat. Egyszóval a rendszerfolyamatok felelősek azért, hogy miután elindult az operációs rendszer a felhasználók be tudjanak lépni, és el tudják kezdeni az erőforrások hatékony használatát. Szolgáltatások Az NT-ben szolgáltatásnak hívják azokat a kliens-szerver modellben szerverként működő szolgáltató folyamatokat, amelyek a kliens programok (felhasználói vagy akár rendszer programok) számára az operációs rendszer lehetőségeire építve többletszolgáltatásokat nyújtanak. Létezik például RPC (Remote Procedure Call / Távoli eljáráshívás) szolgáltató, különböző protokollokat megvalósító hálózati kapcsolatot biztosító szolgáltatók, vagy az NT-specifikus eseménynaplózó (Event Logger) szolgáltató. (Megjegyzendő, hogy egy-egy szolgáltatást gyakran nem egyetlen folyamat valósít meg.) Előadás_10
-9-
A szolgáltatások a rendszerfolyamatokhoz hasonlóan felhasználói módban futó folyamatok. Lényeges különbség azonban, hogy míg a rendszerfolyamatok szükséges részei a rendszernek, addig a szolgáltatásokat megvalósító folyamatok futása nélkül is képes működni az NT. A szolgáltatások a Service Manager segítségével elindíthatók és leállíthatók a rendszer működése közben. Ezek jellemzően olyan programok, amiknek akkor is kell futnia, ha éppen nincs felhasználó bejelentkezve, aki elindítaná őket. Pl. ha elindult a gép, de nem jelentkezett be rajta senki, akkor is kapcsolódni tudjunk a fájlmegosztásaihoz (Server nevű szolgáltatás) vagy be tudjunk távolról lépni rá (Terminal Services szolgáltatás). A szolgáltatásokat megvalósító programok egyszerű Win32-es alkalmazások, azzal a különbséggel, hogy együttműködnek a Service Conroller (SERVICES.EXE) folyamattal. Az regisztrálja őket, és annak segítségével lehet őket elindítani, leállítani, szüneteltetni stb. A rendszerben elérhető szolgáltatásokat és azok aktuális státusát a felhasználói felületről is megnézhetjük és változtathatjuk a Control Panelen a Services ikonra kattintva. (Egy szolgáltatásnak így három elnevezése is lehetséges: az első az a név, ahogy a szolgáltatás a Control Panel Services alpontján keresztül elérhető, a másik az a név, amin az a Registry-ben szerepel, a harmadik pedig az a név, amely a szolgáltatást megvalósító futtatható program neve.) Alrendszerek Az NT alkalmas különböző típusú applikációk futtatására. Ezt az alrendszerek segítségével valósítja meg. Három alrendszere van: Win32, POSIX, és az OS/2. A Win32 alrendszer kitüntetett abban a tekintetben, hogy a Win32 alrendszer nélkül az NT nem tud futni. A másik két alrendszer opcionális, csak abban az esetben kezdenek futni, amikor az adott alrendszerhez tartozó alkalmazást akar egy felhasználó elindítani. Az alrendszerek elsődleges feladata, hogy a hozzájuk tartozó alkalmazások futásához szükséges szolgáltatásokat nyújtsák. Minden alrendszer a hozzá tartozó alkalmazásokat kontrollálja. A három különböző alrendszer nem csak különböző nevű függvényeket jelent (fopen vagy CreateFile), hanem teljesen eltérő szemantikájuk is van. (pl. a POSIX esetén a fájlnévben számít a kis és nagybetű, Windows esetén nem. A POSIX illetve a Windows-os szálnak más tulajdonságaik vannak. További érdekesség, hogy a Windows 2000 óta kikerült az OS/2, a Windows XP óta pedig a POSIX is!) Előadás_10
- 10 -
Minden alrendszerhez tartozik egy ún. alrendszer DLL, amin keresztül az alrendszerhez tartozó alkalmazás az NT szolgáltatásait elérheti. Ez tehát a alkalmazásprogramozási interfész (API), ami az egyes alrendszerekhez tartozó applikációk számára elérhető. Ezt azért fontos kiemelni, mert ez az a publikált, jól definiált felület, amit minden program használhat. Az összes többi interfész (például NTDLL.DLL) nem publikus interfész. Egy API az gyakorlatilag csak egy interfész, tehát nem helyes azt mondani, hogy az API kiszolgál kéréseket. Kell lennie mögötte egy komponensnek, aki megvalósítja az API-ban definiált függvényeket, és az a komponens az, aki nyújtja az API-ban definiált szolgáltatást. Az egyes alrendszerekhez tartozó API-k lényegesen különböznek egymástól. A legszélesebb lehetőségeket a Win32 API biztosítja. (például ablakozás, szálak kezelése stb.) Fontos tudni, hogy egy applikáció csak egy alrendszerhez tartozhat, nem keveredhetnek egymással egy applikáción belül különböző alrendszerhez tartozó hívások. POSIX alrendszer A POSIX alrendszer szigorúan a POSIX 1003.1-es szabványban rögzített tulajdonságokat valósítja meg. Így lehetőség van új folyamatok létrehozására (fork), fájlok több néven történő elérésére (hard linkek definiálására), folyamatok közötti kommunikációra (IPC), folyamatok kezelésére, valamint karakteres I/O kezelésre. Ezzel szemben nincs lehetőség szálak (thread) létrehozására, ablakkezelésre, távoli eljáráshívásra (RPC), socketek (logikai csatlakozások) használatára. Win32 alrendszer (ami nélkül nem fut az NT) A Win32 alrendszer futtatja nemcsak a 32 bites alkalmazásokat (vagyis azokat, amelyek Win32 API-t használnak), hanem a 16 bites és DOS-alkalmazásokat is. A Win32 alrendszer nem csak abban különbözik a többitől, hogy nélküle nem futhat az NT, hanem abban is, hogy az alrendszer egy része kernel módban fut. (WIN32K.SYS) Ez a rész valósítja meg a grafikus képernyő-kezelési funkciókat. (A USER32.DLL, GDI.DLL, KERNEL32.DLL, ADVAPI.DLL könyvtárakban definiált funkciókat.) Ez a rendszer hatékonysága miatt került ide, mert így módváltás nélkül lehetséges az executive, illetve kernel szolgáltatások (függvények) elérése.
Előadás_10
- 11 -
A Win32 API hívások háromfélék lehetnek a megvalósításuk helye szerint: Az alrendszer DLL-ben van megvalósítva. Ezek egyszerű funkcionalitású függvények, a végrehajtásukhoz nincs szükség a rendszer más részeinek elérésére. Az alrendszerben vannak megvalósítva. A hívást ebben az esetben az alrendszer DLL továbbítja az NTDLL.DLL felé, ami az executive réteg LPC szolgáltatását igénybe véve, eljut a Win32 alrendszerhez, ami a kérést teljesíti. Az NT más, kernel módban futó rétege valósítja meg a hívást. A hívás ebben az esetben is az executive réteghez kerül, ami továbbítja a megfelelő kernel réteg felé. A WIN32 API-ban számos grafikus funkció is van definiálva. A grafikus eszközök és a nyomtató szabványos felületen történő kezelését a GDI (Graphical Device Interface / Grafikus eszközcsatoló), illetve a hozzá tartozó GDI32.DLL (WIN32 API része) teszi lehetővé. Az ebben definiált funkciók a WIN32 alrendszer kernel módú részében (WIN32K.SYS) vannak megvalósítva. Ezek a rutinok intézik az eszközökhöz tartozó device driverek meghívását. Egy-egy GDI32.DLL-ben definiált grafikus funkcióhoz az adott eszköztől függően akár több device driver is tartozhat.
Előadás_10
- 12 -