Çàùèòà ïàìÿòè
Çàùèòà ïàìÿòè (àíãë. 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.
[ïðàâèòü] Îöåíêà óðîâíÿ çàùèòû
[ïðàâèòü] Çàùèòà ïàìÿòè â ðàçëè÷íûõ ÎÑ
Ñðåäè ÎÑ, ðåàëèçóþùèõ çàùèòó ïàìÿòè
- Microsoft Windows íà÷èíàÿ ñ Windows NT 3.1
- Áîëüøàÿ ÷àñòü Unix-like ñèñòåì, âêëþ÷àÿ
Íåêîòîðûå ñòàðûå ÎÑ æåñòêîãî ðåàëüíîãî âðåìåíè íå èñïîëüçóþò çàùèòó ïàìÿòè, äàæå íà ïðîöåññîðàõ, ãäå ýòî âîçìîæíî. Ïðèìåðîì òàêîé ÎÑ ÿâëÿåòñÿ VxWorks âåðñèé äî 5 âêëþ÷èòåëüíî.
[ïðàâèòü] Ñì. òàêæå
- Storage violation, for violation of memory protection
- Separation of protection and security
[ïðàâèòü] Ïðèìå÷àíèÿ
[ïðàâèòü] Ññûëêè
- Intel Developer Manuals â in-depth information on memory protection for Intel based architectures.
| Îïåðàöèîííûå ñèñòåìû (èñòîðèÿ) | |
|---|---|
| ßäðî | |
| Óïðàâëåíèå ïðîöåññàìè |
|
| âïàìÿòüþ | |
| Ïðî÷åå | |