A Windows - - - mark russinovich orosz
Ez alkalommal fogok nézni a végrehajtását címkék megtalálni és megmagyarázni a jelenlegi korlátozások számukra. Leírások - Ezt az adatstruktúrát, amely képviseli a alapvető nyitott példányait operációs rendszer tárgyak, amelyek kölcsönhatásba lépnek a kérelmet; például fájlok, registry kulcsokat, a szinkronizálás primitívek és a megosztott memóriát. Két korlátozás a számhoz tartozó fogantyú, hogy egy folyamat hozhat létre: a maximális számú fogantyúk, hogy a rendszer beállítható a folyamat, és a rendelkezésre álló memória mennyisége tárolására címkék és tárgyak az alkalmazás csatlakozik a leírásnak.
A legtöbb esetben ezek a korlátozások leírók messze azokat az értékeket, amelyek általánosan használt alkalmazások által vagy a rendszer. Azonban az alkalmazás, a design, amely nem veszi figyelembe ezeket a korlátozásokat, hozzáférhetnek a várt módon a fejlesztők számára. A legtöbb esetben ezek a problémák abból a tényből, hogy az élettartam az erőforrás kell kezelni alkalmazások, és mint abban az esetben a virtuális memória kezelése feladat életen források egyfajta kihívást jelent még a legjobb fejlesztők. Egy alkalmazás, amely nem képes, hogy kiadja a fel nem használt forrásokat, így azok szivároghatnak, amelyek végső soron oda vezethet, hogy az a tény, hogy a határ egy erőforrás használatát elérte, így a furcsa és nehéz diagnosztizálni viselkedés, mint ez, és más alkalmazások, vagy az egész rendszer egészére.
Descriptors tárgyak

Ha egy alkalmazás meg akarja venni az irányítást egy ilyen forrásokat, először meg kell hívni a megfelelő API, hogy hozzon létre vagy nyissa meg a forrás. Például a CreateFile funkció nyitja vagy egy fájlt hoz létre, RegOpenKeyEx függvény megnyit egy registry kulcsot, és CreateSemaporeEx funkció nyitja vagy létrehoz egy szemafor. Ha ezt a funkciót sikerül, a Windows lefoglal egy fogantyút a jelentkezési folyamat leíró tábla és visszaadja az értékét leíró hogy az alkalmazás kezeli hallgatólagosan, de valójában beszélünk az index visszatért leíró a leíró táblázatban.
Hogy hozzáférjenek a fogantyú alkalmazás kéri, és kezeli a tárgy, átadva a fogantyút értékét az API funkciók, mint readfile. SetEvent. SetThreadPriority és MapViewOfFile. A rendszer lehet szervezni a keresést a tárgy, amelyre utal a leíró indexelés fogantyú asztal számára a megfelelő rekord leíró hogy tartalmaz egy mutatót az objektum. Vedd leíró is tárol információt ügyletek hozzáférhetővé vált a folyamat, ahogy kinyitotta a létesítmény, amely lehetővé teszi a rendszer, hogy biztosítani kell, hogy a folyamat nem lesz képes elvégezni a műveleteket tárgy, ami ebben a folyamatban nincs engedélye. Például, ha a folyamat sikeresen megnyitotta a fájlt olvasásra, a nyél bejegyzés a következőképpen néz ki:

Ha ez a folyamat megpróbálja írni valamit a fájlt, a függvény befejezte végrehajtását egy hiba, mert ez a fajta az iratbetekintés nem kapták meg, és az a tény, hogy a hozzáférés a gyorsítótár olvasásra azt jelenti, hogy a rendszer nem ismétlem több költséges a vizsgálati erőforrások hozzáférési jogokat.
A legnagyobb számú leírások
Annak vizsgálatára, az első korlátozás, akkor az eszköz a Testlimit, általam használt keretében a sorozat empirikus vizsgálatára vonatkozó korlátozások a rendszer erőforrásait. Már le lehet tölteni a Windows Internals oldalt itt. Számának meghatározása deszkriptorok, hogy létre tudja hozni a folyamat, Testlimit használható a -h, ami megmondja, hogy létre, mint sok tag lehet. Ez úgy érhető el azáltal, ha objektumot CreateEvent funkció és az azt követő ismételt párhuzamos rendszert leíró keresztül tértek vissza DuplicateHandle funkciót. Segítségével párhuzamos, a Testlimit elkerülhető, hogy olyan új funkciókat, és az összes felhasznált erőforrások ezek az eszközök költenek fogantyú tábla bejegyzéseket. Íme az eredmény Testlimit dolgozni a -h opció egy 64 bites rendszer

