2011-07-15 13 views
64

Kilka pytań dotyczących x86 pierścieni privilege CPU:Pierścienie uprawnień procesora: dlaczego pierścienie 1 i 2 nie są używane?

  • Dlaczego nie są pierścienie 1 i 2 stosowane przez większość systemów operacyjnych? Czy jest to po prostu zachowanie kompatybilności kodu z innymi architekturami, czy jest lepszy powód?

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

+0

może to pomóc http://compgroups.net/comp.lang .asm.x86/Privilege-levels-1-and-2 – alexius

Odpowiedz

59

Jako pisarz systemu operacyjnego hobbysta, stwierdziliśmy, że ponieważ stronicowania (większa część nowoczesnego modelu ochrony) ma tylko koncepcję uprzywilejowanego (pierścień 0,1,2) i nieuprzywilejowanych, korzyści z pierścieniami 1 i 2 znacznie się zmniejszyły.

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

Pierścienie 1 i 2 są w pewnym sensie "w większości" uprzywilejowane. Mogą uzyskać dostęp do stron nadzorcy, ale jeśli spróbują użyć uprzywilejowanych instrukcji, nadal będą korzystać z GPF, jak w przypadku pierścienia 3. Dlatego nie jest to złe miejsce dla kierowców, ponieważ Intel planował ...

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

+16

wHOA VirtualBox używa pierścienia 1 ?! To czysta wspaniałość !! Wielkie dzięki za informację, to wspaniała odpowiedź! +1 – Mehrdad

+13

Tak, zobacz szczegóły na http://www.virtualbox.org/manual/ch10.html#idp13729504! –

+8

OS/2 użył intensywnie pierścienia 2 dla kodu I/O. Dlatego tak trudno jest zdywersyfikować. – kinokijuf

16

Z punktu widzenia projektowania systemu operacyjnego posiadanie wielu pierścieni uprzywilejowanych to dziwność x86 - większość innych procesorów ma tylko dwa tryby (nadzorca i użytkownik). W związku z tym zaprojektowanie systemu operacyjnego wymagającego wielu trybów uprzywilejowanych natychmiast uniemożliwi jego przeniesienie na dowolny inny procesor. Ponadto wiele nowoczesnych pakietów wirtualizacji nie poprawnie emuluje poziomów uprawnień innych niż 0 i 3, sprawiając, że systemy operacyjne, które używają tych poziomów, są znacznie trudniejsze do przetestowania.

3

Według Wikipedii (http://en.m.wikipedia.org/wiki/Ring_(computer_security)), pierścienie 1 i 2 są używane dla kierowców (pierścień 1), systemy operacyjne dla gości (pierścień 1) i kod dostępu i/o uprzywilejowany (pierścień 2), hiper-visors siedzą w -1/0 (w zależności od hiper-visora) nie 1, jak wcześniej stwierdziłem.

Jednak dodatkowe dwa pierścienie nigdy tak naprawdę nie pomogły i dlatego stały się rzadko używane. TBH, większość kodu używającego pierścieni 1 i 2, częściowo je przejęło z pierwotnego użycia (takiego jak hipernadzorcy). Większość kodów Windows w tych dniach wydaje się traktować system jako mający tylko dwa poziomy (jądro i użytkownika), prawdopodobnie ze względu na obciążenie związane z wejściem i opuszczeniem jądra jądra

+1

Chyba przegapiłeś gdzieś '-'. Czy jesteś pewien, że hipernadzorcy używają pierścienia 1? – Mehrdad

+0

Heh, nie myślał, powinien być hiper-visors w -1, a goszczący go w 1, zaktualizuje ten szybki – Necrolis

+2

Windows używa tylko dwóch pierścieni, ponieważ został zaprojektowany do działania na innych procesorach (obecnie nieistniejących), które miały tylko dwa. – David