Разширявайки границите на прозорци пейджъра и набор извън виртуалната памет

Този път аз ще ни кажете за двете основни ресурси ядрото, повиканата (от английски език. Пейджъра) и не-пейджъра (от английски език. Набор извън виртуалната памет) басейните, които са базирани на първите две ресурси и които имат пряко влияние върху много други ограничения по отношение на системните ресурси, включително максималния брой процеси, синхронизация на обекти и описания.

Например, ако приложението изисква 512-байтов буфер за съхранение на данни, купчина мениджър взима една от областите, които тя може да разпределят, и отбелязва, че се използват първите 512 байта, която връща указател към мястото на паметта и поставя свободната памет в списъка, че той се използва за съхранение на информация за свободните зони на куп.


набор извън виртуалната памет
Шофьорите на ядрото и какво устройство набор извън виртуалната памет за съхранение на данни, които могат да бъдат достъпни, когато системата не може да се справи грешки страници. Основната част по такъв режим, когато тя изпълнява процедурата по обработка на прекъсване (ISR) и процедурата повиквания отсрочени (DPC), което е по същество функция, свързана с хардуерни прекъсвания. неизправности страница и недопустимо, когато водачът на ядрото или устройство изисква заключване спин. Това е единственият тип заключване, които могат да бъдат използвани за ISR и DPC и трябва да се използва за защита на структурите от данни, които се наричат ​​от ISR или друга DPC и ISR или DPC, или от код работи в теми на ядрото. Неизпълнение Шофьор да се придържат към тези правила се сложи край на най-често срещаните код за грешка: IRQL_NOT_LESS_OR_EQUAL.

Поради това, не-пейджъра басейна е винаги в физическа памет и виртуална памет не е пейджъра басейн възлага на физическата памет. Обща система за данни, структури се съхраняват в набор извън виртуалната памет, включително и ядрото и обектите, които представляват процеси и нишки, синхронизация обекти като mutexes, семафори и събития препратки към файлове, които са представени като файл обект, и пакети О искането за I / (МКК) , представени като I / O операция.


пейджъра басейн
Пейджъра басейн, от друга страна, получава името си от факта, че Windows може да записва данни, че тя съхранява в суап файл, което позволява използване на физическа памет, която в този случай се освобождава за други цели. Както е случаят с режим на виртуалната памет на потребителя, когато водачът или системата се отнася до пейджъра памет басейн, който се намира в досието на страница, както и контролер на паметта чете данни обратно в физическа памет. Най-големият потребител на пейджъра басейн, поне в Windows Vista и по-късно операционни системи, обикновено в системния регистър като препратка към ключове в регистъра, както и други структури от данни, съхранявани в пейджъра басейна. структурите от данни са представени като показва в памет на файла, наречени участъци, също се съхраняват в пейджъра басейна.

Драйверите за устройствата за разпределяне на повиканата и не-пейджъра ползване басейн API ExAllocatePoolWithTag. определяне на вида на басейн, като един от параметрите. Друг параметър е 3-байт маркер, че шофьорите са използвани за уникална идентификация на паметта, определена за тях; Тази опция може да бъде полезна за намиране на основните движещи сили, които не са в басейна (както ще обясня по-долу).

Има три гишета, показва информация за използването на басейна:

  • Набор извън виртуалната памет байта;
  • Пуул dischargeable байта (виртуалната размера на пейджъра басейн);
  • Басейн пейджъра резидентни байта.


Въпреки това, не съществува насрещно изпълнение (броячи за изпълнение) се посочва максималният размер на тези басейни. Такива данни могат да бъдат получени с помощта на ядрото дебъгер команда! Vm, но да се използва за корекция на грешки ядрото в режим на местен отстраняване на грешки в Windows Vista и по-нови версии на системата, трябва да се стартира системата в режим на отстраняване на грешки, в които възпроизвеждане MPEG2 е забранено.

Разширявайки границите на прозорци пейджъра и набор извън виртуалната памет

След като настроите символите, отворен System Information (кликнете върху раздела на менюто Изглед, или натиснете Ctrl + I за системна информация), както и да видите информация за басейна в раздела за ядрото на паметта на диалоговия прозорец. Ето как изглежда на Windows XP с 2GB памет:


32-х-битов Windows XP с 2 GB оперативна памет


64-х-битов Windows XP с 2 GB оперативна памет


32-х-битов Windows XP с 2 GB оперативна памет

И най-накрая, тук е ограничението за система с 64-битова версия на Windows 7 с 8GB памет:

Тук е обобщена таблица на ограничения по отношение на размера на не-пейджъра басейн за различни версии на Windows:


32-х-битов Windows XP с 2 GB оперативна памет


64-х битов Windows 7 с 8 GB памет

Тук е обобщена таблица на ограничения по отношение на размера на пейджъра басейн за различни операционни системи:


Тестване на ограничения върху размера на басейн
От обединяването на ядрото се използва в почти всяка операция ядро, пълно изчерпване може да доведе до непредсказуеми резултати. Ако искате да се на собствения си опит, за да видите как системата се държи в случай на тежки ползване на басейн, използвайте помощната програма Notmyfault. Тя има функции, които ви позволяват да се отклони определен от потребителя период от пейджъра или не-пейджъра басейн. Можете да промените размера на воля, а след затварянето Notmyfault всички зает тази помощна програма памет се освобождава:

