Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные работы / Задания / ЛР 4 АРХИТЕКТУРА ПАМЯТИ WINDOWS

.pdf
Скачиваний:
14
Добавлен:
15.02.2021
Размер:
2.68 Mб
Скачать

 

 

Лабораторная работа№

5

 

 

 

АрхитекпамятиWindowsура

 

 

 

Цельработы:

 

получепрактическихнавыкиепоиспользованию

 

Win32 API для

исследованияпамятиWindows

 

 

 

 

 

 

 

Типыпамяти

 

 

 

В Windows реалсивиртуальностемазована

й

памяти,основаннаямоделипло

ского

(лин ейадресного) пространства,кот дляздкаждогояпроцессаетиллюзиюогромного

 

 

 

 

закрытогоадреснпространства.Виртуальнаягопамятьформилогическоеп уетедставление

 

 

 

 

памяти,котонесржетоответствоватьфизическо

й структуре.Вовремявыполне

ниядиспетчер

памяти —приподдержкеоборудования

—транслиотоб( )виртуальныеуетажаадресат

 

физические,гдефактическихранятсяданные.Управляязащито

 

 

й иотображениемадресов,ОС

 

можпредотвращатьстолкновеотдельпроцилнеиыхссоврезаписьданя

 

 

ныхОС.

 

Таккаквбольшинствесистемобъемфизическо

 

й памятигораздоменьшесуммарно

го

объемавиртуально

 

й памяти,используемо

й работающипроцессами,диспетчерпа яти

 

переновыгружает( )частьитодержпамятина.Выгрузкаскмогодан

 

 

ныхнадиско

свобождает

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

 

 

 

й ОС.Когда

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

 

 

 

й памяти

подгружаетинформациюобрав сдискамятьно.

 

 

 

 

 

 

Нарис. 1

.1

продемонстрированоиспользованиевир

 

туальной памятидвумяпроцессами;

частипамятиотображвфизическпаОЗУмятьются(),адрчастиувыгружаютсягиенадиск.

 

 

 

 

Обративниманиенато,чтопрерывныеблокивиртуально

 

 

й памоягуттображатьсяив

несмежныеблокифизическо

й памяти.Этиблокиназывстр,аихютсяразмерницамипо

 

 

 

умолчаниюсоставляетКба4

 

йт.

 

 

 

 

 

 

Рис. 1 .1

 

 

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

 

 

ратной

платформы.В 32

-разрядныхплатформах86общее

 

виртуальноеадрес

ноепространство

ограниченотеоретическиммаксимумомГба4

 

йт.Поумолча

нию Windows выделяетнижнюю

половинуадресногопрост(отанстваеса0

 

x80000000 до OxFFFFFFFF) процессамдляих

собственной закрытой памяти,верхнююполовину

(адресаот0

x80000000 до OxFFFFFFFF) —для

собственногозащиспользованиященногопамяОС.От нижнбражения

 

 

й половины

1

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

 

 

 

отображенияверхне

й половиныбольшинстве(

 

случаев) всегдасостоятизвиртуально

й памяти

ОС.

Windows

поддепарвремениживаетаметзаг,коузкиыпредоставляюторыепроцессам,

 

 

 

выпослняющимобпоразомымпрограммыеченные,возможностьиспользоватьдоГба3

 

 

йт

закрытогоадреснпростр, гоанства

ляяГба1

йтдляОС.Нарис. 1.

2 изображеныдве

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

 

 

-разрядными

версиямиWindows.

 

 

 

 

Рис. 1Типичная.2структура. виртуальадреспространстваного32

-разрядныхверсия

 

Windows

Рис. 1Типичная.2структура. виртуальадреспространстваного64

-разрядныхверсия

 

Windows

Физическаяпамять

2

Физическаяпамять

- этореальныемикросхемы

RAM,устанвкомпьютеревленн.Каждый

байтфизическойпамятиимеетадр,которыйеский

 

 

представляетсобчислоотнуляй

числанаединицуменьшего,чемколичествобайтовфизическойпамяти.Например,ПК

 

 

 

установленнымиМб64

RAM,имеетфизичадрН00000000ес&киеа

 

 