Ez az eredmény azonban nem tükrözi az összes leírások, ez a folyamat hozható létre DLL rendszer könyvtárak nyitva különféle tárgyakat során az inicializálási folyamatot. A teljes száma folyamat tag, akkor láthatjuk, hogy a megfelelő oszlopot a Feladatkezelő vagy Process Explorer. A összeghatára Testlimit ebben az esetben 16'771'680:
Amikor futtatja Testlimit 32 bites rendszert, a szám a leírók lesz kicsit más:
A teljes száma jellemzők és a másik 16744448:
Mi okozza ezeket a különbségeket? A válasz az, hogy a működtető rendszer, amely felelős a gazdálkodás leíró táblázat, szab korlátot a deszkriptorok minden folyamat, valamint a méret bejegyzéseket a leíró táblázatban. Itt van dolgunk egyike azoknak a ritka esetekben, amikor a Windows állít kemény korlátot a használata a forrás, úgyhogy ebben az esetben a végrehajtó, a rendszer meghatározza, hogy hány 16777216 (16 * 1024 * 1024) azt a maximális számát fogantyú lehet elkülöníteni a folyamatot. Bármely folyamat, amely több mint tízezer leírások egyidejűleg bármely időpontban, nagyon valószínű, nincs komoly hiányosságokat elkövetett tervezése és fogantyú szivárgás. Ahhoz, hogy a határ 16 millió kezeli gyakorlatilag elérhetetlen, és úgy tervezték, hogy segít megelőzni a memória szivárgás által okozott interferencia a munkafolyamatban a többi rendszer. Ahhoz, hogy megértsük, miért a szám megjelenik a Task Manager eltér a kemény beállított maximális, meg kell vizsgálni, milyen módon a végrehajtó rendszer szervezi kezelni táblázatokat.
Vedd leíró táblázat nagynak kell lennie ahhoz, hogy tárolja a maszk a hozzáférési jogok és a tárgy mutatót. Access maszk egy 32 bites mutató mérete, de természetesen attól függ, hogy a rendszer 32 bites vagy 64 bites. Következésképpen a fogantyú bejegyzés 8 bájt 32 bites Windows és a 12 bájt 64 bites Windows-t. 64 bites Windows kiegészíti a szerkezet az adatrögzítő jelölés akár 64 bites határait, így a 64 bites felvétel tag ténylegesen sor 16 bájt. Itt az a meghatározás, leírások felvétel 64 bites Windows, megjelenik a kernel debugger parancs dt (billenő típusú)

Itt azt látjuk, hogy a szerkezet tartalmaz, és egyéb információk, továbbá a tárgy pointer és hozzáférési maszk elszigetelt a screenshot.
Működtető rendszer helyezi a leíró táblázat a blokkokat, amelyek a lapméret, amely megosztja a leíró tábla bejegyzéseket. Ez azt jelenti, hogy az oldal, amely elfoglalja 4096 byte x86 rendszereken és 64 bites rendszereket, mentheti 512 bejegyzés 32 bites Windows és 256 bejegyzés 64 bites Windows. Executive meghatározza a maximális oldalszámot, hogy ki tud jelölni egy rekord leíró elosztjuk mereven előírt maximális (16777216) száma leíró per oldal; 32 bites Windows, a szám 32.768 és a 64-bites Windows - 65.536. Mivel a végrehajtó rendszer az első rekord minden oldalon a saját azonosító adatokat, a tényleges szám a leírók áll a folyamat, meg kell szerezni kivonják 16777216 száma fentiekben kapott, ami megmagyarázza a kapott eredmények Testlimit kezdet: 16777216 - 65.536 = 16711680 és 16777216 - 32768 = 16.744.488.
A 64 bites Windows, a felső szinten tartalmaz 256 mutatókat az oldalra. Ez azt jelenti, általában, hogy igazodjon a teljes leíró táblázat a 256 MB lapozható (16777216/256 * 4096). Helyessége ezeket a számításokat adatok igazolják Testlimit lapozható használat 64 bites Windows:
Mennyiségű lapozható több mint elég ahhoz, hogy ezeket az adatokat szerkezetek azonban, ahogy azt már korábban említettem, ez a folyamat, amely létrehozza a túl sok leírások szinte biztosan elfogy néhány más forrás, és ha eléri a számát leíró korlátot egy folyamat akkor nem tudja megnyitni más tárgyakat.

