Лабораторные работы / Задания / ЛР 4 АРХИТЕКТУРА ПАМЯТИ WINDOWS
.pdfBOOL 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 |
|
•страницаиметотжетипзашиты,чтопервонстр,всоответствииачальнаяница
следующимизначениямифлага: |
PAGE_READONLY, |
PAGE_READWRITE, |
PAGE_NOACCESS, PAGE_WRITECOPY, PAGE_EXECUTE, PAGE_EXECUTE_READ, |
||
PAGE_EXECUTE_READWRITE, PAGE_EXECUTE_WRITECOPY, PAGE_GUARD или |
||
PAGE_NOCACHE. |
|
|
Рассмотримостальнчленыструктурые |
MEMORY_BASIC_INFORMATION: |
•AllocationBase - базовыйадресвыделеннойобласти;
•AllocationProtect - первоначальныйтипзащитывыделеннойобласти;
• State - одноизтрехзначений: |
MEM_FREE, MEM_RESERVE или МЕМСОММ IТ. |
Относитсякзаданнойобласти; |
|
•Protect - текущийтипзащитызаданнойобласти;
• Туре - одноизтрехзначений: |
|
MEM_IMAGE, MEM_MAPPED или MEM_PRIVATE. |
Относитсякзаданнобласти.Этик нстансмыслйимеюследующийт: |
MEM_IMAGE |
|
указывает,чтообластьотображенафайлобраззадачи( |
|
image file),тоестьна |
загрузочный; MEM_MAPPED указыв,чтооблотображенаетснезагрузочныйь |
||
отображвпамятьфайлнапример( емый,файлданных); |
|
MEM__PRIVATE указывает,что |
областьиспользуется |
однимпроц,анесовместноссом. |
16
|
|
|
СОДЕРЖАНИЕОТЧЕТА |
|
1. |
Наименованиелабораторнойработы,еецель. |
|
|
|
2. |
Разработанное программноеобеспечениедля |
приложения, |
которое: |
|
|
§ выдает информацию, |
получаемуюприиспользовании |
API GlobalMemoryStatus. При |
|
|
выводеинформации |
использоватьдиаграммы. |
|
§Составляеткартувиртуальнпамд юбяпрти.огоцессай
3. Примерыразработанныхприложенийрезультаты( |
итекстыпрограмм). |
17