Pierścienie przywilejów procesora: Dlaczego pierścienie 1 i 2 nie są używane?

102

Kilka pytań dotyczących pierścieni uprawnień procesora x86:

  • Dlaczego większość systemów operacyjnych nie używa pierścieni 1 i 2? Czy chodzi tylko o zachowanie zgodności kodu z innymi architekturami, czy jest lepszy powód?

  • Czy są jakieś systemy operacyjne, które faktycznie używają tych pierścieni? A może są całkowicie nieużywane?

user541686
źródło

Odpowiedzi:

111

Jako hobbysta piszący systemy operacyjne odkryłem, że ponieważ stronicowanie (główna część nowoczesnego modelu ochrony) ma tylko koncepcję uprzywilejowanego (pierścień 0, 1, 2) i nieuprzywilejowanego, korzyści z pierścieni 1 i 2 zostały znacznie zmniejszone.

Intencją Intela w posiadaniu pierścieni 1 i 2 jest, aby system operacyjny umieścił sterowniki urządzeń na tym poziomie, więc są one uprzywilejowane, ale nieco oddzielone od reszty kodu jądra.

Pierścienie 1 i 2 są w pewnym sensie „głównie” uprzywilejowane. Mogą uzyskać dostęp do stron nadzorcy, ale jeśli spróbują skorzystać z uprzywilejowanej instrukcji, nadal GPF tak jak robi to pierścień 3. Nie jest to więc złe miejsce dla kierowców, tak jak planował Intel ...

To powiedziawszy, zdecydowanie mają zastosowanie w niektórych projektach. W rzeczywistości nie zawsze bezpośrednio przez system operacyjny. Na przykład VirtualBox , maszyna wirtualna , umieszcza kod jądra gościa w pierścieniu 1. Jestem również pewien, że niektóre systemy operacyjne je wykorzystują, po prostu nie sądzę, że jest to obecnie popularny projekt.

Evan Teran
źródło
28
wHOA VirtualBox używa pierścienia 1 ?! To czysta wspaniałość !! Wielkie dzięki za informację, to świetna odpowiedź! +1
użytkownik541686
10
OS / 2 szeroko używał Ring 2 dla kodu I / O. Dlatego tak trudno jest wirtualizować.
kinokijuf
Od superuser.com/questions/1402537/… : "Uruchomienie kodu pierścienia 0 w pierścieniu 1 powoduje wiele dodatkowych błędów instrukcji, ponieważ pierścień 1 nie może wykonywać żadnych uprzywilejowanych instrukcji, których pierścień-0 gościa zawiera wiele. z tych błędów, VMM musi wkroczyć i emulować kod, aby osiągnąć pożądane zachowanie. Chociaż to działa, emulowanie tysięcy tych błędów jest bardzo kosztowne i poważnie obniża wydajność zwirtualizowanego gościa ”.
Dustin Oprea
24

Z punktu widzenia projektowania systemu operacyjnego, posiadanie wielu uprzywilejowanych pierścieni jest dziwactwem w architekturze x86 - większość innych procesorów ma tylko dwa tryby (nadzorcy i użytkownika). W związku z tym zaprojektowanie systemu operacyjnego tak, aby wymagał wielu uprzywilejowanych trybów, natychmiast zapobiegnie przeniesieniu go na jakikolwiek inny procesor. Ponadto wiele nowoczesnych pakietów do wirtualizacji nie emuluje poprawnie poziomów uprawnień innych niż 0 i 3, co znacznie utrudnia testowanie systemów operacyjnych korzystających z tych poziomów.

duskwuff-nieaktywny-
źródło
7

Według strony Wikipedii na temat Ring Security pierścienie 1 i 2 są używane przez sterowniki (pierścień 1), systemy operacyjne gościa (pierścień 1) i kod uprzywilejowany we / wy (pierścień 2), hiperwizory zajmują pozycję -1/0 (w zależności od hyper-visor) nie 1, jak wcześniej powiedziałem.

Jednak dodatkowe dwa pierścienie nigdy tak naprawdę nie pomogły i dlatego były rzadko używane. TBH, większość kodu używa pierścieni 1 i 2, które częściowo przerobiły ich pierwotne przeznaczenie (takie jak hiperwizory). Większość kodów Windows wydaje się obecnie traktować system jako mający tylko dwa poziomy (jądro i użytkownika), prawdopodobnie ze względu na narzut związany z wchodzeniem i opuszczaniem obszaru jądra.

Necrolis
źródło
1
Myślę, że -gdzieś przegapiłeś . Czy na pewno hiperwizory używają pierścienia 1?
user541686
Heh, nie myślał, powinny być hiper-daszki w -1 i systemów-gości w 1, zaktualizuje że szybki
Necrolis
4
Windows używa tylko dwóch pierścieni, ponieważ został zaprojektowany do działania na innych procesorach (teraz niedziałających), które miały tylko dwa.
David
W mojej opinii przełączanie trybów wymaga niewielkich kosztów. Z tego, co rozumiem, tylko sprzęt mógł przypisać bardziej uprzywilejowane przywileje procesorowi (tak jak w przypadku przerwania zakończonego IO). Jeśli to przełączanie uprawnień ma miejsce w sprzęcie, wątpię, czy przełączanie pierścieni jest nietrywialne. Myślę, że Windows, Linux lub MacOS używają tylko dwóch najbardziej skrajnych pierścieni, ponieważ architekci rezerwują środkowe pierścienie na takie rzeczy, jak wirtualizacja hostowana przez system operacyjny.
Nate Symer