Разширявайки границите на прозорци пейджъра и набор извън виртуалната памет

Не е необходимо да стартирате това приложение на вашата система, ако не сте готови за евентуална загуба на данни, тъй като след като свободно пространство басейна приключи, прилагането и функционирането на I / O ще бъде прекратен с грешка. Можете дори да получите син екран на смъртта (BSOD), ако има такъв водач, който не е в състояние да обработва правилно състоянието на канализацията за памет (това е шофьор грешка). Windows Hardware лаборатория на качеството (WHQL) тества шофьорите с помощта на драйвер верификатор - помощна програма вградена в Windows - за да сте сигурни, че могат да се справят с освобождаването от басейна, без грешки, но вие може да сте инсталирали драйвери на други, които или не са преминали този тестване, или да има грешки, които не са били открити по време на тестовете за WHQL.

Тичах Notmyfault на снимачната площадка на тестови системи за виртуални машини, за да се види как те се държат и ако те се срещне с всички системни грешки. След не-пейджъра басейн на система с 64-битова версия на Windows XP са изчерпани, опит да се управлява от командния ред, попълнете следният диалогов прозорец:

Разширявайки границите на прозорци пейджъра и набор извън виртуалната памет

На един от тестовите системи видях съобщение за грешка, което бе посочено, че може би данните са загубени. Надяваме се, че никога няма да видите такъв диалог на недвижими вашата система!

Същата грешката е възникнала в случай на изчерпване на пейджъра басейн. Това са резултатите от опитите за стартиране на Notepad от командния ред на система с 32-битов Windows XP, след пейджъра басейн е изчерпан. Имайте предвид, че Windows не може да стартира прекрояване заглавието на прозореца, и издава различни бъгове с всеки нов опит да стартирате приложението:

Разширявайки границите на прозорци пейджъра и набор извън виртуалната памет

Причината, поради която Windows не може да виси след басейна е изчерпан, въпреки счупения системата е, че тази ситуация може да бъде временно, които са възникнали в резултат на пика на натоварване, след което групата ще бъде освободен и системата ще се върне към нормална работа. Въпреки това, ако басейна се влива на водача (или ядрото), причината за такова изтичане става критична. В този случай, важна роля играе тагове басейн, както е описано по-рано в тази статия.


Проследяване на течове басейн
Ако подозирате, че наличието на изтичане на басейн и системата все още може да стартирате приложения, Poolmon - инструмент на набор от Windows Driver Kit - ще ви покажем няколко избрани области, а броят на незаетите байта в тези области, разделени от тип басейн, както и етикети ExAllocatePoolWithTag искания. Различни комбинации клавиш позволяват Poolmon сортиране на съдържанието в различни колони; да намерите разпределени области на паметта е теч, натиснете "б", за да сортирате байта, или "D" за сортиране чрез разликата между броя на разпределените и свободните сегменти памет. Ето една снимка, показваща Poolmon работата по системата, където чрез Notmyfault изтече 14 секции на памет басейн, всяка приблизително 100MB:

Разширявайки границите на прозорци пейджъра и набор извън виртуалната памет

След като сте намерили желания маркер в лявата колона (в този случай, "течове"), следващата стъпка е да се намери водач, който използва този етикет. Тъй като тези етикети, които са съхранени в водача, можете да сканирате изображението на присъствието на разглеждания маркер. String полезност от Sysinternals запазва необходимия ред във файла да посочите (желания подразбиране линия трябва да бъде най-малко 3 знака, и, тъй като повечето от образите на водачи, намиращи се в директорията% SystemRoot% # 92; System32 # 92; драйвери, можете да отворите командния ред, променя текущата директория на посочения и стартирайте командата "струните * | findstr ". След като намерите съвпадение, можете да получите информация за версията на драйвера с помощта Sigcheck Sysinternals инструменти Ето процеса на търсене на драйвери, използването на маркера." Течове ":

Разширявайки границите на прозорци пейджъра и набор извън виртуалната памет

Ако е имало повреда в системата и подозирате, че това е по вина на изчерпване басейн, натоварване копирания файл, в дебъгер WinDbg този провал, който е включен в Tools отстраняване на грешки за Windows пакет и се уверете, че с помощта на екипа! Vm. Това е резултат от използването на този команда на система, в която Notmyfault изтощен набор извън виртуалната памет:

Разширявайки границите на прозорци пейджъра и набор извън виртуалната памет

Разширявайки границите на прозорци пейджъра и набор извън виртуалната памет

Използвайте инструмента Strings, за да търсят информация за драйвера на сметище, използвайте маркера, който определя като причината за теча.

В този момент в тази серия, аз ви казах за най-основните ограничения на Windows, включително физическа памет, виртуалната памет, пейджъра и не-пейджъра басейни. Следващия път ще говорим за ограниченията за броя на процеси и нишки, поддържани от Windows, които се основават на следните основни системни ограничения.