-&Н04000000в

шестнадцаси числентем, вдесятичнойричнойстеме

 

будет0

-67 108 863.

Физическпамятьвотличие( фподкачкияйлавиртуальнойпамяти)является

 

 

 

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

 

 

 

можетпосредствомсистемыкомандзаписыватьданные.

 

 

 

 

 

 

 

Виртуальнаяпамя

 

ть

 

Виртуальнаяпамять(

virtual memory) - этопростонабчисел,котргокакврыхорят

 

виртуальныхадресах.Программистможетиспользоватьвиртуальныеадреса,но

 

 

Windows не

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

 

 

есне

являетадреальногофизическогояомзап устрмин,каквослучаеющегойствафизических

 

 

 

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

 

 

 

выполнить,такиеадресадолжныбыотображеныьнафизичадр,покескиеа

 

 

оторым

действительномогутхранитьсякодыданные.Этуоперациювыполняетдиспетчервиртуальной

 

 

 

памяти(

Virtual Memory Manager - VMM)Операционная. система

Windows обозначаетнекоторые

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

 

 

программ

пользовательскогорежима.Всеостобластильныеуказываютсякакзарезерв.Какированные

 

 

 

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

 

 

 

(Windows 9x или Windows NT).

 

 

 

 

 

 

Страничныеблокипамяти

 

 

 

Какизвестно,на

именьшийадресуемыйблокпамяти

 

- байт.Однакосамаленькимымблоком

памяти,которымоперирует

Windows VMM,являетсястрапамяназываемая, ицатакжеи

 

страничнымблокомпамяти.Накомпроцессорамиьютрах

 

Intel

объемстраничногоблока

равенКб4.

 

 

 

 

 

 

 

 

 

Памятьфайлаподкачки

 

 

 

Страничнфайл,которназтакжеыфйвйподкачкийломется

 

,

в Windows находится

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

 

 

 

память,ноегообъемобычнопревышаетобъемфизическойпамяти

 

. Windows используетфайл

подкачкиилифайлы( ,ихможбытьнесколько)дляхраиненияформации,котораяне

 

 

 

помещаетсяв

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

 

 

RAM.

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

 

 

адресамивфайле

подкачки,чемсадресамиф зичеспамяти.Когдатакоесоглайдостигается,ование

 

 

говорят,что

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

 

 

 

подкачки.

 

 

 

 

 

Наборвиртуальныхадресовможе

тпроецироваться

нафизическуюп

амять,файлподкачки

3

илюбойифайл.

 

 

 

 

Адресноепространпроцессатво

 

КаждыйпроцессWin32получаетвиртуальноеадресноепрос

транство,

объемкоторогоравен

4Гб.Такимобразможет,кодпр цессассылатьсян

адресаН&00000000по&HFFFF

FFFF

(илиспо02

32 - 1 = 4 294 967вдесятичн295си числентеме)Конечно. ,йтаккаквияртуальные

 

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

 

 

виртуальноеадресноепространство,

выглядитдовольнобессмысленным

. Темменее,это

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

 

 

А,ипроцессВиспользуютодинтотжевиртуальныйадрес,например&Н40000000Вчастности, .

 

 

Windowsможетсопос

тавитьили(несопост)виртуалдресамвитькаждогопроцессанымразные

 

физичадр. ескиеа

 

 

 

 

Структураадресныхпространств86

 

Рис. 2. Структура виртуальныхадреспространствплатформе86

Распределениевиртуальнойпамяти

Каждстрвиртуаницаяльно

адресногопространстваможетнаходизтрехномиться

состояний:

 

4

Reserved (зарезервирована) - стрзаницарезервированадляиспользов; ния

Committed (передана) - дляданнойвиртуальнойстраницывыделенафизическаяпамять

файлеподкачкииливфайле,

тображаемомвпамять;

Free (свободна) - даннстраницанезарезервировянепередан,поэтомуаныйа

момнеадоступнантдляпроцесса.

Виртуальнаяпаможетбытьятьзарезервировилипереданспомощьювызована API-

функции VirtualAlloc:

LPVOID VirtualAlloc(

 

 

LPVOID IpAddress,

//Адресрезервилвыделяемойируемойобласти.

DWORD dwSise,

 

//Объемобласти.

DWORD flAllocationType,

//Типраспределения.

DWORD flProtect

//Типзащитыотдоступа.

);

Параметр flAllocationType можетпризначиматьслеконстантниядующдругихпом( );имо

MEM_RESERVE - па,раметрезервирующийобласадрестуального

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

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

йжефункции;

МЕМСОММ IТ - парам,выделяющийфизическуютрпамятьопераилимятитивной

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

однойоперацией.

Разделпроцедурзервированияпередачипамятиимн еткоторыепреимущества.

Например,резервированиепамятиявляочполезнпроцедуройтсяньст зрениячки практичности.Еслитребуетсяложениюбольшойобъемпа, ожнозарезервиряти оватьсю памя,выдетолькотучастьить,котораянужвдамоментаный,раздв,такимобр,г зомя временныерамкиболеетрудоемкойоперацвыделенияф зическойпам. ти

Windows тожеиспользуетэтотподход,когдавыпамелподстякаждогоетьвновь создаваемогопотока.СистемарезервирМб1виртпамятиуподетальнстеккаждпот,нойгока выдпервляетодвеначальнолькостраницы(8Кб).

Защитапамяти

Параметр flProtect функции virtualAlloc исподзаданияльзуетсятипазащитыотдоступа,

соответствующеговновьвыделенной( committed)виртуальпамяэтоне( тноик йсится резервируемойпамяти)Существуют. следуюметодызащиты: ие

PAGE_READONLY присваивадоступтолько«длячт»выделеннойниятвиртуальной

5

 

памяти;

 

 

PAGE_READWRITE назначаетдос« енуп

ие-запись»выделеннойвиртуальнойпамяти;

PAGE_WRITECOPY устанавливаетдоступзапись«копированием»сору(

-оnwrite)

 

выделеннойвиртуальнойпамяти.

 

 

PAGE_EXECUTE разрешаетдоступвыполнение« »

выделеннойвиртуальнойпамяти.Тем

 

менее,любаяпопыткачтения

- записиэтойпамятипривекнарушениюдоступает;

PAGE_EXECUTE_READ назначаетдоступвыполнение« »чтение« »;

PAGE_EXECUTE_READWRITE разрешаетдоступвыполнен« »,чтение«»зап« »;исье

PAGE_EXECUTE_WRITECOPY присваиваетдоступвыполнение« »,чтение»«з«

апись

 

копированием»;

 

 

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

 

Любыеизэтихзначений,заисключением

PAGE_NOACCESS,могуткомбинироватьсяпри

помощилогичоператораского

OR соследующивумяфлага: ми

 

PAGE_GUARD определяетпомечезащищенныестракакицы(

guard page)При.

 

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

 

 

ситуацию STATUS_GUARD_PAGE иснимаетданнойстраницыстатусзащищенной.

 

Такимобр,защищезомстраницыпредупрежданые

 

юттолькопервомобращениик

 

ним;

 

 

PAGE_NOCACHES запрещаеткэшированиевыделеннойпамяти.

Следуетобъяснизапись,ч акоедоступ« копир»Допу. ,некотораяваниемстраница

 

 

физическойпамятисовместноиспользуетдвумяпроцессами.Еслионапомеченая

 

кактолько«

длячтения»,тодвапроцесбезпроблеммогусовапользесэтострнойв.Однаконицейться

 

 

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

 

этупамять,нобез

воздействияна

другпр.Поцессуй тлезащитыновкизапись«

 

копи» рпоиваниемпытке

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

 

 

которомунужноосуществитьзапись.Такимобр,д страницаннзомпересябытьсовместноает

 

 

используемой,апредставлениеееданныхдругих

процессахстаетсянеизменным.

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

 

 

API-функции Virtual Protect.

 

 

 

Гранулярностьп асипамятиределении

 

Еслипараметр

IpAddress неявляекра64Кбт,тосистеманымя округляетук з

анныйадресв

меньшуюсторонудоближайшегочисла,кратного64Кб.

Windows всегдавырначальныйвнивает

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

 

цугрануляраспределенияности