Alapértelmezésben Process Explorer mutatja, csak leírásokat, hogy pont az objektumokat, amelyek név azt jelenti, hogy nem fogja látni az összes folyamatot leíró, ha nem engedélyezi az opciót „Show Névtelen nyél és Mappings” a Nézet menüben. Íme néhány névtelen fogantyúk parancssori leíró táblázat:

Mint ahogy az a legtöbb más hibák, csak a kód fejlesztő, ami miatt fennáll a szivárgás, akkor megjavítani. Ha úgy találja, hogy szivárog-e olyan folyamat, amely több részből áll és bővítmények például Explorer Service Host vagy az Internet Explorer, a fő kérdés az, hogy ezek közül melyik alkatrész felelős a szivárgás. Meghatározása ilyen komponens lehetővé tenné, hogy a probléma elkerülésének letiltásával vagy eltávolíthatja a hibás bővítmény ellenőrzi a frissítéseket, ez a hiba kijavítása, vagy jelentheti, hogy a fejlesztő.
Szerencsére a Windows tartalmaz leírásokat nyomkövető eszköz, amely segítségével létre az a tény, a szivárgás, és meghatározza a felelős személy a szivárgás a szoftver. Úgy működik, minden folyamat külön-külön és aktiválja a végrehajtó rendszer rögzíti a tevékenység a köteg minden alkalommal egy fogantyú létrehozásakor vagy zárt. Akkor használja ezt az eszközt, vagy használja a közművek Application ellenőrző. amely ingyenesen letölthető a Microsoft honlapján, vagy pedig egy hibakereső a Windows (windbg). Ha szeretné, hogy a rendszer, majd a tevékenység a folyamat leíró, elindítása óta, akkor kell használni az Alkalmazás-ellenőrző. Más esetekben, akkor kell használni a debugger, és a parancs! Htrace. információk megtekintéséhez a tevékenység a folyamatot.
Demonstrálására nyomkövető akcióban, elindítottam windbg, és csatlakozik a parancssor, amit korábban indítják. Annak érdekében, hogy nyomon követése leírások, beléptem a parancsot htrace kulcs -enable !:
Hagytam, hogy a folyamat tovább dolgozik, és ismét megváltoztatta a könyvtárban. Ezután váltottam vissza windbg, megállt a végrehajtás a folyamat, és elindította htrace nincs paraméter, amely megjelenít egy listát az összes nyitott és zárt ügyletek, amelyek megfelelnek a folyamatot az előző futás a csapat! Htrace paraméterrel pillanatfelvétel, vagy attól az időponttól, amikor a rekord tartalmazza aktív tag. Itt vannak az eredmények a parancs az adott munkamenetben, a hibakereső:

Ha keres csak a szivárgás, akkor kell használni! Htrace --diff paraméterrel, ami azt mutatja, csak az új fogantyúkat, mivel az utolsó bemetszés, vagy az elején a dob sáv aktivitást. Ahogy az várható volt, az eredmény a parancs futtatása látjuk csak fogantyú 0x22c:

Egy kiváló forrása a tippeket, hogyan lehet megszüntetni a szivárgást leírásainak van egy interjú a mérnök műszaki támogatást a Microsoft Dzheffa Deyli (Jeff Dailey) a Channel 9.
Legközelebb én felülvizsgálja a megállapított korlátozások az ilyen leírások alapján forrásokat, mint például a GDI és a USER tárgyakat. Kezeli ezeket a forrásokat kezeli a Windows alrendszer, amely eltér a végrehajtási rendszer, és ezért más forrásokat vennének igénybe, és egyéb korlátozások.