Russinovich Mark

PRIMEChANIEProtsess a Windows alrendszer nevezett Csrss.exe mert minden Windows NT alrendszer eredetileg úgy végezni, mint folyamok egyetlen rendszerre kiterjedő folyamatot. Amikor a POSIX alrendszerek és az OS / 2-ek a saját folyamatokhoz lettek hozzárendelve, a Windows alrendszer folyamatának fájljája megegyezik.

Nem lehet összekeverni a különböző alrendszerek funkcióinak hívásait. Más szóval, a POSIX alkalmazások csak a POSIX alrendszer által exportált szolgáltatásokat hívhatják meg, és a Windows alkalmazások csak a Windows alrendszer által exportált szolgáltatások. Hogyan is, hogy ezt a korlátozást csak az egyik oka, hogy a POSIX alrendszer az eredeti, amely végrehajtja nagyon korlátozott a funkciók (csak POSIX 1003,1), nem vált hasznos közegben átcsoportosításra bele UNIX-alapú alkalmazások.
Már elmondtuk, hogy az egyéni alkalmazások nem tudják közvetlenül hívni a Windows rendszer szolgáltatásait. Ehelyett elérik az alrendszerek DLL-jét. Ezek a DLL-ek dokumentált interfészt biztosítanak a programok és az általuk hívott alrendszer között. Tehát a Windows alrendszer DLL-je (Kernel32.dll, Advapi32.dll, User32.dll és Gdi32.dll) implementálja a Windows API funkcióit. A POSIX alrendszer DLL (Psxdll.dll) implementálja a POSIX API-t.

Ez azt mutatja, hogy a Notepad egy GUI program, és a Cmd egy konzolprogram vagy szöveges módú program. Bár az Exetype segédprogram kimenete két különböző alrendszert jelent a GUI és a konzol programok számára, valójában csak egy alrendszer van a Windows-ban. Ezenkívül a Windows nem támogatja az Intel 386 processzort (vagy 486-ot, ha bármilyen értékű) - az Exetype által kibocsátott üzenetek szövegét egyszerűen nem frissítették.
Ha az alkalmazás az alrendszer egyik DLL-funkcióját hívja, akkor az egyik lehetséges.
(o) A funkció teljes mértékben az alrendszer DLL-ben található felhasználói módban valósul meg. Más szóval, a környezet alrendszerének folyamatába nem küldünk üzeneteket, és nincs hívás a Windows végrehajtó rendszerének szolgáltatásaira. Miután végrehajtotta a funkciót felhasználói módban, az eredményt visszaadja a programnak, amelyik hívta. Példák ilyen funkciók lehetnek GetCurrentProcess (mindig visszatér -1, az érték alapján határozzák meg, hogy a jelenlegi folyamat minden funkcióban kapcsolatos folyamatok) és GetCurrentProcessId (process ID során nem változik annak élettartamát, ezért lehet beszerezni a gyorsítótárból, amely lehetővé teszi a kerülje a kernel módba való kapcsolást).
(o) A funkció egy vagy több hívást igényel a Windows operációs rendszerhez. Például a ReadFile és a WriteFile funkciók a belső, nem dokumentált I / O szolgáltatásokra vonatkoznak - vagyis az NtReadFile és az NtWriteFile fájlokra.
(o) A függvény bizonyos műveleteket igényel a környezeti alrendszer folyamatában (a felhasználó módban futó folyamatok felelősek az ellenőrzésük alatt futó kliensalkalmazások szervizéért). Ebben az esetben a környezet alrendszer egy ügyfél-kiszolgáló kérést ad ki egy művelet elvégzésének követelményével, és az alrendszer DLL várakozik a megfelelő válaszra, mielőtt a vezérlő visszaküldi a hívó programot.
Néhány funkció, mint a CreateProcess és a CreateThread, mind a második, mind a harmadik elem végrehajtását igényli.
Bár a Windows keretrendszer számos független környezet alrendszert támogat, gyakorlati szempontból kényelmetlen lenne minden egyes alrendszerbe beilleszteni a kódot az ablakok feldolgozásához és az I / O megjelenítéséhez. Ez rendszerfunkciók megkettőzéséhez vezet, és végül negatívan befolyásolja a rendszer hangerejét és teljesítményét. Mivel a fő alrendszer a Windows volt, a fejlesztők úgy döntöttek, hogy ezeket az alapvető funkciókat helyezték be. Tehát az I / O megjelenítéséhez más alrendszerek okozzák a megfelelő Windows szolgáltatásokat. (By the way, figyelve az alrendszer típusát a fájlok fejlécében, látni fogják, hogy valójában a Windows futtatható fájlok.)
Most ismerkedjünk meg a környezet minden egyes alrendszerével.