,котораяявляетсячислом

кратным64Кбпри(использованиипроцессоров

Intel)Другими. сл

овами,начаадреслюбогоьный

блоказарезервирпамятипредсточисловбойкратноеннойвляет64Кб.

 

 

6

Крто, гомебъемвыделяемойпамяти

всегдакратенобъемусистемной

страницы,тоесть4

Кб.Поэтомуфункция

VirtualAlloc будетокруглятьлюбоезапрашиваемое

количествобайтов

большуюсторонудоближайшегочисла,кратногообъемустраницы.

 

 

Дескрипторвиртуальныхадресов

Системаотслеживает,какиз ртуальныхстраницявляютсязарезервированными,при

помощиструктуры,называемойдескрипторомвиртуальныхадре сов( Virtual Address Descriptor - VAD). Другогосп пределсобанесущ. ествуетния

Примериспользованияфункции

GlobalMemoryStatus

API-функция GlobalMemoryStatus,записывающаясятакимобразом:

в Delphi:

procedure GlobalMemoryStatus(var lpBuffer: TMemoryStatus); stdcall; procedure GlobalMemoryStatus; external kernel32 name 'GlobalMemoryStatus';

вывомножестводанныхит,имеющихотношенкпамяти,всослтавеструктурыдующей:

 

struct_MEMORYSTATUS {

 

DWORD dwLength;

// Размер структуры MEMORYSTATUS.

DWORD dwMernoryLoad;

//Процентиспользуемойпамяти.

 

DWORD dwTotalPhys;

 

//Количествобайтовфизическойпамяти.

 

DWORD dwАvailPhys;

 

//Количествосвободныхбайтовфизическойпамяти.

 

DWORD dwTotalPageFile;

// Размервбайтахфа

йлаподкачки.

DWORD dwAvailPageFile;

//Количествосвободныхбайтфайлап .дкачки

 

DWORD dwTotalVirtual;

 

//Количествобайтовадресногопространства,

 

//доступнпользователю. го

 

DWORD dwAvailvirtual;

 

//Количест свободныхбайтовпамяти,

//доступныхпользователю.

 

End Type

В Delphi: _MEMORYSTATUS = record

dwLength: DWORD; dwMemoryLoad: DWORD; dwTotalPhys: DWORD; dwAvailPhys: DWORD; dwTotalPageFile: DWORD; dwAvailPageFile: DWORD;

7

dwTotalVirtual: DWORD;

 

 

dwAvailVirtual: DWORD;

 

 

end;

 

 

 

 

 

Управлениевиртуальнойпамятью

 

Рассмотрим,какдиспетчервиртуальнойпамяти

Windows преобразуетадресавиртуальной

памятифиз.

ческие

 

 

 

Преобвиртуальныхзованиедресовфизические:поп

 

адание

Нарисункепоказанпроцпреобразовссприотображениивиртуальныхадресовния

 

 

физические.Онназываетсяпопаданифизич( )страницуе(мскую

 

page hit).

Всевиртуаадресаделятнатриьныечасти.Самлеваябитыясть( 22

 

-31)содержит

индекската

логастраницпроцесса.

Windows поддерживаетотдельныйкаталогстраницдля

каждопроцесса.Еадгохранводномирегистровзтсяцентп альногооцессора,который

 

 

называется CR3В.операцию( переключениязадачвходитпереведение

 

CR3всост,когдаяние

указываетнакаталогстрапроцесса,нкоторыйицосуществляяпереключение.Каталог) страниц

 

 

одержит1024четырехбайэлемен. таовых

 

 

Windows поддкаляерпроцессаждогоиваетсовокупностьтаблицстраниц(

 

page table).

Каждыйэлементкаталстраницодержига

 

туникальныйномер.Поэтому

Windows поддерживает

до1024таблицстраниц.Вдейс( таблицывистраницсоздаюельностолькоприпопыткеися

 

 

обращениякданнымиликодуконкревирадртуальному, когдаесувыделяется

 

 

виртуальнаяпамять).

 

 

 

Следующаячас

тьвиртуальногоадресабиты( 12

-21)используетсявкачествеиндекса

таблицестраниц,соответствующейыбранномуэлементкаталогастраниц.Каждыйэлемент

 

 

таблицы,соответствующийуказанномуиндек,содержит20таршихразрядахномер

 

 

страничногоблока,

которыйзадаетконкретныйстранблокфичныйзическойпамяти.

 

Третья,ипоследняя,частьвиртуаль

ногоадресабиты( 0

-11)предсобойтамещениевляет

данномстраничномблоке.Сочетаниеномерастраничногоблокасмещениядаютвсовокупности

 

 

адресфизическойпамяти.

 

 

 

8

 

 

 

 

 

 

 

)

 

 

 

 

 

 

 

