Mikroinformatyka Mechanizmy ochrony pamięci

Transkrypt

Mikroinformatyka Mechanizmy ochrony pamięci
Mikroinformatyka
Mechanizmy ochrony pamięci
Mechanizmy ochrony pamięci
Ochrona na poziomie segmentów:
- limit
- typ segmentu
- selektor zerowy
- poziom uprzywilejowania
●
Ochrona na poziomie stronicowania:
- domena
- typ strony
●
Ochrona na poziomie segmentów
LIMIT
Czy nie wystąpiło odwołanie do obszaru pamięci poza
segmentem.
● Czy nie wystąpiło odwołanie poza tablicę deskryptorów.
●
SELEKTOR ZEROWY
Może być załadowany do rejestrów DS, ES, FS, GS.
● Próba załadowania selektora zerowego do CS lub SS – #GP.
● Próba dostępu do pamięci przez rejestr załadowany selektorem
zerowym – #GP.
●
POZIOM UPRZYWILEJOWANIA
0
– jądro systemu,
● 1, 2
– inne procedury systemowe,
● 3
– aplikacje użytkownika.
●
Ochrona na poziomie segmentów
TYP SEGMENTU
Kontrola przypisania segmentu do rejestru.
● Do CS tylko segment kodu.
● Do DS, ES, FS, GS nie może być załadowany selektor segmentu
kodu, który nie jest odczytywalny, lub selektor segmentu
systemowego.
● Do SS musi być załadowany selektor segmentu zapisywalnego.
Kontrola zawartości rejestru LDTR i Task.
● Do LDTR tylko segment zawiarający LDT.
● Do Task tylko segment zawierający TSS.
Kontrola dostępu do pamięci po załadowaniu selektorów.
● Niemożliwy zapis do segmentu kodu.
● Niemożliwy zapis do segmentu niezapisywalnego.
● Niemożliwy odczyt z segmentu kodu jeśli nie jest ustawiony bit
zezwolenia na odczyt.
Ochrona na poziomie segmentów
TYP SEGMENTU
Przy wykonywaniu instrukcji zawierającej selektor segmentu.
● Daleki skok JMP lub CALL może zawierać:
- selektor segmentu kodu,
- selektor bramki wywołania,
- selektor bramki zadania,
- selektor segmentu TSS.
Przy operacjach wewnętrznych:
● Przy przełączaniu zadań docelowym segmentem musi być TSS.
● Przy skoku docelowym segmentem musi być segment kodu.
● Przy dalekim skoku JMP lub CALL procesor automatycznie
rozpoznaje sposób wykonania skoku (skok bezpośredni, skok
poprzez bramkę, przełączenie zadania).
Poziom uprzywilejowania
CPL – Current Priviledge Level
Przechowywany w rejestrach CS i SS na bitach 0 i 1.
● Równy poziomowi uprzywilejowania segmentu kodu z którego
wykonywane są aktualnie instrukcje.
● Zmieniany w momencie skoku do segmentu kodu o innym
poziomie przywilejów.
● Nie zmieniany w momencie wywołania kodu w segmencie o
równym lub wyższym poziomie przywilejów, ale z zezwoleniem
na dostęp.
● Segment z zezwoleniem na dostęp – “conforming”
(ustawiony bit C – conforming).
●
Poziom uprzywilejowania
DPL – Descriptor Priviledge Level
Przechowywany w polu DPL w deskryptorze segmentu lub bramki.
● Dla segmentu danych – minimalny poziom przywilejów jaki musi
mieć proces by mógł się dostać do danych.
● Dla segmentu kodu “nonconforming” (nie poprzez bramkę) – poziom
przywilejów jaki musi mieć proces by mógł wywołać kod (równy ale
nie większy!).
● Dla bramki wywołania – najniższy poziom przywilejów jaki musi
mieć proces by wywołać kod poprzez bramkę (tak jak dla danych).
● Dla segmentu kodu “conforming” i dla segmentu kodu “conforming”
poprzez bramkę – maksymalny poziom przywilejów jaki może mieć
proces by wywołać kod (odwrotnie niż dla danych).
● Dla segmentu TSS – najniższy poziom przywilejów jaki musi mieć
proces by uzyskać dostęp do segmentu TSS (tak jak dla danych).
●
Poziom uprzywilejowania
RPL – Requested Priviledge Level
Przechowywany w selektorze ładowanym do rejestru
segmentowego.
● Porównywany z CPL kodu wywołującego – pod uwagę brana jest
liczba wyższa, określająca niższy poziom uprzywilejowania.
●
Dostęp do segmentu danych
z różnych poziomów uprzywilejowania.
Dostęp do segmentu kodu
z różnych poziomów uprzywilejowania.
Dostęp do kodu poprzez bramkę
Sprawdzanych jest pięć parametrów:
● CPL procesu wywołującego.
● RPL selektora bramki.
● DPL deskryptora bramki wywołania.
● DPL deskryptora segmentu docelowego.
● Pole C deskryptora segmentu docelowego.
Muszą być spełnione warunki:
● CPL procesu wywołującego <= DPL deskryptora bramki
● RPL selektora bramki <= DPL deskryptora bramki
Dostęp do kodu poprzez bramkę
Dla segmentu niezgodnego (nonconforming):
● CALL – można wywołać procedurę w segmencie o wyższym
poziomie priorytetów, następuje przełączanie stosów
DPL deskryptora segmentu docelowego <= CPL wywołującego
JMP – można przekazać sterowanie na identyczny poziom
priorytetów
DPL deskryptora segmentu docelowego = CPL wywołującego
●
Dla segmentu zgodnego (conforming):
● JMP, CALL – można użyć na ten sam lub wyższy poziom
priorytetów, nie ma przełączania stosów
DPL deskryptora segmentu docelowego <= CPL wywołującego
RET – można powrócić tylko do tak samo lub mniej
uprzywilejowanego segmentu kodu.
Dostęp do segmentu kodu
przy wywoływaniu poprzez bramkę
Ochrona na poziomie stronicowania
DOMENA
Użytkownik (U/S =1).
● Nadzorca (U/S =0).
●
TYP STRONY
Tylko do odczytu.
● Odczyt/zapis.
●
REGUŁY:
Nadzorca ma dostęp do odczytu wszystkich stron.
● Użytkownik nie ma dostępu do stron w których (U/S =0).
● Jeśli w rejestrze CR0 bit W/P = 0, nie ma ograniczeń zapisu dla
Nadzorcy.
● Jeśli w rejestrze CR0 bit W/P = 1, Nadzorca nie ma prawa zapisu
do stron, w których W/P = 0.
●