ñòàòüèGNU Free Documentation License ìàòåðèàëû âçÿòû èç Âèêèïåäèè Ñòàòüÿ áûëà èçìåíåíà. Îðèãèíàë ñòàòüè.

Çàùèòà ïàìÿòè

Ìàòåðèàë èç Ýíöèêëîïåäèè â ñâîáîäíîé ýíöèêëîïåäèè
Ïåðåéòè ê: íàâèãàöèÿ, ïîèñê

Çàùèòà ïàìÿòè (àíãë. Memory protection) â ýòî ñïîñîá óïðàâëåíèÿ ïðàâàìè äîñòóïà ê îòäåëüíûì ðåãèîíàì ïàìÿòè. Èñïîëüçóåòñÿ áîëüøèíñòâîì ìíîãîçàäà÷íûõ îïåðàöèîííûõ ñèñòåì. Îñíîâíîé öåëüþ çàùèòû ïàìÿòè ÿâëÿåòñÿ çàïðåò äîñòóïà ïðîöåññó ê òîé ïàìÿòè, êîòîðàÿ íå âûäåëåíà äëÿ ýòîãî ïðîöåññà. Òàêèå çàïðåòû ïîâûøàþò íàäåæíîñòü ðàáîòû êàê ïðîãðàìì òàê è îïåðàöèîííûõ ñèñòåì, òàê êàê îøèáêà â îäíîé ïðîãðàììå íå ìîæåò ïîâëèÿòü íåïîñðåäñòâåííî íà ïàìÿòü äðóãèõ ïðèëîæåíèé. Ñëåäóåò ðàçëè÷àòü îáùèé ïðèíöèï çàùèòû ïàìÿòè è òåõíîëîãèè ASLR èëè NX-áèò.

Ñîäåðæàíèå

[ïðàâèòü] Ìåòîäû

×àùå âñåãî ðåàëèçóåòñÿ â ðàìêàõ âèðòóàëüíîé àäðåñàöèè ïàìÿòè.

[ïðàâèòü] Ñåãìåíòèðîâàíèå ïàìÿòè

Ñåãìåíòèðîâàíèå ïàìÿòè îçíà÷àåò ðàçáèåíèå êîìïüþòåðíîé ïàìÿòè íà ôðàãìåíòû ïåðåìåííîé äëèíû, íàçûâàåìûå ñåãìåíòàìè.

 àðõèòåêòóðå x86 åñòü íåñêîëüêî ðåæèìîâ ñåãìåíòàöèè, êîòîðûå ìîãóò èñïîëüçîâàòüñÿ äëÿ çàùèòû ïàìÿòè.[1]  ïðîöåññîðàõ àðõèòåêòóðû x86, ñóùåñòâóþò Global Descriptor Table è Local Descriptor Table, îïèñûâàþùèå ñåãìåíòû ïàìÿòè. Óêàçàòåëè íà ñåãìåíòû â ïîäîáíûõ ïðîöåññîðàõ õðàíÿòñÿ â ñïåöèàëèçèðîâàííûõ ñåãìåíòíûõ ðåãèñòðàõ. Èçíà÷àëüíî èõ áûëî 4: CS (code segment), SS (stack segment), DS (data segment) è ES (extra segment); çàòåì äîáàâèëè åùå äâà: FS è GS.[1]

[ïðàâèòü] Ñòðàíè÷íàÿ ïàìÿòü

Ïðè ñòðàíè÷íîé îðãàíèçàöèè ïàìÿòè, âñå àäðåñíîå ïðîñòðàíñòâî äåëèòñÿ íà ôðàãìåíòû ôèêñèðîâàííîãî ðàçìåðà, íàçûâàåìûå ñòðàíèöàìè. Èõ ðàçìåð êðàòåí ñòåïåíè 2, è îáû÷íî ðàâåí 4096, íî âîçìîæíî èñïîëüçîâàíèå îäíîâðåìåííî íåñêîëüêèõ ðàçìåðîâ ñòðàíèö (4 êá, 2-4ÌÁ â x86, îò 4 äî 256 êá â IA64). Ïðè ïîìîùè ìåõàíèçìà âèðòóàëüíîé ïàìÿòè, êàæäàÿ ñòðàíèöà âèðòóàëüíîé ïàìÿòè ìîæåò áûòü ïîñòàâëåíà â ñîîòâåòñòâèå ëþáîé ñòðàíèöå ôèçè÷åñêîé ïàìÿòè, ëèáî ïîìå÷åíà êàê çàùèùåííàÿ. Ïðè ïîìîùè âèðòóàëüíîé ïàìÿòè âîçìîæíî èñïîëüçîâàíèå ëèíåéíîãî àäðåñíîãî ïðîñòðàíñòâà âèðòóàëüíîé ïàìÿòè, êîòîðîå íà ñàìîì äåëå îáðàçîâàíî ôðàãìåíòèðîâàííûìè ó÷àñòêàìè àäðåñíîãî ïðîñòðàíñòâà ôèçè÷åñêîé ïàìÿòè.

Ìíîãèå àðõèòåêòóðû, èñïîëüçóþùèå ñòðàíè÷íóþ îðãàíèçàöèþ ïàìÿòè, â òîì ÷èñëå è íàèáîëåå ïîïóëÿðíàÿ x86, ðåàëèçóþò çàùèòó ïàìÿòè íà óðîâíå ñòðàíèö.

