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. ●