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.