|
памяти; |
|
|
• |
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