22 21

12 11

0

 

 

 

 

 

 

 

 

 

 

Регистр

 

 

 

Индекс

 

 

 

Смещение

 

 

 

 

 

CR3

 

 

 

вкаталоге

 

в

 

вблоке

 

процессора

 

 

 

страниц

 

 

 

страницы

 

 

 

 

 

 

 

 

 

 

 

Каталогстраниц

Таблицыстраниц

Блоки страницы

Номер

страницы

Физический

 

адрес

4096

байт

иколичествотаблицравно1024,

10 байт,то

 

4х2 30 =Гб.4

 

.

из

 

.

мятиКб4, ,скажем

 

еса

 

впрограмомуже е

жепредставляютиндексы

каталогов

адреса

адресадвух

,одинаковыми

и

- соответствующий

элементвобоихкаталстрноаднуницгахтужетаблицустр

 

 

аниц,след,наовательнодин

тотжестраничныйблок.Такимобразом,процессымогутсовместноиспользоватьфизическую

 

 

 

память.

 

 

 

 

 

 

 

Каитаблицысистемлогстраницых

 

 

Нужнотакжеуп,чтомянуть

Windows поддерживаеткаталогсистемстра( ныхиц

system

page directory)дляработысвиртуальнойпамятью,зарезервированной

 

 

Windows,также, иак

соответствующуюсовокупностьтаблицсистемстра. ыхиц

 

 

 

 

 

 

Совмеиспользуемстраницыное

 

 

Ситуацияссовместноиспользуемойфизическойпамятьюявляетсязначитболеельно

 

 

 

сложной,небудемуглублявдетали,отметимолькоься,что

 

 

 

VMM испконцепциюльзует,

называемуюпрототипировэлементовтаблицыстраниц.Идеяз ниемключаетсявтом,что

 

 

 

 

обычныеэлементытаблкаждогоисовместнозцыиспользпамятьпроцессовующихказываютне

 

 

 

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

 

 

 

можетссылатьсянасовместноиспользуемуюфизическуюпамять.

 

 

 

 

 

 

Рабочиенаборы

 

 

КаждстрвиртуаницаяадреспространльногобъемомцеГб4существуеттваса

 

 

 

одномизтрехсостояний

- свободном(

free),зарезервированном(

reserved)илипереданном

(committed)Теперь. можнотакжесказ,чтоапередаждаятьстраница( ная

 

 

committed page)

являилидейтс,илянедействительнойтельндействительныхи .Сов купностьстра

 

 

ниц,то

естьпроецнафизическуюровпамять,н зыврабочимнныхборамют(

 

 

 

working set)процесса.

Рабочийнаборпостоянноменямеретого,кактсястраницыподкачиваютсяпамятьили

 

 

 

выполняеобратноедействие. ся

 

 

 

 

 

Системныйрабочийнабор(

system

working

set)характеризуетвиртуальныестраницы

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

 

 

 

 

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

 

 

Windows

взависимостиотобъемафизическойп .Этимятизначе

 

 

нияприведены

следующейтаблице.

Модель

Объем

Минимальныйразмеррабочего

 

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

памяти

памяти

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

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

Small

<=19Мб

20страниц(80Кб)

 

45страниц(180Кб)

Medium

20-32Мб

30страниц(120Кб)

 

145страниц(580Кб)

Large

>=Мб33

50страниц

(200Кб)

345страниц(1380Кб)

Этипределымогутбытьизмененыспомощью

 

 

API-функции

 

SetProcessWorkingSetSize:

 

 

 

10