Лабораторные работы / Задания / ЛР 4 АРХИТЕКТУРА ПАМЯТИ WINDOWS
.pdf
|
|
Лабораторная работа№ |
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