Материал: ЛР 4 АРХИТЕКТУРА ПАМЯТИ WINDOWS

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

BOOL SetProcessWorkingSetSize(

 

 

HANDLE hProcess,

//Открытыйдескриинтересующегорп . цесса

 

DWORD dwMinimumWorkingSetSize,

 

 

 

// Задаетмин.

размеррабочегонав айтахора.

 

DWORD dwMaximumWorkingSetSize

 

 

 

//Задмаксимальныйет

размеррабочегонав айтахора.

 

);

 

 

 

 

 

Присвоениекаждому

издвухпараметровзначениямера

 

-1приведетктому,чтоф нкция

сожметразмеррабочегонаборадои0темсамымвреудалитданныйеннопрфизическойцесс

 

 

памяти.

 

 

 

 

 

Действительныйразмеррабочегонаборапроцессамизменятьсяжетвовремени,таккак

 

 

Windows увеличиврабочийнабор,еслиз мечает,чтоупроцессабольшоеколичество

 

 

страничныхпромахов.

 

 

 

 

Пределыразмерасистемногорабочегонабораприведеныследующейтаблице.

 

 

Модель

Объем

 

Минимальныйразмер

Максимальныйразмер

памяти

памяти

 

рабочегонаборапроцесса

 

рабочегонаборапроцесса

Small

<=19Мб

 

388страниц(1,5Мб)

 

500страниц(2,0Мб)

Medium

20-32Мб

 

688страниц(2,7Мб)

 

1150страниц(4,5Мб)

Large

>=Мб32

 

1188страниц(4,6Мб)

 

2050страниц(8Мб)

 

 

 

Базаданныхстраничныхблоков

 

Windows фиксирует coстоянкаждойфизическойстраницыпамятивструктуреданных,

 

назывбазойданныхстраничныхемойблоков(

 

 

Page Frame Database)Каждая. физическаястраница

можетнахводизвнитьсяоразлсьмистоя: чныхий

 

 

 

 

активная,илидействительная(

active, valid)Страница. втекущиймомеотображаетсян

виртуальнуюпамять,входя,такимоб,разомнаборбочийстраниц;

переходная( transition)Страница. впроцессепереходакактивнсост; омуянию

резервная(

standby)Страница. толькочтовышлаизсостоя

нияактивн« »,ноосталасья

неизменной;

 

измененная( modified)Страница. вышлаизсостоянияактивная« »Ее.содержание,пока онаходиласьвуказанномсостоя,былоиз, ещзаписаноиионеенадиск;

измененнаянезаписанная(

modified no write). Страницанаходитсявсостоянии

«измененная»,ноособопомеченакакстраница,содержимоекоторойнесброшенона

 

11

диск.Использудрайверамифайловойсистемытся

Windows;

свободная( free)Стра. своб,ницаоодпроизвольныеержитназаписи,следовательно,

неможет использоватьсяпроцессом;

обнуленная (zeroed). Страницасвободнаиницианупотокомлямизнулевойирована страницы.Можетбытьвыделенапроцессу;

плохая(

bad)В.страницебылиотмеошибчетностиилныкакие

 

-тодругие

аппаратошибки,поэтомуныеа

 

должнаиспользоваться.

 

Кучипамятив32

-разрядной Windows

Присозданиипроцесса

 

Windows назнаемукупоумолчаниюаету(

default heap),тоесть

изначальнорезеробласв рпамятиуетуальнойобъемомМб.1Темменее,при

 

 

 

необходисистебудетремаости

 

гулироватьразмеркучи,котораяспользуетсясамой

Windows

дляразличныхцелей.

 

 

 

 

API-функция GetProcessHeap исподполяьздесученетсякучи.Припомощипторая

 

функции HeapCreatе,возвращающейдескучи,программистриптсоздаватьжет

 

 

дополнительные кучи.

 

 

 

Естьнесколькопричинсоздаватьдополнкучивместотого,тельныечтобыиспользовать

 

 

кучупоумолчан.Напр,текучи,котомерюпредляыеназначеконкретзадач,частоных

 

 

 

оказываютсяболееэффективными.Кр, гомешибкизаписиданныхкучу,памя

 

 

тьдлякоторой

выделенаспециализированнкучи,незатроданныхдркуч.Наконгихт,выдйелениец

 

 

 

памятиспециализировкучиобщемслучаебудетозн,чтоданчатьвнпамятиойные

 

 

 

упакованыболееплотнодругдругу,этоможпотребностньшить

 

 

ьвзагрустраницизке

файлa подкач.Следуеттаупомянкжеи,чтод ккступпорядоченть(

 

serialized),тоесть

системазастк потокждвляет, ытающйобратитьсякпамятикучи,йсядожидатьсясвоей

 

 

 

очереди,покадругиепотопроизводимыенезакончат

 

 

операции.След,т одинльковательно

потоквкаждыймомврможетнтменивыделятьилиосвобождатьпамятькучиизбежание

 

 

неприятныхконфликтов.

 

 

 

 

16-разрядная Windows поддерживглобальную,локкучи.Соответственнольнуюв

 

даннойсистемереализованы

 

функции GlobalAlloc и LocalAlloc. Онивыполняются,нонечень

эффект,поэтомуследуивнызбихприменегатьвWin32Одихвсенакоия.

 

 

-такиприходится

исподнекляьзцелейо,ватьакихорыхкаксозданиеокнапросмотрабуфераобмена.

 

 

 

 

 