Windows alrendszer

Tehát mi marad a Windows alrendszer folyamatának abban a részében, amely felhasználói módban működik? Mivel a konzolprogramok nem rajzolják át az ablakokat, a konzol és a szövegablakok megjelenítéséhez és frissítéséhez szükséges műveleteket a Windows ezen része végzi el. A tevékenységének megnézése nem nehéz: csak nyissa meg a parancsablakot, és húzza át rajta egy másik ablakot. Láthatja, hogy a Windows alrendszer folyamata elkezdi költeni a CPU időt, átírva a konzol ablakot. A konzol ablakok támogatása mellett a Windows-funkcióknak csak egy kis része küld üzenetet a Windows alrendszer folyamatába. Ezek közé tartoznak azok a függvények, amelyek felelősek a folyamatok és szálak létrehozásáért és megszüntetéséért, levélkiosztás a hálózati meghajtókhoz, ideiglenes fájlok létrehozása. Általában a Windows alkalmazás ritkán kapcsolja (ha minden kapcsoló) a kontextust a Windows alrendszer folyamatához.

Vajon a Windows stabilitása a USER és a GDI kernel módú fordításától szenved?


Néhányan kíváncsiak, vajon a rendszer stabilitása nem fogja lefordítani a kód ilyen nagy részét kernel módba. A rendszer stabilitásának csökkentése minimális. A tény az, hogy mielőtt a Windows NT 4 (valamint most), mint egy access violation hibát (access violation) során a Windows felhasználói módú alrendszer (a Csrss.exe) eredményezte a rendszer összeomlik, mert a Windows-alrendszer folyamat volt és marad létfontosságú fontos az egész rendszer működéséhez. Mivel a képernyőn megjelenő ablakokat meghatározó adatszerkezetek ebben a folyamatban vannak, a halál a felhasználói felület megsemmisítéséhez vezet. Azonban még ha a Windows funkcionál, így a szerver nélkül egy interaktív folyamat rendszer nem működhetne nélkül Csrss, mert kiszolgáló folyamatok néha használja ablak üzeneteket, hogy ellenőrizzék a belső állapotát az alkalmazás. Így a Windows hibák, mint a hozzáférés megsértése ugyanazt a kódot csak akkor fut kernel módban, csak gyorsan vezet összeomlás - kivétel magmódban szükség megszüntetése a rendszer.
Elméletileg azonban van egy másik veszély. Mivel ez a kód kernel módban fut, hiba (pl. Helytelen mutató használatával) károsíthatja a védett rendszermag-adatstruktúrákat. A Windows NT 4 előtt ez hozzáférési jogsértést eredményezhet, mivel a rendszermag módú oldalak írásai a felhasználói módból nem engedélyezettek. De az eredmény a rendszer összeomlása lenne. Most, amikor a kernel módban végrehajtja a kódot, a rossz mutatóhoz tartozó memória bármelyik oldalára történő írása nem feltétlenül okoz azonnali rendszerösszeomlást. Ho, ha egyes adatszerkezetek megsérülnek, az ütközés valószínűleg megtörténik. Ugyanakkor fennáll annak a kockázata, hogy ilyen mutató miatt az adatpuffer nem sérül, hanem a memóriapuffer, és ez a felhasználói programot vagy a helytelen adatokat írja a lemezre.
Még egy negatív következménye a grafikus illesztőprogramoknak a kernel módba való átvitelére. Korábban a grafikus illesztőprogram egyes részeinek végrehajtása Csrssen történt, a többi rész pedig rendszermagban volt. Most az egész meghajtó csak a kernel módban működik. Mivel a Microsoft nem támogatja a támogatott Windows grafikus eszközök mindegyik illesztőprogramját, szorosan együttműködik a hardvergyártókkal annak érdekében, hogy megbízható és hatékony meghajtókat fejlesszen ki. A rendszerrel szállított összes járművezetőt olyan gondosan tesztelik, mint a végrehajtó rendszer más elemeit.
Végül fontos megérteni, hogy egy ilyen rendszer (amelyben az ablakok és grafikus rendszert támogató alrendszer a rendszermagban fut) nem lényegében kockázatos. Ugyanezt a megközelítést használják számos más eszközmeghajtóra (például hálózati kártyák és merevlemezek). A kernel módban futó összes illesztőprogram soha nem csökkentette a Windows NT megbízhatóságát
Néhányan elterjednek a Windows megelőző többfeladatú műveleteinek hatékonyságát csökkentő kitalálások, mivel az ablakkezelő és a GDI kernel módba történő fordításának köszönhető. A nézőpont mögötti elmélet növeli a Windows rendszermagban történő további feldolgozására fordított időt. Ez a vélemény a Windows architektúrájának félreértéséből ered. Sőt, sok más operációs rendszerek, hivatalosan támogatja elővásárlási multitasking ütemező nem kiszorítja futó szálak magmódban, vagy helyettesíti, de csak bizonyos helyzetekben. A Windows-ban azonban a rendszermagban futó szálakat a felhasználó módú szálakkal megegyező módon tervezik és cserélik le, a végrehajtó rendszerkód teljesen visszanyúlik. Számos egyéb megfontolás mellett ez egyszerűen csak azért szükséges, hogy magas szintű rendszer-méretezhetőséget érjünk el az SMR-kompatibilis készülékeken.
A spekuláció másik iránya az volt, hogy csökkentse az SMP skálázhatóságát a már leírt változások következtében. Elméleti vizsgálatok: kora interakció az alkalmazás és az ablakkezelő vagy GDI érintett két-Flow, az egyik - a mellékletben, és egy - a Csrss.exe. Ezért az SMP-rendszerekben, ahol ezek az áramlások párhuzamosan hajthatók végre, az áteresztőképesség növekszik. Ez azt jelzi, a megértés hiánya alkalmazott technológiák a Windows NT 4. B legtöbb esetben okoz Windows kliens alkalmazások alrendszerre folyamat szinkronban, azaz a. E. A kliens szál teljesen blokkolta függőben hívásfeldolgozással szerver, majd az áramlás folytatódik csak utána. Tehát az SMP-rendszerekben nincs párhuzam elérhetetlen. Ezt a jelenséget az SMP-rendszerekben könnyedén megfigyelhetjük az olyan alkalmazások példájával, amelyek intenzíven dolgoznak a grafika segítségével. Ebben az esetben azt találjuk, hogy egy kétprocesszoros rendszerben minden processzor 50% -kal töltődik; Egyszerűen látható, hogy a Csrsz egyetlen csatornája elválik az alkalmazás szálától. Valójában, mivel a két szál szorosan együttműködik és hasonló állapotban van, a processzoroknak folyamatosan vissza kell állítaniuk a gyorsítótárat a szinkronizálás fenntartása érdekében. Ezért az egyszálú grafikus alkalmazások a Windows NT 3.51 rendszert futtató SMP rendszerekben általában lassabbak, mint az egyprocesszoros rendszereknél.
B módosítások miatt a Windows NT 4, lehetséges volt, hogy megnöveljük a SMP-rendszerek intenzív alkalmazások ablakkezelő és a GDI, - különösen akkor, ha egy alkalmazás több mint egy szál. Ha van két áramlat alkalmazások egy kétprocesszoros gép Windows NT 3.51 CPU időt a versenyt egy összesen négy szál (két - a mellékletben, és két - a Csrss). Bár minden pillanatban kész végrehajtani, mint a szabály, hogy csak két stream, az eltérés elvesztéséhez vezet településen referencia és a cache szinkronizálás. Ez történik legvalószínűbb oka, hogy kapcsoljon az egyik processzor a többi alkalmazás szálak. B Windows NT 4, mind a két patak alkalmazások valójában saját processzorral és automatikus kötelező mechanizmus patakok Windows folyamatosan próbál végrehajtani a menet ugyanazon a processzoron, maximalizálva településen a referencia és minimalizálásával szükség cache szinkronizálás az egyes processzorok .
B Végül megjegyezzük, hogy a termelékenység növekedése eredményeként az átviteli ablakkezelő, a GDI származó felhasználói mód a kernel módban érhető el jelentős csökkenése nélkül a rendszer stabilitását és megbízhatóságát - még abban az esetben több alkalommal létre a konfiguráció támogatással Terminal Services.

A POSIX alrendszer
OS / 2 alrendszer

Amint a 6. fejezetben részletesen bemutatjuk, a szálak a végrehajtható program elemei, és mint ilyenek, ütemezésnek vannak kitéve (a processzorhoz egy bizonyos sémának megfelelő kapcsolat). B OS / 2 64 prioritási szintet (0-tól 63-ig) és Windows 32-t (0-tól 31-ig). Ennek ellenére a 64 OS / 2 prioritási szint a Windows dinamikus prioritásaira vetíti előre az 1. és a 15. között. A Windows rendszeren futó OS / 2 szálak soha nem érnek valós idejű prioritásokat (16-31).

Kapcsolódó cikkek