Òàáëèöà ñòðàíèö èñïîëüçóåòñÿ äëÿ óñòàíîâëåíèÿ ñîîòâåòñòâèÿ àäðåñîâ â âèðòóàëüíîé ïàìÿòè ôèçè÷åñêèì àäðåñàì. Îáû÷íî ýòà òàáëèöà íåâèäèìà äëÿ ïðîãðàììû. Âîçìîæíîñòü óñòàíîâêè â òàáëèöàõ ïðîèçâîëüíûõ îòîáðàæåíèé ïîçâîëÿåò ëåãêî âûäåëèòü íîâóþ ïàìÿòü, ò.ê. äîïîëíèòåëüíàÿ ñòðàíèöà, ðàñïîëîæåííàÿ â íóæíîì ìåñòå âèðòóàëüíîãî àäðåñíîãî ïðîñòðàíñòâà, ìîæåò áûòü îòîáðàæåíà íà ëþáóþ ñâîáîäíóþ ñòðàíèöó â îïåðàòèâíîé ïàìÿòè.

Ïðè òàêîì îòîáðàæåíèè, ïðèëîæåíèå íå èìååò âîçìîæíîñòè îáðàòèòüñÿ ê ñòðàíèöå, îòñóòñòâóþùåé â åå òàáëèöå ñòðàíèö. Åñëè ïðè îáðàùåíèè ïî ïðîèçâîëüíîìó àäðåñó íå áûëî íàéäåíî ïîäõîäÿùåå îòîáðàæåíèå, ïðîèñõîäèò èñêëþ÷èòåëüíàÿ ñèòóàöèÿ page fault (PF).

Ñëåäóåò çàìåòèòü, ÷òî page fault - ýòî íå ôàòàëüíîå ñîáûòèå. Ýòè ïðåðûâàíèÿ ìîãóò èñïîëüçîâàòüñÿ íå òîëüêî äëÿ çàùèòû ïàìÿòè, íî è äðóãèìè ñïîñîáàìè. Òàê, ÎÑ, ïåðåõâàòèâ PF, ìîæåò çàãðóçèòü ñòðàíèöó â ïàìÿòü, íàïðèìåð, åñëè îíà áûëà ðàíåå âûãðóæåíà íà æåñòêèé äèñê â ïðîöåññå ïîäêà÷êè ñòðàíèö, ïîñëå ÷åãî ïðèëîæåíèå ìîæåò ïðîäîëæàòü ðàáîòó. Òàêàÿ ñõåìà ïîçâîëÿåò ïðîçðà÷íûì ñïîñîáîì óâåëè÷èòü êîëè÷åñòâî äîñòóïíîé ïðèëîæåíèÿì ïàìÿòè.


[ïðàâèòü] Ìåõàíèçì êëþ÷åé çàùèòû

Ïðèìåíÿëñÿ â System/360, Itanium è PA-RISC.

[ïðàâèòü] Ñèìóëÿöèÿ ñåãìåíòàöèè

[ïðàâèòü] Àäðåñàöèÿ îñíîâàííàÿ íà Capability

Capability-based addressing ðåäêî ïðèìåíÿåòñÿ â êîììåð÷åñêèõ êîìïüþòåðàõ.  ñèñòåìàõ ñ òàêîé çàùèòîé ïàìÿòè âìåñòî óêàçàòåëåé èñïîëüçóþòñÿ çàùèùåííûå îáúåêòû (íàçûâàåìûå capabilities), êîòîðûå ìîãóò áûòü ñîçäàíû ëèøü ïðèâèëåãèðîâàííûìè èíñòðóêöèÿìè, èñïîëíÿåìûìè ëèáî ÿäðîì ÎÑ ëèáî ñïåöèàëüíûìè ïðîöåññàìè. Èñïîëüçîâàíèå òàêîé çàùèòû ïîçâîëÿåò îãðàíè÷èâàòü äîñòóï ïðîöåññîâ ê ÷óæîé ïàìÿòè áåç èñïîëüçîâàíèÿ ðàçäåëüíûõ àäðåñíûõ ïðîñòðàíñòâ è ïåðåêëþ÷åíèé êîíòåêñòà (ñáðîñà TLB, èçìåíåíèÿ ãëîáàëüíûõ äåñêðèïòîðîâ). Èñïîëüçîâàëèñü â èññëåäîâàòåëüñêèõ ïðîåêòàõ KeyKOS, EROS; âèðòóàëüíûõ ìàøèíàõ Smalltalk è Java.

[ïðàâèòü] Îöåíêà óðîâíÿ çàùèòû

[ïðàâèòü] Çàùèòà ïàìÿòè â ðàçëè÷íûõ ÎÑ

Ñðåäè ÎÑ, ðåàëèçóþùèõ çàùèòó ïàìÿòè

Íåêîòîðûå ñòàðûå ÎÑ æåñòêîãî ðåàëüíîãî âðåìåíè íå èñïîëüçóþò çàùèòó ïàìÿòè, äàæå íà ïðîöåññîðàõ, ãäå ýòî âîçìîæíî. Ïðèìåðîì òàêîé ÎÑ ÿâëÿåòñÿ VxWorks âåðñèé äî 5 âêëþ÷èòåëüíî.

[ïðàâèòü] Ñì. òàêæå

[ïðàâèòü] Ïðèìå÷àíèÿ

  1. â‘ 1 2 Intel 64 and IA-32 Architectures Software Developer's Manuals: Volume 3A: System Programming Guide, Part 1; PDF

[ïðàâèòü] Ññûëêè

Ïðîñòðàíñòâà èì¸í

Âàðèàíòû
Ïðîñìîòðû
Äåéñòâèÿ