Фунработыкучсции

ей

Дляработыскучамиисполедьзфу:нкцютсящиеи

 

 

 

GetProcessHeap возвращаетдескучипроцессарипоумолчаниютор;

GetProcessHeaps возвращаетсписокдескрвсехкуч,иптсповданныйровльзуемых моментпроцессом;

12

HeapAlloc выделяетблокпамятииззадан

нойкучи;

HeapCompact дефрагменткучу,объедсвободныеблоки.няяМожетруеттакже освобождатьнеиспользуемыестраницыпамятикучи;

HeapCreate создаетновуюкучуадресномпространпроце; ствеса

HeapDestroy удаляетзаданнуюкучу;

HeapFree освобождаетпред

варительновыделенныеблопамятикучи;

HeapLock блоккучу,прииспользованруетданнойфункцтолькоодпотокииинмеети

 

нейдостпотоки.Дру,запрашивающиегиедоступ,переводятсясостояниеожидания

 

дотехпор,покапоток,владеющийучей,неразбл

окируетее.Этооднаизформ

синхронизациипо,тоестьтотковприем,которстемаеализуетымупорядоченность доступа;

HeapReAlloc перераспределяетблопамятикучи.Используетсядляизмененияразмера блока;

Heapsize возвращаетразмервыделенногоблока

памятикучи;

HeapUnlock разблокикучу,котодэтогобыларуетзаблокированааяфункцией

HeapLock;

HeapValidate проверяетпригодностькучиили(отделееб),еслиимеютсяоканоголи какие-либоповреждения;

HeapWalk позволяетпрограмосмодеатриватьисту

ржимоекучи.Обычно

используетсяприотладке.

 

 

 

 

 

Отображениявиртуальнойпамяти

 

ФункцияWin32

API

VirtualQuery можетисподляполучениьзоваться

информации

состоянииадресоввиртуальнойпамяти.Синтаксисеетаков:

 

 

 

DWORD VirtualQuery(

 

 

LPCVOID IpAddress,

//Адресобласти.

 

PMEMORY_BASICONFORMATION IpBuffer, //Адресинформационногобуфера

 

DWORD dwLength

 

//Размербуфера

 

);

 

 

 

Используетсятакжефункци

 

VirtualQueryEx, расширеннаяверсия

VirtualQuery, которая

позволяетполучатьинформацвнешнвиртуальадресюпространствахны:

 

DWORD VirtualQueryEx(

 

HANDLE hProcess

//Дескрипторпроцесса

 

13

LPCVOID IpAddress,

//Адресобласти

 

 

 

MEMORY_BASIC_INFORMATION IpBuffer,

//Адресинформационного

буфера

DWORD dwLength

// Размер буфера

 

 

);

 

 

 

 

Параметр hProcess - этодескпр.оцессаПараметриптор

IpAddress - этоначальныйадресдля

записирезультирданных,которыйбудетющих

 

округлятьсявменьшуюсторонудоближайшего

 

кратногоразмерустраницыКб(4)Обефункции. возвращаютинформациюследующую

 

 

 

 

структуру.

 

 

 

 

Struct MEMORY_BASlC_INFORMATION {

 

 

 

PVOID BaseAdciress;

// Базадресовыйбласти

 

 

PVOID AllocationBase;

// Базовый адрес выделенной области

 

DWORD AllocationProtect; // Первоначальная защита отдоступа

 

DWORD RegionSize;

// Размер области в байтах

 

 

DWORD State;

// Передана зарезервирована,

свободна

 

DWORD Protect;

// Текузащитаотдоступаая

 

 

DWORD Type;

// Тип страниц

 

 

 

}

 

 

 

 

Чтпонятьпринципбыдействиячленовэтойструктуры,необходимознатьназначении даннойфункции.Чтобысделатьопределболеепо,нятнымазовемниестраницу,которой

принадлежитадрес IpAddress,заданной (specified)Следующийрисунпомразобратьсякжетв новойтерминологии.

14

Область

размещения

Заданнаяобласть (логическиупорядоченные страницы)

IpAddress

Заданнаястраница

Функция

 

MEMORY_BASIC_

 

BaseAddress,

адресзаданнойстраницы;

RegionSize,

 

 

вершизадаобластин. ыной

 

Естраницали,содержащаяадрес

,свободнане(зарезервировнепередан), ана

 

членструктуры

Stаte

MEM_FREE.Остальныечленыкром(

BaseAddress и

 

 

 

Естраницали,содержащаяадрес

,несвоб,функцияоднапределявыделеннуют

 

область(

allocation

 

ючаетзаданную

страницубыла,первоначальноыделенаспомощьювызова

VirtualAlloc.

Начинаясбазовогоадресазаданной,

 

 

страницывыделеннойобла,проверяя,стиовпадаютлиихтипы

 

(allocation type

защиты(

protection

 

 

совпадающихупорядоченныхстраницпредставлясобой.Кноет

 

 

значенияструктуры

 

. Cтрансчисовпадтаетсяца

ающейс

заданнстраницей,еслионаудовлетворяетдвум :

 

 

страницаиметотжетип,чтои

 

 

 

следующимифлага:

MEM_COMMIT, MEM_RESERVE, MEM_FREE,

 

MEM_

 

MEM_IMAGE;

 

 

 

 

15

 

Источник: https://studfile.net/preview/16440312/