³ðòóàëüíà ïàì'ÿòü â Microsoft Windows h2>
Òóò
ìè ðîçãëÿíåìî àðõ³òåêòóðó ïàì'ÿò³, ÿêà çàñòîñîâóºòüñÿ â Microsoft Windows. p>
³ðòóàëüíå àäðåñíèé
ïðîñò³ð ïðîöåñó b> p>
Êîæíîìó
ïðîöåñó âèä³ëÿºòüñÿ âëàñíèé â³ðòóàëüíèé àäðåñíèé ïðîñò³ð. Äëÿ
32-ðîçðÿäíèõ ïðîöåñ³â éîãî ðîçì³ð ñêëàäຠ4 Ãá. ³äïîâ³äíî 32-á³òíèé
ïîêàæ÷èê ìîæå áóòè áóäü-ÿêèì ÷èñëîì â³ä 0x00000000 äî 0xFFFFFFFF. Âñüîãî, òàêèì
÷èíîì, ïîêàæ÷èê ìîæå ïðèéìàòè 4 294 967 296 çíà÷åíü, ùî ÿê ðàç ³
ïåðåêðèâຠ÷åòèðåõã³ãàáàéòîâèé ä³àïàçîí. Äëÿ 64-ðîçðÿäíèõ ïðîöåñ³â ðîçì³ð
àäðåñíîãî ïðîñòîðó äîð³âíþº 16 åêçàáàéò, îñê³ëüêè 64-á³òíèé âêàç³âíèê ìîæå
áóòè áóäü-ÿêèì ÷èñëîì â³ä 0x00000000 00000000 äî 0xFFFFFFFF FFFFFFFF ³ ïðèéìàòè 18
446 744 073 709 551 616 çíà÷åíü, îõîïëþþ÷è ä³àïàçîí â 16 åêçàáàéòîâ.Ïîñêîëüêó
êîæíîìó ïðîöåñó â³äâîäèòüñÿ çàêðèòå àäðåñíèé ïðîñò³ð, òî, êîëè â ïðîöåñ³
âèêîíóºòüñÿ ÿêèéñü ïîò³ê, â³í îòðèìóº äîñòóï ò³ëüêè äî ò³º¿ ïàì'ÿò³, ÿêà
íàëåæèòü éîãî ïðîöåñó. Ïàì'ÿòü, â³äâåäåíà ³íøèì ïðîöåñàì, ïðèõîâàíà â³ä öüîãî
ïîòîêó ³ íåäîñòóïíà éîìó. Ó Windows 2000 ïàì'ÿòü, ùî íàëåæèòü âëàñíå
îïåðàö³éí³é ñèñòåì³, òåæ ïðèõîâàíà â³ä áóäü-ÿêîãî âèêîíóºòüñÿ ïîòîêó. ²íøèìè ñëîâàìè,
í³ îäèí ïîò³ê íå ìîæå âèïàäêîâî ïîøêîäèòè ¿¿ äàííèå. Windows 2000, í³ îäèí
ïîò³ê íå ìîæå îòðèìàòè äîñòóï äî ïàì'ÿò³ ÷óæîãî ïðîöåñó. Îòæå, àäðåñíèé
ïðîñò³ð ïðîöåñó çàêðèòî. Çâ³äñè âèïëèâàº, ùî ïðîöåñ À ó ñâîºìó àäðåñíîìó
ïðîñòîð³ ìîæå çáåð³ãàòè ÿêóñü ñòðóêòóðó äàíèõ çà àäðåñîþ 0x12345678, ³
îäíî÷àñíî ó ïðîöåñó  çà ò³ºþ æ àäðåñîþ - àëå âæå â éîãî àäðåñíîìó
ïðîñòîð³ - ìîæå çíàõîäèòèñÿ çîâñ³ì ³íøà ñòðóêòóðà äàíèõ. Çâåðòàþ÷èñü äî
ïàì'ÿò³ çà àäðåñîþ 0x12345678, ïîòîêè, ùî âèêîíóþòüñÿ â ïðîöåñ³ À, îòðèìóþòü äîñòóï
äî ñòðóêòóðè äàíèõ ïðîöåñó À, Àëå, êîëè çà ò³ºþ æ àäðåñîþ çâåðòàþòüñÿ ïîòîêè,
âèêîíóâàí³ ï³ä ÷àñ Â, âîíè îòðèìóþòü äîñòóï äî ñòðóêòóðè äàíèõ ïðîöåñó Â.
²íàêøå êàæó÷è, ïîòîêè ïðîöåñó À íå ìîæóòü çâåðíóòèñÿ äî ñòðóêòóðè äàíèõ ó
àäðåñíîìó ïðîñòîð³ ïðîöåñó Â, ³ íàâïàêè p>
ßê àäðåñíèé ïðîñò³ð
ðîçáèâàºòüñÿ íà ðîçä³ëè b> p>
³ðòóàëüíå
àäðåñíèé ïðîñò³ð êîæíîãî ïðîöåñó ðîçáèâàºòüñÿ íà ðîçä³ëè. ¯õ ðîçì³ð ³
ïðèçíà÷åííÿ â ÿê³éñü ì³ð³ çàëåæàòü â³ä êîíêðåòíîãî ÿäðà Windows (òàáëèöÿ 13-1) p>
Ðîçä³ë p>
32-ðîçðÿäíà Windows 2000 (íà õ86 ³ Alpha) p>
32-ðîçðÿäíà Windows 2000 (íà õ86 ç êëþ÷åì/3GB) p>
64-ðîçðÿäíà Windows 2000 (íà Alpha ³ À-64) p>
Windows 98 p>
Äëÿ âèÿâëåííÿ p>
0x00000000 p>
0x00000000 p>
0x00000000 00000000 p>
0x00000000 p>
íóëüîâèõ ïîêàæ÷èê³â p>
0x0000FFFF p>
0x0000FFFF p>
0x00000000 0000FFFF p>
0x00000FFF p>
Äëÿ ñóì³ñíîñò³ ç ïðîãðàìàìè DOS ³ 16-ðîçðÿäíî¿ Windows
p>
Håò p>
ͳ p>
ͳ p>
0x00001000 0x003FFFFF p>
Äëÿ êîäó òà äàíèõ p>
0x00010000 p>
0x00010000 p>
0x00000000 00010000 p>
0x00400000 p>
ðåæèìó êîðèñòóâà÷à p>
0x7FFEFFFF p>
0xBFFFFFFF p>
0x000003FF FFFEFFFF p>
0x7FFFFFFF p>
Çàêðèòèé, p>
0x7FFF0000 p>
0xBFFF0000 p>
0x000003FF FFFF0000 p>
ͳ p>
ðîçì³ðîì 64 Êá p>
0x7FFFFFFF p>
0xBFFFFFFF p>
0x000003FF FFFFFFFF p>
Äëÿ çàãàëüíèõ MMF (ôàéë³â, ùî ïðîåêòóþòüñÿ â ïàì'ÿòü) p>
ͳ p>
ͳ p>
ͳ p>
0x80000000 0xBFFFFFFF p>
Äëÿ êîäó òà äàíèõ p>
0x800000000 p>
0xC0000000 p>
0x00000400 00000000 p>
0xC0000000 p>
ðåæèìó ÿäðà p>
0xFFFFFFFF p>
0xFFFFFFFF p>
0xFFFFFFFF FFFFFFFF p>
0xFFFFFFFF p>
Òàáëèöÿ
13-1. Òàê àäðåñíèé ïðîñò³ð ïðîöåñó ðîçáèâàºòüñÿ íà ðîçä³ëè p>
Ðîçä³ë äëÿ âèÿâëåííÿ íóëüîâèõ
ïîêàæ÷èê³â (Windows 2000 ³ Windows 98) b> p>
Öåé
ðîçä³ë àäðåñíîãî ïðîñòîðó ðåçåðâóºòüñÿ äëÿ òîãî, ùîá ïðîãðàì³ñòè ìîãëè
âèÿâëÿòè íóëüîâ³ ïîêàæ÷èêè. Áóäü-ÿêà ñïðîáà ÷èòàííÿ ÷è çàïèñó â ïàì'ÿòü çà öèìè
àäðåñàìè âèêëèêຠïîðóøåííÿ äîñòóïó. Äîñèòü ÷àñòî â ïðîãðàìàõ, íàïèñàíèõ íà
Ñ/Ñ + +, â³äñóòíÿ ñêðóïóëüîçíà îáðîáêè ïîìèëîê. Íàïðèêëàä, â íàñòóïíîìó
ôðàãìåíò³ êîäó òàêî¿ îáðîáêè âçàãàë³ íåìàº: p>
int *
pnSomeInteger = (int *) malloc (sizeof (int)); p>
* pnSomeInteger
= 5; p>
Ïðè íåäîñòà÷³ ïàì'ÿò³ malloc ïîâåðíå NULL. Ho êîä
íå âðàõîâóº öþ ìîæëèâ³ñòü ³ ïðè ïîìèëêó çâåðíåòüñÿ äî ïàì'ÿò³ çà àäðåñîþ
0x00000000 À îñê³ëüêè öåé ðîçä³ë àäðåñíîãî ïðîñòîðó çàáëîêîâàíèé,
âèíèêíå ïîðóøåííÿ äîñòóïó ³ äàíèé ïðîöåñ çàâåðøèòüñÿ Öÿ îñîáëèâ³ñòü
äîïîìàãຠïðîãðàì³ñòàì çíàõîäèòè "æó÷ê³â * â ñâî¿õ äîäàòêàõ.
Ó Windows 2000 ïðîãðàìè äëÿ MS-DOS ³ 16-ðîçðÿäíî¿ Windows
âèêîíóþòüñÿ ó âëàñíèõ àäðåñíèõ ïðîñòîðàõ; 32-ðîçðÿäí³ ïðîãðàìè
âïëèíóòè íà íèõ íå ìîæóòü. p>
Ðîçä³ë äëÿ êîäó òà äàíèõ ðåæèìó êîðèñòóâà÷à (Windows
2000 ³ Windows 98) p>
Â
öüîìó ðîçä³ë³ ðîçòàøîâóºòüñÿ çàêðèòà (íåïîä³ëüí³) ÷àñòèíà àäðåñíîãî
ïðîñòîðó ïðîöåñó. Æîäåí ïðîöåñ íå ìîæå îòðèìàòè äîñòóï äî äàíèõ
³íøîãî ïðîöåñó, ðîçì³ùåíèì ó öüîìó ðîçä³ë³. Îñíîâíèé îáñÿã äàíèõ,
ùî íàëåæàòü ïðîöåñó, çáåð³ãàºòüñÿ ñàìå òóò (öå ñòîñóºòüñÿ âñ³õ äîäàòê³â)
Òîìó ïðîãðàìè ìåíø çàëåæí³ â³ä âçàºìíèõ "êàïðèç³â", ³ âñÿ
ñèñòåìà ôóíêö³îíóº ñò³éê³øå. Ó Windows 2000 ñþäè çàâàíòàæóþòüñÿ âñ³ EXE-òà
DLL-ìîäóë³ Ó êîæíîìó ïðîöåñ³ ö³ DLL ìîæíà çàâàíòàæóâàòè çà ð³çíèìè àäðåñàìè â
ìåæàõ äàíîãî ðîçä³ëó, àëå òàê ðîáèòüñÿ âêðàé ð³äêî. Íà öåé æå ðîçä³ë
â³äîáðàæàþòüñÿ âñ³ ïðîåêòóþòüñÿ â ïàì'ÿòü ôàéëè, äîñòóïí³ äàíîìó ïðîöåñó. Ó
64-ðîçðÿäíî¿ Windows 2000 ÿäðî íàðåøò³ îòðèìຠòîé ïðîñò³ð, ùî éîìó
ïîòð³áíî íàñïðàâä³. p>
Çá³ëüøåííÿ
ðîçä³ëó äëÿ êîäó òà äàíèõ ðåæèìó êîðèñòóâà÷à äî 3 Ãá íà ïðîöåñîðàõ x86
(ò³ëüêè Windows 2000) p>
Microsoft ïåðåäáà÷èëà ó âåðñ³ÿõ Windows 2000
Advanced Server ³ Windows 2000 Data Center äëÿ ïðîöåñîð³â x86 ìîæëèâ³ñòü
çá³ëüøåííÿ öüîãî ïðîñòîðó äî 3 Ãá. Ùîá âñ³ ïðîöåñè âèêîðèñòîâóâàëè ðîçä³ë
äëÿ êîäó òà äàíèõ ðåæèìó êîðèñòóâà÷à ðîçì³ðîì 3 Ãá, à ðîçä³ë äëÿ êîäó òà
äàíèõ ðåæèìó ÿäðà - îáñÿãîì 1 Ãá, Âè ïîâèíí³ äîäàòè êëþ÷/3GB äî ïîòð³áíîãî çàïèñó
â ñèñòåìíîìó ôàéë³ Boot.ini. ßê âèãëÿäຠàäðåñíèé ïðîñò³ð ïðîöåñó â öüîìó
âèïàäêó, ïîêàçàíî ó ãðàô³ "32-ðîçðÿäíà Windows 2000 (íà x86 ç êëþ÷åì
/ 3GB) "òàáëèö³ 13-1. P>
Çìåíøåííÿ
ðîçä³ëó äëÿ êîäó òà äàíèõ ðåæèìó êîðèñòóâà÷à äî 2 Ãá â 64-ðîçðÿäíî¿
Windows 2000 p>
Áàãàòî
ðîçðîáíèê áàæຠÿêíàéøâèäøå ïåðåíåñòè ñâî¿ 32-ðàçðíäíèå ïðîãðàìè â
64-ðîçðÿäíó ñåðåäó. Àëå ó âèõ³äíîìó êîä³ áóäü-ÿêèõ ïðîãðàì ïîâíî òàêèõ ì³ñöü, äå
ïåðåäáà÷àºòüñÿ, ùî ïîêàæ÷èêè º 32-ðîçðÿäíèìè çíà÷åííÿìè. Ïðîñòà
ïåðåêîìï³ëÿö³ÿ âèõ³äíîãî êîäó ïðèçâåäå äî ïîìèëêîâîãî óñ³êàííÿ ïîêàæ÷èê³â ³
íåêîðåêòíîãî ïîâîäæåííÿ äî ïàì'ÿò³. Îäíàê, ÿêùî á ñèñòåìà ÿêîñü ãàðàíòóâàëà,
ùî ïàì'ÿòü í³êîëè íå áóäå âèä³ëÿòèñÿ çà àäðåñàìè âèùå 0x00000000 7FFFFFFF,
äîäàòîê ïðàöþâàëî á íîðìàëüíî. ² óñ³êàííÿ 64-ðîçðÿäíî¿ àäðåñè äî
32-ðîçðÿäíîãî, êîëè ñòàðø³ 33 á³òè ð³âí³ 0, íå ñòâîðèëî á í³ÿêèõ ïðîáëåì.
Òàê îñü, ñèñòåìà äຠòàêó ãàðàíò³þ ï³ä ÷àñ çàïóñêó ïðîãðàìè â "àäðåñíî¿
ï³ñî÷íèö³ "(address space sandbox), ÿêà îáìåæóº êîðèñíå àäðåñíå
ïðîñò³ð ïðîöåñó äî íèæí³õ 2 Ãá. Çà çàìîâ÷óâàííÿì, êîëè Âè çàïóñêàºòå
64-ðîçðÿäíå äîäàòîê, ñèñòåìà ðåçåðâóº âñ³ àäðåñíèé ïðîñò³ð
ðåæèìó êîðèñòóâà÷à, ïî÷èíàþ÷è ç 0x0000000 80000000, ùî çàáåçïå÷óº
âèä³ëåííÿ ïàì'ÿò³ âèêëþ÷íî â íèæí³õ 2 Ãá 64-ðîçðÿäíîãî àäðåñíîãî
ïðîñòîðó. Öå ³ º "àäðåñíà ï³ñî÷íèöÿ". Á³ëüøîñò³ äîäàòê³â
öüîãî ïðîñòîðó á³ëüø í³æ äîñòàòíüî. À ùîá 64-ðîçðÿäíå ïðîãðàìà âèçíà÷àº
àäðåñóâàòèñÿ äî âñüîãî ðîçä³ëó ðåæèìó êîðèñòóâà÷à (îáñÿãîì 4 Òá), éîãî ñë³ä
ñêîìïîíóâàòè ç êëþ÷åì/LARGEADDRESSAWARE. p>
Çàêðèòèé ðîçä³ë ðîçì³ðîì 64 Êá (ò³ëüêè Windows 2000) p>
Öåé
ðîçä³ë çàáëîêîâàíèé, ³ áóäü-ÿêà ñïðîáà çâåðíåííÿ äî íüîãî ïðèçâîäèòü äî ïîðóøåííÿ
äîñòóïó Microsoft ðåçåðâóº öåé ðîçä³ë ñïåö³àëüíî, ùîá ñïðîñòèòè
âíóòð³øíþ ðåàë³çàö³þ îïåðàö³éíî¿ ñèñòåìè. Çãàäàéòå, êîëè Á. ïåðåäàºòå
Windows-ôóíêö³¿ àäðåñó áëîêó ïàì'ÿò³ ³ éîãî ðîçì³ð, òî âîíà (ôóíêö³ÿ), ïåðø ÷ñì
ïðèñòóïèòè äî ðîáîòè, ïåðåâ³ðÿº, ÷è ä³éñíèé äàíèé áëîê. Ïðèïóñòèìî, Âè
íàïèñàëè êîä: p>
BYTE
bBuf [70000]; DWORD dwNumBytesWritTen; WriteProcessMemory (GetCurrentProcess (),
(PVOID) 0x7FFEEE90, bBuf, sizeof (bBuf), & dwNumBytesWntten); p>
Â
âèïàäêó ôóíêö³é òèïó WriteProcessMemory îáëàñòü ïàì'ÿò³, äî ÿêî¿ ïåðåäáà÷àºòüñÿ
çàïèñ, ïåðåâ³ðÿºòüñÿ êîäîì, ùî ïðàöþº â ðåæèì³ ÿäðà, - ò³ëüêè â³í ìຠïðàâî
çâåðòàòèñÿ äî ïàì'ÿò³, ùî âèä³ëÿºòüñÿ ï³ä êîä ³ äàí³ ðåæèìó ÿäðà (â 32-ðîçðÿäíèõ
ñèñòåìàõ - çà àäðåñàìè âèùå 0x80000000). ßêùî çà ö³ºþ àäðåñîþ º ïàì'ÿòü, âèêëèê
WriteProcessMemory, ïîêàçàíèé âèùå, áëàãîïîëó÷íî çàïèøå äàí³ â òó îáëàñòü
ïàì'ÿò³, ÿêà, ïî ³äå¿, äîñòóïíà ò³ëüêè êîäó, ùî ïðàöþº â ðåæèì³ ÿäðà.
Ùîá çàïîá³ãòè öüîìó ³ â òîé æå ÷àñ ïðèñêîðèòè ïåðåâ³ðêó òàêèõ îáëàñòåé
ïàì'ÿò³, Microsoft ââàæàëà çà êðàùå çàáëîêóâàòè öåé ðîçä³ë, ³ òîìó áóäü-ÿêà
ñïðîáà ÷èòàííÿ àáî çàïèñó â íüîìó çàâæäè âèêëèêຠïîðóøåííÿ äîñòóïó. p>
Ðîçä³ë äëÿ êîäó òà äàíèõ ðåæèìó ÿäðà
(Windows 2000 ³ Windows 98) p>
Â
öåé ðîçä³ë ì³ñòèòüñÿ êîä îïåðàö³éíî¿ ñèñòåìè, ó òîìó ÷èñë³ äðàéâåðè ïðèñòðî¿â
³ êîä íèçüêîð³âíåâîãî óïðàâë³ííÿ ïîòîêàìè, ïàì'ÿòòþ, ôàéëîâîþ ñèñòåìîþ, ìåðåæåâèé
ï³äòðèìêîþ. Âñå, ùî çíàõîäèòüñÿ òóò, º áóäü-ÿêîìó ïðîöåñó. Ó Windows 2000
ö³ êîìïîíåíòè ïîâí³ñòþ çàõèùåí³. Ïîò³ê, ÿêèé ñïðîáóº çâåðíóòèñÿ ïî
îäí³ºþ ç àäðåñ ïàì'ÿò³ â öüîìó ðîçä³ë³, âèêëè÷å ïîðóøåííÿ äîñòóïó, à öå
ïðèçâåäå äî òîãî, ùî ñèñòåìà â ê³íöåâîìó ðàõóíêó ïðîñòî çàêðèº éîãî ïðîãðàìó.
64-ðîçðÿäíî¿ Windows 2000 ðîçä³ë ðåæèìó êîðèñòóâà÷à (4 Òá) âèãëÿäàº
íåïðîïîðö³éíî ìàëèì â ïîð³âíÿíí³ ç 16 777 212 Òá, â³äâåäåíèìè ï³ä ðîçä³ë
äëÿ êîäó òà äàíèõ ðåæèìó ÿäðà. Ñïðàâà íå â òîìó, ùî ÿäðà òàê âæå íåîáõ³äíî âñå
öå â³ðòóàëüíèé ïðîñò³ð, a ïðîñòî 64-ðîçðÿäíå àäðåñíèé ïðîñò³ð
íàñò³ëüêè âåëèêèé, ùî éîãî á³ëüøà ÷àñòèíà íå çàä³ÿíà. Ñèñòåìà äîçâîëÿº
íàøèì ïðîãðàìàì âèêîðèñòîâóâàòè 4 Òá, à ÿäðà - ñò³ëüêè, ñê³ëüêè éîìó ïîòð³áíî. Äî
ùàñòÿ, áóäü-ÿê³ âíóòð³øí³ ñòðóêòóðè äàíèõ äëÿ óïðàâë³ííÿ
íåçàä³ÿíèìè ÷àñòèíàìè ðîçä³ëó äëÿ êîäó òà äàíèõ ðåæèìó ÿäðà íå ïîòð³áí³. p>
Ðåã³îíè â àäðåñíîìó ïðîñòîð³ p>
Àäðåñíå
ïðîñò³ð, ùî âèä³ëÿºòüñÿ ïðîöåñó â ìîìåíò ñòâîðåííÿ, ïðàêòè÷íî âñ³ â³ëüíî
(íåçàðåçåðâ³ðîâàíî). Òîìó, ùîá ñêîðèñòàòèñÿ ÿêîþ-íåáóäü éîãî ÷àñòèíîþ,
ïîòð³áíî âèä³ëèòè â íüîìó ïåâí³ ðåã³îíè ÷åðåç ôóíêö³þ WirtualAlloc.Îïåðàö³ÿ
âèä³ëåííÿ ðåã³îíó íàçèâàºòüñÿ ðåçåðâóâàííÿì (reserving). Ïðè ðåçåðâóâàííÿ
ñèñòåìà îáîâ'ÿçêîâî âèð³âíþº ïî÷àòîê ðåã³îíó ç óðàõóâàííÿì òàê çâàíî¿
øîðñòêîãî âèä³ëåííÿ ïàì'ÿò³ (allocation granularity). Îñòàííÿ âåëè÷èíà â
ïðèíöèï³ çàëåæèòü â³ä òèïó ïðîöåñîðà, àëå äëÿ ïðîöåñîð³â, ùî ðîçãëÿäàþòüñÿ â êíèç³
(x86, 32 - ³ 64-ðîçðÿäíèõ Alpha ³ IA-64), - âîíà îäíàêîâà ³ ñòàíîâèòü 64
Êá.Ðåçåðâ³ðóÿ ðåã³îí â àäðåñíîìó ïðîñòîð³, ñèñòåìà çàáåçïå÷óº ùå é
êðàòí³ñòü ðîçì³ðó ðåã³îíó ðîçì³ðó ñòîð³íêè. Òàê íàçèâàºòüñÿ îäèíèöÿ îáñÿãó
ïàì'ÿò³, ùî âèêîðèñòîâóºòüñÿ ñèñòåìîþ ïðè óïðàâë³íí³ ïàì'ÿòòþ. ßê ³ øîðñòêîãî
âèä³ëåííÿ ðåñóðñ³â, ðîçì³ð ñòîð³íêè çàëåæèòü â³ä òèïó ïðîöåñîðà Çîêðåìà, äëÿ
ïðîöåñîð³â x86 â³í äîð³âíþº 4 Êá, à äëÿ Alpha (ï³ä êåðóâàííÿì ÿê 32-ðîçðÿäíî¿,
òàê ³ 64-ðàçÿäíîé Windows 2000) - 8 Êá. ²íîä³ ñèñòåìà ñàìà ðåçåðâóº
äåÿê³ ðåã³îíè àäðåñíîãî ïðîñòîðó â ³íòåðåñàõ.Åñë³ Âè ñïðîáóºòå
çàðåçåðâóâàòè ðåã³îí ðîçì³ðîì 10 Êá, ñèñòåìà àâòîìàòè÷íî îêðóãëèòè çàäàíèé
Âàìè çíà÷åííÿ äî á³ëüøî¿ êðàòíî¿ âåëè÷èíè. À çòî çíà÷èò ÷òî íà x86 áóäå
âèä³ëåíèé ðåã³îí ðîçì³ðîì 12 Êá, à íà Alpha - 16 Êá.Êîãäà çàðåçåðâîâàíèé
ðåã³îí àäðåñíîãî ïðîñòîðó ñòຠíå ïîòð³áåí, íåþ ñë³ä ïîâåðíóòè â çàãàëüí³
ðåñóðñè ñ³ñòåìè.Åòà îïåðàö³ÿ - çâ³ëüíåííÿ (releasing) ðåã³îíó --
çä³éñíþºòüñÿ âèêëèêîì ôóíêö³¿ VirtualFree p>
Ïåðåäà÷à ðåã³îíó ô³çè÷íî¿
ïàì'ÿò³ b> p>
Ùîá
çàðåçåðâîâàíèé ðåã³îí àäðåñíîãî ïðîñòîðó ìîæíà áóëî âèêîðèñòîâóâàòè, Âè
ïîâèíí³ âèä³ëèòè ô³çè÷íó ïàì'ÿòü ³ ñïðîåêòóâàòè ¿¿ íà öåé ðåã³îí. Òàêà
îïåðàö³ÿ íàçèâàºòüñÿ ïåðåäà÷åþ ô³çè÷íî¿ ïàì'ÿò³ (committing physical storage).
Ùîá ïåðåäàòè ô³çè÷íó ïàì'ÿòü çàðåçåðâîâàíîãî ðåã³îíó, Âè çâåðòàºòåñÿ âñå
äî ò³º¿ æ ôóíêö³¿ VirtualAlloc.Ïåðåäàâàÿ ô³çè÷íó ïàì'ÿòü ðåã³îíàõ, íåìຠïîòðåáè
â³äâîäèòè ¿¿ ö³ëîãî ðåã³îíó. Ìîæíà, ñêàæ³ìî, çàðåçåðâóâàòè ðåã³îí ðîçì³ðîì 64
Êá ³ íåðåäàòü ô³çè÷íó ïàì'ÿòü ò³ëüêè éîãî äðóãî¿ ³ ÷åòâåðòî¿ ñòîð³íîê. Êîëè
ô³çè÷íà ïàì'ÿòü, ïåðåäàíà çàðåçåðâîâàíîãî ðåã³îíó, á³ëüøå íå ïîòð³áíà, ¿¿
çâ³ëüíÿþòü. Öÿ îïåðàö³ÿ - ïîâåðíåííÿ ô³çè÷íî¿ ïàì'ÿò³ (decommitting physical
storage) - âèêîíóºòüñÿ âèêëèêîì ôóíêö³¿ VirtualFree.
p>
Ô³çè÷íó
ïàì'ÿòü ñë³ä ðîçãëÿäàòè ÿê äàí³, ùî çáåð³ãàþòüñÿ â äèñêîâîìó ôàéë³ ç
ñòîð³íêîâî¿ ñòðóêòóðîþ. Òîìó, êîëè ïðîãðàìà ïåðåäຠô³çè÷íó ïàì'ÿòü
ÿêîãî-íåáóäü ðåã³îíó àäðåñíîãî ïðîñòîðó (âèêëèêàþ÷è VirtualAttoc), âîíà íà
Íàñïðàâä³ âèä³ëÿºòüñÿ ç ôàéëó, ðîçì³ùåíîãî íà æîðñòêîìó äèñêó. Ðîçì³ð
ñòîð³íêîâîãî ôàéëó â ñèñòåì³ - ãîëîâíèé ôàêòîð, ùî âèçíà÷ຠê³ëüê³ñòü
ô³çè÷íî¿ ïàì'ÿò³, äîñòóïíå äîäàòê³â. Ðåàëüíèé îáñÿã îïåðàòèâíî¿ ïàì'ÿò³
ìຠíàáàãàòî ìåíøå çíà÷åííÿ.
Ô³çè÷íà ïàì'ÿòü â
ñòîð³íêîâîìó ôàéë³ íå çáåð³ãàºòüñÿ Windows 2000 ìîæå âèêîðèñòîâóâàòè äåê³ëüêà
ñòîð³íêîâèõ ôàéë³â, ³, ÿêùî âîíè ðîçòàøîâàí³ íà ð³çíèõ ô³çè÷íèõ äèñêàõ,
îïåðàö³éíà ñèñòåìà ïðàöþº íàáàãàòî øâèäøå, îñê³ëüêè çäàòíà âåñòè çàïèñ
îäíî÷àñíî íà äåê³ëüêîõ äèñêàõ. Ùîá äîäàòè àáî âèäàëèòè ñòîð³íêîâèé ôàéë,
â³äêðèéòå â Control Panel àïëåò System, âèáåð³òü âêëàäêó Advanced ³ êëàöí³òü
êíîïêó Performance Options. Ía åêðàí³ ç'ÿâèòüñÿ òàêå ä³àëîãîâå â³êíî. P>
p>
Îäíàê
ñèñòåìà 䳺 íå òàê, ³íàêøå äëÿ çàâàíòàæåííÿ òà ï³äãîòîâêè ïðîãðàìè äî çàïóñêó
éøëî á íàäòî áàãàòî âðåìåí³.Ïð³ çàïóñêó ïðîãðàìè ñèñòåìà â³äêðèâຠéîãî
âèêîíóâàíèé ôàéë ³ âèçíà÷ຠîáñÿã êîäó ³ äàíèõ. Ïîò³ì ðåçåðâóº ðåã³îí
àäðåñíîãî ïðîñòîðó ³ ïîçíà÷àº, ùî ô³çè÷íà ïàì'ÿòü, ïîâ'ÿçàíà ç öèì
ðåã³îíîì, - ñàì ÅÕÅ-ôàéë, òîáòî çàì³ñòü âèä³ëåííÿ ÿêîãîñü ïðîñòîðó ç
ñòîð³íêîâîãî ôàéëó ñèñòåìà âèêîðèñòîâóº ³ñòèííå âì³ñò, àáî îáðàç (image)
ÅÕÅ-ôàéëà ÿê çàðåçåðâîâàíèé ðåã³îí àäðåñíîãî ïðîñòîðó ïðîãðàìè.
Çàâäÿêè öüîìó ïðîãðàìà çàâàíòàæóºòüñÿ äóæå øâèäêî, à ðîçì³ð ñòîð³íêîâîãî ôàéëó
âäàºòüñÿ ïîì³òíî çìåíøèòè. Îáðàç âèêîíóâàíîãî ôàéëó (ò. e. EXE-àáî DLL-ôàéë),
ðîçì³ùåíèé íà æîðñòêîìó äèñêó ³ âæèâàºòüñÿ ÿê ô³çè÷íà ïàì'ÿòü äëÿ òîãî ÷è
³íøîãî ðåã³îíó àäðåñíîãî ïðîñòîðó, íàçèâàºòüñÿ ùî ïðîåêòóþòüñÿ â ïàì'ÿòü ôàéëîì
(memory-mapped file). Ïðè çàâàíòàæåíí³ EXF, àáî DLL ñèñòåìà àâòîìàòè÷íî
ðåçåðâóº ðåã³îí àäðåñíîãî ïðîñòîðó ³ ïðîåêòóº íà íüîãî îáðàç ôàéëó.
Êð³ì öüîãî, ñèñòåìà äîçâîëÿº (çà äîïîìîãîþ íàáîðó ôóíêö³é) ïðîåêòóâàòè íà
ðåã³îí àäðåñíîãî ïðîñòîðó ùå é ôàéëè äàíèõ p>
Êîëè
EXE-àáî DLL-ôàéë çàâàíòàæóºòüñÿ ç äèñêåòè Windows 2000 ö³ëêîì êîï³þþòü éîãî â
îïåðàòèâíó ïàì'ÿòü, à â ñòîð³íêîâîìó ôîòî âèä³ëÿþòü òàêèé ïðîñò³ð, ùîá ó
íüîìó ì³ã âì³ñòèòèñÿ îáðàç çàâàíòàæåííÿ. ßêùî íàâàíòàæåííÿ íà îïåðàòèâíó
ïàì'ÿòü â ñèñòåì³ íåâåëèêà, EXE-àáî DLLôàéë çàâæäè çàïóñêàºòüñÿ áåçïîñåðåäíüî
ç îïåðàòèâíî¿ ïàìÿò³.Òàê çðîáëåíî äëÿ êîðåêòíî¿ ðîáîòè ïðîãðàì óñòàíîâêè.
Çâè÷àéíî ïðîãðàìà óñòàíîâêè çàïóñêàºòüñÿ ç ïåðøîãî äèñêåòè, ïîò³ì ïî ÷åðç³
âñòàâëÿþòüñÿ íàñòóïí³ äèñêè, íà ÿêèõ, âëàñíå, ³ ì³ñòèòüñÿ âñòàíîâëþºòüñÿ
äîäàòîê. ßêùî ñèñòåì³ çíàäîáèòüñÿ ÿêèéñü ôðàãìåíò êîäó EXE-àáî DLLìîäóëÿ
ïðîãðàìè óñòàíîâêè, íà ïîòî÷íîìó äèñêåò³ éîãî, çâè÷àéíî æ, íåìàº. Àëå, îñê³ëüêè
ñèñòåìà ñêîï³þâàëà ôàéë â îïåðàòèâíó ïàì'ÿòü (³ ïåðåäáà÷èëà äëÿ íüîãî ì³ñöå â
ñòîð³íêîâîìó ôîòî), ó íå¿ íå âèíèêíå ïðîáëåì ç äîñòóïîì äî ïîòð³áíî¿ ÷àñòèíè êîäó
ïðîãðàìè óñòàíîâêè p>
Àòðèáóòè çàõèñòó p>
Îêðåìèì
ñòîð³íîê ô³çè÷íî¿ ïàì'ÿò³ ìîæíà ïðèñâî¿òè ñâî¿ àòðèáóòè çàõèñòó ïîêàçàí³ â
íàñòóïí³é òàáëèö³. p>
Àòðèáóò çàõèñòó p>
Îïèñ p>
PAGE_NOACCESS p>
Ñïðîáè ÷èòàííÿ, çàïèñó àáî âèêîíàííÿ âì³ñòó ïàì'ÿò³
íà ö³é ñòîð³íö³ âèêëèêàþòü ïîðóøåííÿ äîñòóïó p>
PAGE_READONLY p>
Ñïðîáè çàïèñó àáî âèêîíàííÿ âì³ñòó ïàì'ÿò³ íà ö³é
ñòîð³íö³ âèêëèêàþòü ïîðóøåííÿ äîñòóïó p>
PAGE_READWRITE p>
Ñïðîáè âèêîíàííÿ âì³ñòó ïàì'ÿò³ íà ö³é ñòîð³íö³
âèêëèêàþòü ïîðóøåííÿ äîñòóïó p>
PAGE_EXECUTE p>
Ñïðîáè ÷èòàííÿ àáî çàïèñó íà ö³é ñòîð³íö³ âèêëèêàþòü
ïîðóøåííÿ äîñòóïó p>
PAGE_EXECUTE_READ p>
Ñïðîáè çàïèñó íà ö³é ñòîð³íö³ âèêëèêàþòü ïîðóøåííÿ äîñòóïó
p>
PAGE_EXECUTE_READWRITE p>
Íà ö³é ñòîð³íö³ ìîæëèâ³ áóäü-ÿê³ îïåðàö³¿ p>
PAGE_WRITECOPY p>
Ñïðîáè âèêîíàííÿ âì³ñòó ïàì'ÿò³ íà ö³é ñòîð³íö³
âèáóâàþòü ïîðóøåííÿ äîñòóïó, ñïðîáà çàïèñó ïðèçâîäèòü äî òîãî, ùî ïðîöåñó
íàäàºòüñÿ "îñîáèñòà" êîï³ÿ äàíî¿ ñòîð³íêè p>
PAGE_EXECUTE_WRITECOPY p>
Íà ö³é ñòîð³íö³ ìîæëèâ³ áóäü-ÿê³ îïåðàö³¿, ñïðîáà çàïèñó
ïðèçâîäèòü äî òîãî, ùî ïðîöåñó íàäàºòüñÿ "îñîáèñòà" êîï³ÿ äàíî¿
ñòîð³íêè p>
Çàõèñò òèïó "êîï³þâàííÿ ïðè çàïèñ³" p>
Àòðèáóòè
çàõèñòó, ïåðåðàõîâàí³ â ïîïåðåäí³é òàáëèö³, äîñèòü çðîçóì³ë³, êð³ì äâîõ
îñòàíí³õ: PAGE_WRITECOPY ³ PAGE_EXECUTE_WRITECOPY. Âîíè ïðèçíà÷åí³
ñïåö³àëüíî äëÿ åêîíîìíîãî âèòðà÷àííÿ îïåðàò³âíîé ïàì'ÿò³ ³ ì³ñöÿ â ñòîð³íêîâîìó
ôàéë³. Windows ï³äòðèìóº ìåõÿí³çì, ùî äîçâîëÿº äâîì ³ á³ëüøå ïðîöåñàì
ðîçä³ëÿòè îäèí ³ òîé æå áëîê ïàì'ÿò³. Íàïðèêëàä, ÿêùî Âè çàïóñò³òü 10 ïðèì³ðíèê³â
ïðîãðàìè Notepad, âñ³ åêçåìïëÿðè áóäóòü ñï³ëüíî âèêîðèñòîâóâàòè îäí³ é ò³ æ
ñòîð³íêè ç êîäîì ³ äàíèìè ö³º¿ ïðîãðàìè. ² çâè÷àéíî í³êÿê³õ ïðîáëåì íå
âèíèêຠ- ïîêè ïðîöåñè í³÷îãî íå çàïèñóþòü ó çàãàëüí³ áëîêè ïàì'ÿò³. Ò³ëüêè
óÿâ³òü, ùî ä³ÿëîñÿ á ó ñèñòåì³, ÿêùî ïîòîêè ç ð³çíèõ ïðîöåñ³â ïî÷àëè
á îäíî÷àñíî çàïèñóâàòè â îäèí ³ òîé æå áëîê ïàì'ÿò³! p>
Ùîá
çàïîá³ãòè öåé õàîñ, îïåðàö³éíà ñèñòåìà ïðèâëàñíþº ñï³ëüíîãî áëîêó ïàì'ÿò³
àòðèáóò çàõèñòó "êîï³þâàííÿ ïðè çàïèñ³" (copy-on-write). Êîëè ïîò³ê
â îäíîìó ïðîöåñ³ ñïðîáóº ùî-íåáóäü çàïèñàòè â çàãàëüíèé áëîê ïàì'ÿò³, ó ñïðàâó òóò
æ òàêè âñòóïèòü ñèñòåìà ³ âèêîíຠíàñòóïí³ îïåðàö³¿: p>
Çíàéäå
â³ëüíó ñòîð³íêó â îïåðàòèâí³é ïàì'ÿò³. Çàóâàæòå, ùî ïðè ïåðø³é ïðîåêòóâàíí³
ìîäóëÿ íà àäðåñíèé ïðîñò³ð ïðîöåñó öÿ ñòîð³íêà áóäå ñêîï³éîâàíà íà îäíó
ç³ ñòîð³íîê, âèä³ëåíèõ ó ñòîð³íêîâîìó ôàéë³. Îñê³ëüêè ñèñòåìà âèä³ëÿº ïîòð³áíå
ïðîñò³ð ó ñòîð³íêîâîìó ôîòî ùå ïðè ïåðøîìó ïðîåêòóâàíí³ ìîäóëÿ, çáî¿ íà
öüîìó åòàï³ ìàëîéìîâ³ðí³. p>
ñêîï³þº
ñòîð³íêó ç äàíèìè, ÿê³ ïîò³ê íàìàãàºòüñÿ çàïèñàòè â çàãàëüíèé áëîê ïàì'ÿò³, íà
â³ëüíó ñòîð³íêó îïåðàòèâíî¿ ïàì'ÿò³, îòðèìàíó íà åòàï³ 1. Îñòàííüîþ
ïðèâëàñíþºòüñÿ àòðèáóò çàõèñòó PAGE_WRITECOPY àáî PAGE_EXECUTE_WRITECOPY. Àòðèáóò
çàõèñòó ³ âì³ñò âèõ³äíî¿ ñòîð³íêè íå çì³íþþòüñÿ. p>
Ïîêàçàòè
â³ðòóàëüíèé àäðåñó ö³º¿ ñòîð³íêè â ïðîöåñ³ íà íîâó ñòîð³íêó â îïåðàòèâí³é
ïàì'ÿò³. p>
Êîëè
ñèñòåìà âèêîíຠö³ îïåðàö³¿, ïðîöåñ îòðèìຠñâîþ êîï³þ ïîòð³áíî¿ ñòîð³íêè
ïàì'ÿò³. p>
Êð³ì
òîãî, ïðè ðåçåðâóâàííÿ àäðåñíîãî ïðîñòîðó àáî ïåðåäà÷³ ô³çè÷íî¿ ïàì'ÿò³
÷åðåç VirtualAlloc íå ìîæíà âêàçóâàòè àòðèáóòè PAGE_WRITECOPY àáî
PAGE_EXECUTE_WRITECOPY. ²íàêøå âèêëèê VirtualAlloc äàñòü ïîìèëêó, a GetLastError ïîâåðíå êîä ERROR_INVALID_PARAMETER. Ñïðàâà â òîìó, ùî ö³ äâà àòðèáóòè
âèêîðèñòîâóþòüñÿ îïåðàö³éíîþ ñèñòåìîþ, ò³ëüêè êîëè âîíà ïðîåêòóº îáðàçè EXE-àáî
DLL-ôàéë³â. p>
Áàçîâèé àäðåñà p>
Òèï p>
Ðîçì³ð p>
Áëîêè p>
Àòðèáóò (è) çàõèñòó p>
Îïèñ p>
00000000 p>
Free p>
65536 p>
00010000 p>
Private p>
4096 p>
1 p>
-RW- p>
00011000 p>
Free p>
G1440 p>
00020000 p>
Private p>
4096 p>
1 p>
-RW- p>
000? 1000 p>
Free p>
61440 p>
00030000 p>
Private p>
1048576 p>
3 p>
-HW- p>
Ñòåê ïîòîêó p>
00130000 p>
Private p>
1048576 p>
2 p>
-RW- p>
00230000 p>
Mapped p>
65536 p>
2 p>
-RW- p>
00240000 p>
Mapped p>
90112 p>
1 p>
-R- p>
DeviceHarddiskVolume1WINN7system32unicode.nls
p>
00256000 p>
Free p>
40960 p>
00260000 p>
Mapped p>
208896 p>
1 p>
-R- p>
DeviceHarddiskVolume1WINNTsystem32locale.nIs
p>
00293000 p>
Free p>
53248 p>
002A0000 p>
Happed p>
266240 p>
1 p>
-R- p>
PeviccHarddiskVolume1WINNTsystem32sortkey.nls
p>
002E1000 p>
Free p>
61440 p>
002F0000 p>
Mapped p>
16384 p>
1 p>
-R- p>
DeviceHarddiskVolume1WINNTsystem32sorttbls.nls
p>
002F4000 p>
Free p>
49152 p>
00300000 p>
Mapped p>
819200 p>
4 p>
ER- p>
0003Ñ8000 p>
Free p>
229376 p>
00400000 p>
Image p>
106496 p>
5 p>
ERWC p>
Ç CDx86Debug14_VMMap.åõå p>
0041A000 p>
Free p>
24576 p>
00420000 p>
Mapped p>
274432 p>
1 p>
-R- p>
00463000 p>
Free p>
53248 p>
00470000 p>
Mapped p>
3145728 p>
2 p>
ER p>
00770000 p>
Private p>
4096 p>
1 p>
-RW- p>
00771000 p>
Free p>
61440 p>
00780000 p>
Private p>
4096 p>
1 p>
-RW- p>
00781000 p>
Free p>
61440 p>
00790000 p>
Private p>
65536 p>
2 p>
-RW- p>
007A0000 p>
Mapped p>
8192 p>
1 p>
-R- p>
DeviceHarddiskVolume1WINNTsystem32ctype.nls
p>
007À2000 p>
Free p>
1763893248 p>
699D0000 p>
Image p>
45056 p>
4 p>
ERWC p>
C: WINNTSystpm32PSAPI
dll p>
6990Â000 p>
Free p>
238505984 p>
77D50000 p>
Image p>
450560 p>
4 p>
ERWC p>
Ñ: WINNTsystem32RPCRT4
DLL p>
770ÂÅ000 p>
Free p>
8192 p>
770Ñ0000 p>
Image p>
344064 p>
5 p>
ERWC p>
Ñ: WINNTsystem32ADVAPI32
dll p>
77Å14000 p>
Free p>
49152 p>
77E20000 p>
Image p>
401408 p>
4 p>
ERWC p>
C: WINNTsystem32USER32
dll p>
77Å82000 p>
Free p>
57344 p>
77Å90000 p>
Image p>
720896 p>
5 p>
ERWC p>
Ç WINNTsystem32KERNEL32.dll
p>
77F40000 p>
Image p>
241664 p>
4 p>
ERWC p>
Ç
WINKTsystem32GUI32 DLL p>
77F7Â000 p>
Free p>
20480 p>
77FB0000 p>
image p>
483328 p>
5 p>
ERWC p>
Ç
WINNTSystem32ntdll.dll p>
77FF000 p>
Free p>
40960 p>
78000000 p>
Image p>
290816 p>
6 p>
bMWC p>
Ç
WINNTsystem32MSVCRI.dll p>
78047000 p>
Free p>
124424192 p>
7F6F0000 p>
Mapped p>
1048576 p>
2 p>
ER - p>
7F7F0000 p>
Free p>
8126464 p>
7FFB0000 p>
Mapped p>
147456 p>
1 p>
-R - p>
7FFD4000 p>
Free p>
40960 p>
7FFDE000 p>
Private p>
4096 p>
1 p>
ERW- p>
7FFDF000 p>
Private p>
4096 p>
1 p>
ERW- p>
7FFE0000 p>
Private p>
65536 p>
2 p>
-R - p>
Òàáëèöÿ
13-2. Çðàçîê êàðòè àäðåñíîãî ïðîñòîðó ïðîöåñó â Windows 2000 íà
32-ðîçðÿäíèé ïðîöåñîð òèïó x86 p>
ϳä
äðóãîìó ïîë³ â³äîáðàæàºòüñÿ òèï ðåã³îíó Free (â³ëüíèé), Private (çàêðèòèé),
Image (îáðàç) àáî Mapped (ùî ïðîåêòóºòüñÿ). Ö³ òèïè îïèñàí³ â ö³é òàáëèö³, p>
Òèï p>
Îïèñ p>
Free p>
Öåé ä³àïàçîí â³ðòóàëüíèõ àäðåñ íå ï³äòâåðäæåíî í³ ç
ÿêèì òèïîì ô³çè÷íî¿ ïàì'ÿò³. Éîãî àäðåñíèé ïðîñò³ð íå çàðåçåðâîâàíî,
äîäàòîê ìîæå çàðåçåðâóâàòè ðåã³îí çà âêàçàíîþ àäðåñîþ àáî ó áàçîâîìó
áóäü-ÿêîìó ì³ñö³ â ìåæàõ â³ëüíîãî ðåã³îíó p>
Private p>
Öåé ä³àïàçîí â³ðòóàëüíèõ àäðåñ ñîïîñòàâëåí ç
ñòîð³íêîâèì ôàéëîì. p>
Image p>
Öåé ä³àïàçîí â³ðòóàëüíèõ àäðåñ â³ä ïî÷àòêó áóâ
ï³äòâåðäæåíî ÷èíîì ÅÕÅ-àáî DLL-ôàéëó, ïðîåêòîâàíîãî â ïàì'ÿòü, àëå òåïåð,
ìîæëèâî, âæå íåìàº. Íàïðèêëàä, ïðè çàïèñ³ â ãëîáàëüíó çì³ííó ç îáðàçó
ìîäóëÿ ìåõàí³çì ï³äòðèìêè "êîï³þâàííÿ ïðè çàïèñ³" âèä³ëÿº
â³äïîâ³äíó ñòîð³íêó ïàì'ÿò³ ç ñòîð³íêîâîãî ôàéëó, à íå îðèã³íàë îáðàçó
ôàéëó. p>
Mapped p>
Öåé ä³àïàçîí â³ðòóàëüíèõ àäðåñ â³ä ïî÷àòêó áóâ
ñîïîñòàâëåí ç ôàéëîì äàíèõ, ùî ïðîåêòóþòüñÿ â ïàì'ÿòü, àëå òåïåð, ìîæëèâî, âæå
íåìàº. Íàïðèêëàä, ôàéë äàíèõ ì³ã áóòè ñïðîåêòîâàíà ç âèêîðèñòàííÿì ìåõàí³çìó
ï³äòðèìêè "êîï³þâàííÿ ïðè çàïèñó". Áóäü-ÿê³ îïåðàö³¿ çàïèñó â öåé
ôàéë ïðèâåäóòü äî òîãî, ùî â³äïîâ³äí³ ñòîð³íêè ïàì'ÿò³ áóäóòü âèä³ëåí³ ç
ñòîð³íêîâîãî ôàéëó, à íå ç âèõ³äíîãî ôàéëó äàíèõ. p>
Â
òðåòüîìó ïîë³ ïîâ³äîìëÿºòüñÿ ðîçì³ð ðåã³îíó â áàéòàõ. Íàïðèêëàä, ñèñòåìà
ñïðîåêòóâàëè îáðàç User32.dll çà àäðåñîþ 0x77E20000. Êîëè âîíà ðåçåðâóâàëà
àäðåñíèé ïðîñò³ð äëÿ öüîãî îáðàçó, ¿é çíàäîáèëîñÿ 401 408 áàéò³â. ×è íå
çàáóäüòå, ùî â òðåòüîìó ïîë³ çàâæäè ì³ñòÿòüñÿ çíà÷åííÿ, êðàòí³ ðîçì³ðîì
ñòîð³íêè, õàðàêòåðíîìó äëÿ äàíîãî ïðîöåñîðà (4096 áàéò³â äëÿ x86). Ó ÷åòâåðòîìó
ïîëå ïîêàçàíî ê³ëüê³ñòü áëîê³â ó çàðåçåðâîâàíå ðåã³îí³. Áëîê - öå
íåðîçðèâíèé ãðóïà ñòîð³íîê ç îäíàêîâèìè àòðèáóòàìè çàõèñòó, ïîâ'ÿçàíà ç îäíèì ³
òèì æå òèïîì ô³çè÷íî¿ ïàì'ÿò³. Äëÿ â³ëüíèõ ðåã³îí³â öå çíà÷åííÿ çàâæäè
äîð³âíþº 0, òîìó ùî ¿ì íå ïåðåäàºòüñÿ ô³çè÷íà ïàì'ÿòü. (Òîìó ó ÷åòâåðò³é ãðàô³
í³ÿêèõ äàíèõ äëÿ â³ëüíèõ ðåã³îí³â íå íàâîäèòüñÿ.) Àëå äëÿ çàéíÿòèõ ðåã³îí³â
öå çíà÷åííÿ ìîæå êîëèâàòèñÿ â ìåæàõ â³ä 1 äî ìàêñèìóìó (éîãî îá÷èñëþþòü
ïîä³ëîì ðîçì³ðó ðåã³îíó íà ðîçì³ð ñòîð³íêè). Ñêàæ³ìî, ó ðåã³îíó, ùî ïî÷èíàºòüñÿ
ç àäðåñè Ox77E20000, ðîçì³ð - 401 408 áàéò³â. Îñê³ëüêè ïðîöåñ âèêîíóºòüñÿ íà
ïðîöåñîð³ x86 (ñòîð³íêè ïàì'ÿò³ ïî 4096 áàéò³â), ìàêñèìàëüíà ê³ëüê³ñòü áëîê³â
â öüîìó ðåã³îí³ îäíî 98 (401 408/4096); íó à, ñóäÿ÷è ïî êàðò³, â íüîìó ì³ñòèòüñÿ 4
áëîêó. p>
Â
ï'ÿòà ïîë³ - àòðèáóòè çàõèñòó ðåã³îíó. Òóò âèêîðèñòîâóþòüñÿ òàê³ ñêîðî÷åííÿ:
E - execute (âèêîíàííÿ), R - read (÷èòàííÿ), W - write (çàïèñ), Ñ --
copy-onwrite (êîï³þâàííÿ ïðè çàïèñ³). ßêùî í³ îäèí ç àòðèáóò³â â ö³é ãðàô³
íå âêàçàíèé, ðåã³îí äîñòóïíèé áåç îáìåæåíü. Àòðèáóòè çàõèñòó íå ïðèñâîþþòüñÿ ³
â³ëüíèì ðåã³îíàõ. Êð³ì òîãî, òóò Âè í³êîëè íå ïîáà÷èòå ïðàïîð³â àòðèáóò³â
çàõèñòó PAGE_ GUARD àáî PAGE_NOCACHE - âîíè ìàþòü ñåíñ ò³ëüêè äëÿ ô³çè÷íî¿
ïàì'ÿò³, à íå äëÿ çàðåçåðâîâàíîãî àäðåñíîãî ïðîñòîðó. Àòðèáóòè çàõèñòó
ïðèñâîþþòüñÿ ðåã³îíàõ ò³ëüêè åôåêòèâíîñò³ ðàäè ³ çàâæäè çàì³ùàþòüñÿ àòðèáóòàìè
çàõèñòó, ïðèñâîºíèìè ô³çè÷íî¿ ïàì'ÿò³. p>
Â
øîñòîìó (³ îñòàííüîìó) ïîëå êîðîòêî îïèñóºòüñÿ âì³ñò ïîòî÷íîãî ðåã³îíó. Äëÿ
â³ëüíèõ ðåã³îí³â âîíî çàâæäè ïóñòå, à äëÿ çàêðèòèõ - çàçâè÷àé ïóñòå p>
Áëîêè âñåðåäèí³ ðåã³îí³â p>
Ñïðîáóºìî
çá³ëüøèòè äåòàë³çàö³þ àäðåñíîãî ïðîñòîðó (â ïîð³âíÿíí³ ç òèì, ùî ïîêàçàíî
ó òàáëèö³ 13-2). Íàïðèêëàä, òàáëèöÿ 13-3 ïîêàçóº òó ñàìó êàðòó àäðåñíîãî ïðîñòîðó,
àëå â ³íøîìó "ìàñøòàá³": ïî í³é ìîæíà ä³çíàòèñÿ, ç ÿêèõ áëîê³â ñêëàäàºòüñÿ
êîæåí ðåã³îí. p>
Áàçîâèé àäðåñà p>
Òèï p>
Ðîçì³ð p>
Áëîêè p>
Àòðèáóò (è) çàõèñòó p>
Îïèñ p>
00000000 p>
Free p>
65536 p>
00010000 p>
Private p>
4096 p>
1 p>
-RW- p>
00010000 p>
Private p>
4096 p>
-RW- p>
00011000 p>
Free p>
61440 p>
00020000 p>
Private p>
4096 p>
1 p>
-HW- p>
00020000 p>
Private p>
4096 p>
-HW---- p>
00021000 p>
Free p>
61440 p>
00030000 p>
Private p>
1048576 p>
3 p>
-RW- p>
Ñòåê ïîòîêó p>
00030000 p>
Reserve p>
905216 p>
-RW-s- p>
0010D000 p>
Private p>
4096 p>
-RW-G- p>
0010E000 p>
Private p>
139264 p>
-RW---- p>
00130000 p>
Private p>
1048576 p>
? p>
-RW- p>
00130000 p>
Private p>
36864 p>
-RW---- p>
00139000 p>
Reserve p>
1011712 p>
-RW---- p>
00230000 p>
Mapped p>
65536 p>
2 p>
-RW- p>
00230000 p>
Mapped p>
4096 p>
-RW-- p>
00231000 p>
Reserve p>
61440 p>
-RW---- p>
00240000 p>
Mapped p>
90112 p>
1 p>
-R - p>
DeviceHarddiskVoluume1WTNNTsystem32unicode.nls
p>
00240000 p>
Happed p>
90112 p>
R p>
00256000 p>
Free p>
409GO p>
00260000 p>
Mapped p>
208896 p>
1 p>
-R - p>
DeviceHarddiskVoluume1WTNNTsystem32locale.nls
p>
00260000 p>
Mapped p>
208896 p>
-R - --- p>
00293000 p>
Free p>
53248 p>
002À0000 p>
Happed p>
266240 p>
1 p>
-R - p>
DeviceHarddiskVoluume1WTNNTsystem32sortkey.nls
p>
002À0000 p>
Mapped p>
266240 p>
-R - --- p>
002Å1000 p>
Free p>
61440 p>
002F0000 p>
Mapped p>
16384 p>
1 p>
-R- p>
DeviceHarddiskVoluume1WTNNTsystem32sorttbls.nls
p>
002F0000 p>
Mapped p>
16384 p>
-R - --- p>
002F4000 p>
Free p>
49152 p>
00300000 p>
Mapped p>
819200 p>
4 p>
ER- p>
00300000 p>
Mapped p>
16384 p>
ÅR - --- p>
00304000 p>
Reserve p>
770048 p>
ER - --- p>
003C0000 p>
Mapped p>
8192 p>
ER - --- p>
ÎÎ3Ñ2000 p>
Reserve p>
24576 p>
ER - --- p>
ÎÎ3Ñ8000 p>
Free p>
229376 p>
00400000 p>
Image p>
106496 p>
5 p>
ERWC p>
Ñ: CDx86Debug14_VMMap.exe
p>
00400000 p>
Image p>
4096 p>
-R - --- p>
00401000 p>
Image p>
81920 p>
ÅR - --- p>
00415000 p>
Image p>
4096 p>
-R - --- p>
00416000 p>
Image p>
8192 p>
-RW---- p>
00418000 p>
Image p>
8192 p>
-R - --- p>
0041À000 p>
Free p>
24576 p>
00420000 p>
Mapped p>
274432 p>
1 p>
-R- p>
00420000 p>
Mapped p>
274432 p>
-R---- p>
00463000 p>
Free p>
53248 p>
00470000 p>
Mapped p>
3145726 p>
2 p>
ER - p>
00470000 p>
Mapped p>
274432 p>
ER - --- p>
004B3000 p>
Reserve p>
2871296 p>
ER - --- p>
00770000 p>
Private p>
4096 p>
1 p>
-RW---- p>
00770000 p>
Privale p>
4096 p>
-RW---- p>
00771000 p>
Free p>
61440 p>
00780000 p>
Pr ivate p>
4096 p>
1 p>
-RW---- p>
00780000 p>
Private p>
4096 p>
-RW---- p>
00781000 p>
Free p>
61440 p>
00790000 p>
Private p>
65536 p>
2 p>
-RW---- p>
00790000 p>
Private p>
20480 p>
-RW---- p>
00795000 p>
Reserve p>
45056 p>
-RW---- p>
007À0000 p>
Mapped p>
8192 p>
1 p>
-R - --- p>
DeviceHarddiskVolume1WINNTsystem32ctype.nls
p>
007À0000 p>
Mapped p>
8192 p>
-R - --- p>
007A2000 p>
Free p>
57344 p>
007Â0000 p>
Private p>
524288 p>
2 p>
-RW---- p>
007Â0000 p>
Private p>
4096 p>
-RW---- p>
007Â1000 p>
Reserve p>
520192 p>
-RW---- p>
00830000 p>
Free p>
1763311616 p>
699D0000 p>
Image p>
45056 p>
4 p>
ERWC p>
Ñ: WINNTSystern32PSAPI.dll
p>
699D0000 p>
Image p>
4096 p>
-R - --- p>
69901000 p>
Image p>
16384 p>
ER---- p>
699D5000 p>
Image p>
16384 p>
-RWC --- p>
699D9000 p>
Image p>
8192 p>
-R - --- p>
699DB000 p>
Free p>
238505984 p>
77D50000 p>
Imago p>
450560 p>
4 p>
ERWC p>
C: WINNTsystem32RPCRT4.DLL
p>
77D50000 p>
Image p>
4096 p>
-R - --- p>
77D51000 p>
image p>
421888 p>
ER - --- p>
77DB8000 p>
Image p>
409G p>
-RW---- p>
77DB9000 p>
Image p>
20480 p>
-R - --- p>
77DBE000 p>
Free p>
8192 p>
77DC0000 p>
Image p>
344064 p>
5 p>
ERWC p>
Ñ: WINNTsyatem32ADVAPI32.dll
p>
77DC0000 p>
Image p>
4096 p>
-R - --- p>
77DÑ1000 p>
Image p>
307200 p>
ER - --- p>
77Å0Ñ000 p>
Image p>
4096 p>
-RW---- p>
77E00000 p>
Image p>
4096 p>
-RWC --- p>
77Å0E000 p>
Image p>
24576 p>
-R - --- p>
77Å14000 p>
Free p>
49152 p>
77E20000 p>
Image p>
401408 p>
4 p>
ERWC p>
Ñ: WINNTsystem32USER32.dll
p>
/7Å20000 p>
Image p>
4096 p>
-R - --- p>
77Å21000 p>
Image p>
348160 p>
ER - --- p>
77Å76000 p>
Image p>
4096 p>
-RW---- p>
77Å77000 p>
Image p>
45056 p>
-R - --- p>
77Å82000 p>
Free p>
57344 p>
77Å90000 p>
Image p>
720896 p>
5 p>
ERWC p>
Ç
WINNTsystem32KERNEL32.dll p>
77Å90000 p>
Image p>
4096 p>
-R - --- p>
77Å91000 p>
Image p>
368640 p>
ER - --- p>
77ÅÅÂ000 p>
Image p>
8192 p>
-RW---- p>
77EED000 p>
Image p>
4096 p>
-RWC --- p>
77ÅÅÅ000 p>
Image p>
335872 p>
-R - --- p>
77F40000 p>
Image p>
241664 p>
4 p>
ERWC p>
Ç
WINNTsystem32GDI32.DLL p>
77F40000 p>
Image p>
4096 p>
-R - --- p>
77F41000 p>
Image p>
221184 p>
ER - --- p>
77F77000 p>
Image p>
409