Pierścienie ochronne

Pozwala to na całą hierarchię segmentów i uprawnień między nimi. Być może zauważyłeś, że połączenie z segmentu krzyżowego brzmi dokładnie tak jak połączenie systemowe. Jeśli kiedykolwiek spojrzałeś na zespół Linux x86, standardowym sposobem na wykonanie połączenia systemowego jest int 0x80, który podnosi przerwanie 0x80 . Przerwanie zatrzymuje procesor i idzie do bramy przerwania, która następnie działa tak samo jak brama połączenia – zmienia poziom uprawnienia i odbija cię na innym obszarze kodu .

Czy Linux używa pierścieni ochronnych?

Wspomnialiśmy, jak jednym z głównych zadań systemu operacyjnego jest wdrożenie bezpieczeństwa; to nie pozwolić jednej aplikacji lub użytkownika zakłócać żadną inną, która działa w systemie. Oznacza to, że aplikacje nie powinny być w stanie zastąpić wzajemnej pamięci lub plików, a tylko uzyskiwać dostęp do zasobów systemowych zgodnie z zasadami systemowymi.

Jednak podczas uruchamiania aplikacji ma wyłączne wykorzystanie procesora. Widzimy, jak to działa, gdy badamy procesy w następnym rozdziale. Zapewnienie, że aplikacja uzyskuje dostęp tylko do pamięci, jest zaimplementowana przez wirtualny system pamięci, który badamy w rozdziale po następnym. Niezbędne jest to, że sprzęt jest odpowiedzialny za egzekwowanie tych zasad.

Systemowe interfejs wywołania, który zbadaliśmy, to brama do aplikacji dostajesz się do zasobów systemowych. Zmuszając aplikację do żądania zasobów za pośrednictwem połączenia systemowego do jądra, jądro może egzekwować zasady dotyczące tego rodzaju dostępu. Na przykład, gdy aplikacja tworzy wywołanie systemowe Open (), aby otworzyć plik na dysku, sprawdzi uprawnienia użytkownika w stosunku do uprawnień do pliku i pozwoli na dostęp lub odmówić dostępu.

4 . 1 . 1 poziomy przywilejów

Ochrona sprzętowa można zwykle postrzegać jako zestaw koncentrycznych pierścieni wokół podstawowego zestawu operacji.

Poziomy przywilejów na x86

Rysunek 4 . 1 . 1 . 1 pierścienie

W wewnętrznym pierścieniu są najbardziej chronione instrukcje; te, które tylko jądro powinno zadzwonić. Na przykład instrukcja HLT w celu zatrzymania procesora nie powinna być uruchamiana przez aplikację użytkownika, ponieważ powstrzymałaby cały komputer przed pracą. Jednak jądro musi być w stanie wywołać tę instrukcję, gdy komputer jest legalnie zamknięty. 1

Każdy pierścień wewnętrzny może uzyskać dostęp do dowolnych instrukcji chronionych przez kolejny pierścień, ale nie chroniony przez kolejny pierścień. Nie wszystkie architektury mają wiele poziomów pierścieni jak wyżej, ale większość zapewni przynajmniej poziom „jądra” i „użytkownika”.

4 . 1 . 1 . 1 386 Model ochrony

Model ochrony 386 ma cztery pierścienie, choć większość systemów operacyjnych (takich jak Linux i Windows) używa tylko dwóch pierścieni, aby zachować kompatybilność z innymi architekturami, które nie pozwalają na tak wiele dyskretnych poziomów ochrony.

386 utrzymuje uprawnienia, wykonując każdy element kodu aplikacji działający w systemie, ma mały deskryptor, zwany a deskryptor kodu, który opisuje między innymi jego poziom przywilejów. Podczas uruchamiania kodu aplikacji przeskakuje do innego kodu poza regionem opisanym przez jego deskryptor kodu, poziom uprawnienia celu jest sprawdzany. Jeśli jest wyższy niż aktualnie działający kod, skok jest niedozwolony przez sprzęt (a aplikacja się zawiedzie).

4 . 1 . 1 . 2 Podnoszenie przywileju

Aplikacje mogą podnieść poziom uprawnień tylko przez określone połączenia, które na to pozwalają, takie jak instrukcja wdrożenia połączenia systemowego. Są one zwykle określane jako Call Gate Ponieważ działają jak brama fizyczna; niewielki wpis przez nieprzeniknioną ścianę. Kiedy ta instrukcja jest nazywana, widzieliśmy, jak sprzęt całkowicie zatrzymuje działającą aplikację i kontrolę dłoni do jądra. Jądro musi działać jako strażnik; Zapewnienie, że przez bramę nie przechodzi nic nieprzyjemnego. Oznacza to, że musi uważnie sprawdzić argumenty połączeń systemowych, aby upewnić się, że nie będzie oszukany, że nic nie powinien (jeśli tak, to jest błąd bezpieczeństwa). Gdy jądro działa w najskręconym pierścieniu, ma uprawnienia do wykonania dowolnej operacji; Po zakończeniu zwróci kontrolę z powrotem do aplikacji, która ponownie będzie działać z niższym poziomem uprawnień.

4 . 1 . 1 . 3 szybkie połączenia systemowe

Jednym z problemów z pułapkami, jak opisano powyżej, jest to, że są one bardzo drogie, aby procesor mógł wdrożyć. Istnieje wiele stanów do zapisania, zanim kontekst będzie mógł się zmienić. Współczesne procesory zdali sobie sprawę z tego narzut i starali się je zmniejszyć.

Zrozumienie opisanego powyżej mechanizmu gate. Pierwotnym powodem segmentacji było możliwość użycia więcej niż 16 bitów dostępnych w rejestrze adresu, jak pokazano na rycinie 4 . 1 . 1 . 3 . 1, adresowanie segmentacji x86.

Segmentacja rozszerzająca przestrzeń adresową procesora poprzez dzielenie go na fragmenty. Procesor przechowuje specjalne rejestry segmentów, a adresy są określone przez rejestr segmentu i kombinację przesunięcia. Wartość rejestru segmentu jest dodawana do części przesunięcia, aby znaleźć ostateczny adres.

Rysunek 4 . 1 . 1 . 3 . 1 x86 Adresowanie segmentacji

Kiedy x86 przeniósł się do 32 -bitowych rejestrów, schemat segmentacji pozostał, ale w innym formacie. Zamiast ustalonych rozmiarów segmentów, segmenty mogą być dowolnym rozmiarem. Oznacza to, że procesor musi śledzić wszystkie te różne segmenty i ich rozmiary, których używa deskryptory. Deskryptory segmentu dostępne dla wszystkich są przechowywane w Globalna tabela deskryptora lub GDT w skrócie. Każdy proces ma szereg rejestrów, które wskazują na wpisy w GDT; Są to segmenty, do których można uzyskać proces (są też lokalny Tabele deskryptora i to wszystko Intera

Kluczowe punkty:

  • Linux wdraża bezpieczeństwo, aby zapobiec zakłóceniu aplikacji i użytkowników.
  • Sprzęt wymusza reguły dotyczące pamięci i dostępu do zasobów.
  • Interfejs połączeń systemowych działa jako brama dla aplikacji do dostępu do zasobów systemowych.
  • Poziomy uprawnień określają dostęp do niektórych instrukcji i operacji.
  • Model ochrony 386 ma cztery pierścienie, ale większość systemów operacyjnych wykorzystuje tylko dwa.
  • Każdy kod aplikacji ma deskryptor kodu, który określa jego poziom uprawnień.
  • Aplikacje mogą podnieść poziom uprawnień tylko poprzez określone połączenia, takie jak wywołania systemowe.
  • Jądro działa jako strażnik, aby zapewnić bezpieczeństwo połączeń systemowych.
  • Szybkie wywołania systemowe mają na celu zmniejszenie kosztów przełączania kontekstu.
  • Schemat segmentacji x86 rozszerza przestrzeń adresów procesora.

Pytania:

  1. Jaki jest cel wdrożenia bezpieczeństwa w systemie operacyjnym?
  2. W jaki sposób sprzęt wymusza reguły dostępu do pamięci?
  3. Jaką rolę odgrywa interfejs połączeń systemowych w dostępie do zasobów systemowych?
  4. W jaki sposób wykorzystywane są poziomy uprawnień w ochronie sprzętowej?
  5. Ile pierścieni ma model ochrony 386?
  6. Co to jest deskryptor kodu?
  7. W jaki sposób aplikacje mogą podnieść poziom przywilejów?
  8. Jaka jest rola jądra jako strażnika?
  9. Jaki jest cel szybkich wywołań systemowych?
  10. Dlaczego segmentacja została wprowadzona w procesorze x86?
  11. Jak działa schemat segmentacji x86?
  12. Jakie są deskryptory segmentów i gdzie są przechowywane?

Pierścienie ochronne

Pozwala to na całą hierarchię segmentów i uprawnień między nimi. Być może zauważyłeś, że połączenie z segmentu krzyżowego brzmi dokładnie tak jak połączenie systemowe. Jeśli kiedykolwiek spojrzałeś na zespół Linux x86, standardowym sposobem na wykonanie połączenia systemowego jest int 0x80, który podnosi przerwanie 0x80 . Przerwanie zatrzymuje procesor i idzie do bramy przerwania, która następnie działa tak samo jak brama połączenia – zmienia poziom uprawnienia i odbija cię na innym obszarze kodu .

Czy Linux używa pierścieni ochronnych?

Wspomnialiśmy, jak jednym z głównych zadań systemu operacyjnego jest wdrożenie bezpieczeństwa; to nie pozwolić jednej aplikacji lub użytkownika zakłócać żadną inną, która działa w systemie. Oznacza to, że aplikacje nie powinny być w stanie zastąpić wzajemnej pamięci lub plików, a tylko uzyskiwać dostęp do zasobów systemowych zgodnie z zasadami systemowymi.

Jednak podczas uruchamiania aplikacji ma wyłączne wykorzystanie procesora. Widzimy, jak to działa, gdy badamy procesy w następnym rozdziale. Zapewnienie, że aplikacja uzyskuje dostęp tylko do pamięci, jest zaimplementowana przez wirtualny system pamięci, który badamy w rozdziale po następnym. Niezbędne jest to, że sprzęt jest odpowiedzialny za egzekwowanie tych zasad.

Systemowe interfejs wywołania, który zbadaliśmy, to brama do aplikacji dostajesz się do zasobów systemowych. Zmuszając aplikację do żądania zasobów za pośrednictwem połączenia systemowego do jądra, jądro może egzekwować zasady dotyczące tego rodzaju dostępu. Na przykład, gdy aplikacja tworzy wywołanie systemowe Open (), aby otworzyć plik na dysku, sprawdzi uprawnienia użytkownika w stosunku do uprawnień do pliku i pozwoli na dostęp lub odmówić dostępu.

4 . 1 . 1 poziomy przywilejów

Ochrona sprzętowa można zwykle postrzegać jako zestaw koncentrycznych pierścieni wokół podstawowego zestawu operacji.

Poziomy przywilejów na x86

Rysunek 4 . 1 . 1 . 1 pierścienie

W wewnętrznym pierścieniu są najbardziej chronione instrukcje; te, które tylko jądro powinno zadzwonić. Na przykład instrukcja HLT w celu zatrzymania procesora nie powinna być uruchamiana przez aplikację użytkownika, ponieważ powstrzymałaby cały komputer przed pracą. Jednak jądro musi być w stanie wywołać tę instrukcję, gdy komputer jest legalnie zamknięty. 1

Każdy pierścień wewnętrzny może uzyskać dostęp do dowolnych instrukcji chronionych przez kolejny pierścień, ale nie chroniony przez kolejny pierścień. Nie wszystkie architektury mają wiele poziomów pierścieni jak wyżej, ale większość zapewni przynajmniej poziom „jądra” i „użytkownika”.

4 . 1 . 1 . 1 386 Model ochrony

Model ochrony 386 ma cztery pierścienie, choć większość systemów operacyjnych (takich jak Linux i Windows) używa tylko dwóch pierścieni, aby zachować kompatybilność z innymi architekturami, które pozwalają teraz na tyle dyskretnych poziomów ochrony.

386 utrzymuje uprawnienia, wykonując każdy element kodu aplikacji działający w systemie, ma mały deskryptor, zwany a deskryptor kodu, który opisuje między innymi jego poziom przywilejów. Podczas uruchamiania kodu aplikacji przeskakuje do innego kodu poza regionem opisanym przez jego deskryptor kodu, poziom uprawnienia celu jest sprawdzany. Jeśli jest wyższy niż aktualnie działający kod, skok jest niedozwolony przez sprzęt (a aplikacja się zawiedzie).

4 . 1 . 1 . 2 Podnoszenie przywileju

Aplikacje mogą podnieść poziom uprawnień tylko przez określone połączenia, które na to pozwalają, takie jak instrukcja wdrożenia połączenia systemowego. Są one zwykle określane jako Call Gate Ponieważ działają jak brama fizyczna; niewielki wpis przez nieprzeniknioną ścianę. Kiedy ta instrukcja jest nazywana, widzieliśmy, jak sprzęt całkowicie zatrzymuje działającą aplikację i kontrolę dłoni do jądra. Jądro musi działać jako strażnik; Zapewnienie, że przez bramę nie przechodzi nic nieprzyjemnego. Oznacza to, że musi uważnie sprawdzić argumenty połączeń systemowych, aby upewnić się, że nie będzie oszukany, że nic nie powinien (jeśli tak, to jest błąd bezpieczeństwa). Gdy jądro działa w najskręconym pierścieniu, ma uprawnienia do wykonania dowolnej operacji; Po zakończeniu zwróci kontrolę z powrotem do aplikacji, która ponownie będzie działać z niższym poziomem uprawnień.

4 . 1 . 1 . 3 szybkie połączenia systemowe

Jednym z problemów z pułapkami, jak opisano powyżej, jest to, że są one bardzo drogie, aby procesor mógł wdrożyć. Istnieje wiele stanów do zapisania, zanim kontekst będzie mógł się zmienić. Współczesne procesory zdali sobie sprawę z tego narzut i starali się je zmniejszyć.

Zrozumienie opisanego powyżej mechanizmu gate. Pierwotnym powodem segmentacji było możliwość użycia więcej niż 16 bitów dostępnych w rejestrze adresu, jak pokazano na rycinie 4 . 1 . 1 . 3 . 1, adresowanie segmentacji x86 .

Segmentacja rozszerzająca przestrzeń adresową procesora poprzez dzielenie go na fragmenty. Procesor przechowuje specjalne rejestry segmentów, a adresy są określone przez rejestr segmentu i kombinację przesunięcia. Wartość rejestru segmentu jest dodawana do części przesunięcia, aby znaleźć ostateczny adres.

Rysunek 4 . 1 . 1 . 3 . 1 x86 Adresowanie segmentacji

Kiedy x86 przeniósł się do 32 -bitowych rejestrów, schemat segmentacji pozostał, ale w innym formacie. Zamiast ustalonych rozmiarów segmentów, segmenty mogą być dowolnym rozmiarem. Oznacza to, że procesor musi śledzić wszystkie te różne segmenty i ich rozmiary, których używa deskryptory. Deskryptory segmentu dostępne dla wszystkich są przechowywane w Globalna tabela deskryptora lub GDT w skrócie. Każdy proces ma szereg rejestrów, które wskazują na wpisy w GDT; Są to segmenty, do których można uzyskać proces (są też lokalny Tabele deskryptora, a wszystko to oddziałuje z segmentami stanu zadań, ale teraz nie jest to ważne). Ogólna sytuacja pokazano na rycinie 4 . 1 . 1 . 3 . 2, x86 segmentów .

segmenty x86 w akcji. Zwróć uwagę, jak „dalekie” przechodzi za pośrednictwem bramki telefonicznej, która przekierowuje do segmentu kodu działającego na niższym poziomie pierścienia. Jedynym sposobem na modyfikację selektora segmentu kodu, domyślnie używany dla wszystkich adresów kodu, jest mechanizm połączenia. Zatem mechanizm bramki wywoławczej zapewnia, że ​​wybrać deskryptor nowego segmentu, a zatem ewentualnie zmień poziomy ochrony, musisz przejść za pomocą znanego punktu wejścia.

Rysunek 4 . 1 . 1 . 3 . 2 segmenty x86

Ponieważ system operacyjny przypisuje rejestry segmentu w ramach stanu procesu, sprzęt procesora wie, jakie segmenty pamięci mogą uzyskać dostęp do aktualnego procesu i może egzekwować ochrona Aby ten proces niczego nie dotyka, nie powinien. Jeśli zgodzi się z granic, otrzymasz Winformowanie segmentacji, które większość programistów zna.

Obraz staje się bardziej interesujący, gdy uruchamianie kodu musi wykonywać połączenia w kod, który się znajduje inny człon. Jak omówiono w sekcji 4 . 1 . 1 . 1, 386 Model ochrony, X86 robi to z pierścienie, gdzie pierścień 0 jest najwyższym pozwoleniem, pierścień 3 jest najniższy, a pierścienie wewnętrzne mogą uzyskać dostęp do pierścieni zewnętrznych, ale nie odwrotnie.

Jak omówiono w sekcji 4 . 1 . 1 . 2, podnoszenie uprawnień, gdy kod pierścienia 3 chce wskoczyć do kodu pierścienia 0, zasadniczo modyfikuje jego selektor segmentu kodu, aby wskazać inny segment. Aby to zrobić, musi użyć specjalnego Daleki Instrukcja, którą zapewnia sprzęt, przechodzi przez bramę połączeń. Nie ma innego sposobu, aby proces uruchomiony wybrać nowy deskryptor segmentu kodu, a zatem procesor rozpocznie wykonywanie kodu przy znanym przesunięciu w segmencie Ring 0, który jest odpowiedzialny za utrzymanie integralności (e.G. nie czytanie arbitralnego i być może złośliwego kodu i wykonywanie go. Oczywiście nikczemni napastnicy zawsze będą szukać sposobów, aby Twój kod zrobił to, czego nie zamierzałeś!).

Pozwala to na całą hierarchię segmentów i uprawnień między nimi. Być może zauważyłeś, że połączenie z segmentu krzyżowego brzmi dokładnie tak jak połączenie systemowe. Jeśli kiedykolwiek spojrzałeś na zespół Linux x86, standardowym sposobem na wykonanie połączenia systemowego jest int 0x80, który podnosi przerwanie 0x80 . Przerwanie zatrzymuje procesor i idzie do bramy przerwania, która następnie działa tak samo jak brama połączenia – zmienia poziom uprawnienia i odbija cię na innym obszarze kodu .

Problem z tym schematem polega na tym, że tak jest powolny. Wykonanie całego tego sprawdzania wymaga dużo wysiłku, a wiele rejestrów należy zapisać, aby dostać się do nowego kodu. A w drodze powrotnej wszystko należy ponownie przywrócić.

W nowoczesnej segmentacji systemu x86 i czteropoziomowego systemu pierścieniowego nie jest używany dzięki pamięci wirtualnej, omówionej w pełni w rozdziale 6, pamięci wirtualnej . Jedyną rzeczą, która naprawdę dzieje się w przypadku przełączania segmentacji, są wywołania systemowe, które zasadniczo przełączają się z trybu 3 (przestrzeń użytkownika) na tryb 0 i przeskakuje do kodu obsługi połączeń systemowych wewnątrz jądra. Zatem procesor zapewnia dodatkowe szybkie wywołanie systemu Instrukcje zwane Sysenter (i Sysexit w celu powrotu), które przyspieszają cały proces przez połączenie int 0x80 poprzez usunięcie ogólnego charakteru dalekiego poziomu-czyli możliwość przejścia do dowolnego segmentu na dowolnym poziomie pierścienia-i ograniczanie połączenia do przejścia tylko do dzwonienia kodu 0 przy określonym segmencie i przesunięciu, jak w rejestrach przechowywanych w rejestrach.

Ponieważ ogólny charakter został zastąpiony tak bardzo znanymi informacjami, cały proces można przyspieszyć, a zatem mamy wspomniane szybkie wywołanie systemu. Inną rzeczą należy zauważyć, że stan nie jest zachowany, gdy jądro dostaje kontrolę. Jądrze musi uważać, aby nie niszczyć państwa, ale oznacza to również, że swobodnie oszczędzanie tak małego stanu, jak to wymaga wykonywania pracy, więc może być znacznie bardziej wydajne w tym. To jest bardzo filozofia RISC i ilustruje, w jaki sposób linia zaciera się między procesorami RISC i CISC.

Więcej informacji na temat tego, jak jest to wdrażane w jądrze Linux, patrz sekcja 8 . 1 . 1, biblioteka jądra .

4 . 2 inne sposoby komunikowania się z jądrem

4 . 2 . 1 ioctl

4 . 3 systemy plików

O Proc, Sysfs, Debugfs itp

Pierścienie ochronne

Pierścienie ochronne

Pierścień 0 jest jądro tryb. Pierścień 3 jest użytkownik tryb. Pozostałe pierścienie nie są zwykle używane. VirtualBox ładuje jądro maszyny wirtualnej Pierścień 1.

Tryb jądra vs Wykonanie trybu użytkownika

W trybie jądra kod wykonywania ma kompletny i nieograniczony dostęp do leżącego u podstaw sprzętu. Może wykonać dowolną instrukcję procesora i odwołać się do dowolnego adresu pamięci. W trybie użytkownika kod wykonywania nie ma możliwości bezpośredniego dostępu do pamięci sprzętowej lub referencyjnej. Kod działający w trybie użytkownika musi przekazać interfejs API systemu, aby uzyskać dostęp do sprzętu lub pamięci.

Te dwa tryby nie są zwykłymi etykietami; są egzekwowane przez sprzęt procesora. Jeśli wykonywanie kodu w trybie użytkownika próbuje zrobić coś poza jego zasięgiem- jak, powiedzmy, dostęp do uprzywilejowanej instrukcji procesora lub modyfikując pamięć, do której nie ma dostępu- wyrzucany jest wyjątek. Zamiast awarii całego systemu, tylko ta konkretna aplikacja ulega awarii. To jest wartość trybu użytkownika.

Dopasowanie wyników „”

Brak dopasowania wyników „”

Wprowadzenie do Core Linux Architektura: Pierścienie ochrony

Hosting Linux

To jest nasz następny artykuł na temat Core Linux Architecture, w poprzednim artykule dowiedzieliśmy się o różnych trybach procesorów, takich jak uprawnienia, w których kod może wykonywać. Więc spojrzeliśmy na tryb jądra i tryb użytkownika i zasadniczo pierścienie ochronne, które będziemy dzisiaj szukać na poniższym schemacie. Widzimy różne pierścienie ochronne.

Więc pozwól’s, zacznij i zacznij

Pierścienie ochronne w x86:

Pozwalać’s najpierw omów, co to jest x86? I dlaczego tego potrzebujemy?

x86 to najpopularniejsza architektura procesorów komputerów stacjonarnych i coś, co podczas patrzenia na smartfony możesz zobaczyć te procesory I.mi. Najpopularniejsza architektura procesora dla urządzeń mobilnych, ponieważ jest bardziej wydajna dzięki wykorzystaniu baterii. Ale jako komputery stacjonarne Don’naprawdę potrzebują, że mają trochę różnicy. Jedna rzecz, którą możesz zobaczyć X w x86 zasadniczo’po prostu mówię trochę z 86 na końcu i.mi. x86 Więc za każdym razem, gdy zobaczysz rodzinę procesorów, zobaczysz wiele różnych.

Hosting Linux Hosting Linux

Więc wchodzimy głębiej w pierścienie ochronne. Możemy spojrzeć na pierścienie ochronne jako graficzną reprezentację poziomów uprawnień procesora, które omówiliśmy wcześniej. W poniższych artykułach będziemy głęboko wdrożyć architekturę procesora i działanie pierścieni ochronnych? To jest jak na niskim poziomie z tym.

Wiedzieliśmy już, że procesor’S “Tryb jądra” to jest równe “Pierścień 0” na schemacie i procesorze’S “Tryb użytkownika” ma do czynienia z “Pierścień 3”. Tutaj musisz myśleć o pierścieniu 1 i 2. Zasadniczo w nowoczesnym systemie operacyjnym’s, w tym Linux używa tylko pierścienia 0 i pierścienia 3 w architekturach x86, ze względu na sposób, w jaki coś nazywa się “Tabela strony” jest zaimplementowane.

To jest pewne, że nie ma nikogo’S to jest. Dlatego używamy pierścienia 0 i pierścienia 3.

Tabela strony to plik mapowania pamięci używany przez wirtualne systemy pamięci w systemie komputerowym. Mimo że współczesne architektury mogą mieć x86, które mogą mieć wszystkie te pierścienie. W niektórych pierścieniach środowiska wirtualizacji 1 jest faktycznie używane. To’s faktycznie wirtualne lub maszyny wirtualne. Umieszcza VM’S Kod jądra faktycznie w pierścieniu 1, a rzeczywisty kod jądra podkreślonej maszyny znajduje się w pierścieniu 0.

Pozwalać’S idź dalej i zobacz, co już wiedzieliśmy – jeśli wszystkie procesy rozpoczną się w pierścieniu 3? Ponieważ jądro, które zajmuje się podkreślonym interfejsem użytkownika trybu operacyjnego lub aplikacji lub procesu, czasami musimy spojrzeć na tryby systemu plików lub rzeczy wejściowe. Są to pierścienie, które zasadniczo ograniczają się do przywilejów pierścienia lub uprawnień jądra.

Jak to się dzieje? Jak znamy operacje wejściowe, manipulacja systemem itp. To’s coś, co nazywa się interfejsem połączeń systemowych i tak’naprawdę rodzaj innego pośrednika między przestrzenią użytkownika, którym są te elementy wykonywane w Ring 3, a przestrzenią jądra wykonywane w pierścieniu 0.

Więc procesy przestrzeni użytkownika można zasadniczo wykorzystać. Ten interfejs, to’S API jądra, aby jądro wywołuje niektóre z jego funkcji. Więc pozwól’S Sprawdź, co to jest połączenie systemowe.

Wywołanie systemowe: jest to żądanie jądra według procesu użytkownika w celu wykonania uprzywilejowanej akcji I.mi. Działanie jądra.

Przerwania: jest to sygnał emitowany do procesora, który mówi ” Istnieje wydarzenie, które wymaga natychmiastowej uwagi”.

Co robi przerwanie? Jak to jest przydatne? Mogą inicjować połączenia systemowe, takie jak przerwania oparte na oprogramowaniu. Tak więc kod o bardziej nowoczesnych architekturach procesora może korzystać z innego procesu inicjacji zamiast przerwania. Ale główny proces wszystkiego jest taki sam.

To’S mały mały niuans, ale czasami te przerwania są bardziej intensywne, muszą być pewne. Więc bardziej nowoczesne systemy architektury zamiast tych przerwań mogą mieć inną. Więc pomysł podkreślenia jest taki sam.

Pozwalać’S Przejdź do systemu wywołania:

  1. Proces użytkownika wymaga działania jądra, aby inicjować przerwanie.
  2. Przerwanie lub instrukcja umieszcza procesor na pierścieniu 0 i przechodzi kontrolę do jądra.
  3. Jądro określa, czy proces użytkownika powinien zostać przyznany połączenie systemowe na podstawie uprawnień.
  4. Jeśli zostanie przyznane, jądro wykona połączenie systemowe.
  5. Po zakończeniu jądro inicjuje zmianę pierścienia 3.
  6. Jądro daje kontrolę procesu użytkownika.

Odwiedzać- Hostdens

Vishwajit Kale

Vishwajit Kale zapalony na scenę marketingu cyfrowego w 2015 roku i jest strategiem marketingu cyfrowego Hostdens, firmy, której celem jest zapewnienie niezawodnych rozwiązań hostingowych internetowych. Vishwajit ma doświadczenie w marketingu cyfrowym i treści wraz z SEO. Lubi pisać blogi technologiczne, podróżować i czytać.

Vishwajit Kale

Vishwajit Kale zapalony na scenę marketingu cyfrowego w 2015 roku i jest strategiem marketingu cyfrowego Hostdens, firmy, której celem jest zapewnienie niezawodnych rozwiązań hostingowych internetowych. Vishwajit ma doświadczenie w marketingu cyfrowym i treści wraz z SEO. Lubi pisać blogi technologiczne, podróżować i czytać.

Warstwy systemu operacyjnego

Systemy operacyjne można podzielić na wiele dyskretnych warstw, każda z własnymi uprawnieniami. Ten system jest znany jako pierścień ochrony. System operacyjny zarządza komputerem’zasoby S, takie jak czas przetwarzania procesora i dostęp do pamięci. Komputery często jednocześnie uruchamiają wiele procesów oprogramowania, które będą wymagały różnych poziomów dostępu do zasobów i sprzętu.

Systemy operacyjne można podzielić na wiele dyskretnych warstw, każda z własnymi uprawnieniami. Ten system jest znany jako Pierścień ochrony.

Co to jest pierścionek ochronny?

System operacyjny zarządza komputerem’zasoby S, takie jak czas przetwarzania procesora i dostęp do pamięci. Komputery często jednocześnie uruchamiają wiele procesów oprogramowania, które będą wymagały różnych poziomów dostępu do zasobów i sprzętu.

Procesy są wykonywane w warstwie “pierścienie”, gdzie każdy pierścień ma inne prawa dostępu do zasobów. Centralny pierścień ma najwyższe przywileje, a każda kolejna warstwa ma zmniejszenie dostępu. Wspólne wdrożenie pierścienia ochronnego dla procesorów x86 (wspólny rodzaj procesora) ma cztery pierścienie, ponumerowane od 0 do 3, jak opisano poniżej.

Dlaczego warstwy?

Chce zatrzymać
uczenie się?

Ta treść jest pobierana z
Kurs online Raspberry Pi Foundation,

Zrozumienie systemów komputerowych

Zobacz kurs

Model warstwowy oferuje dwie główne korzyści. Po pierwsze, chroni przed wypadkami systemowymi. Błędy w wyższych pierścieniach (z mniejszym dostępem) można zwykle odzyskać z. Wynika to z faktu, że tylko pierścień 0 ma bezpośredni dostęp do pamięci i procesora, więc jeśli proces uruchomiony w pierścieniu zewnętrznym zawiedzie go, można go ponownie uruchomić bez utraty danych lub powodowania błędu w procesorze. Po drugie, oferuje zwiększone bezpieczeństwo. Aby wykonać instrukcje wymagające większego dostępu do zasobów, proces musi zażądać uprawnień z systemu operacyjnego. OS może następnie zdecydować, czy udzielić wniosku, czy odmówić. Ten proces selekcji pomaga chronić system przed niechcianym lub złośliwym zachowaniem.

Części pierścienia ochrony

Pierścień 0 (najbardziej uprzywilejowany) i 3 (najmniej uprzywilejowany)

Pierścień 0 jest dostępny dla jądro, który jest centralną częścią większości systemów operacyjnych i może uzyskać dostęp do wszystkiego. Mówi się, że uruchomiony kod uruchomiony jest Tryb jądra. Procesy działające w trybie jądra mogą wpływać na cały system; Jeśli coś się tutaj nie powiedzie, prawdopodobnie spowoduje to zamknięcie systemu. Ten pierścień ma bezpośredni dostęp do procesora i pamięci systemowej, więc wszelkie instrukcje wymagające użycia jednego z nich zostaną tutaj wykonane.

Pierścień 3, najmniej uprawniony pierścień, jest dostępny dla procesów użytkowników, które są uruchomione tryb użytkownika. W tym miejscu będzie przebywa większość aplikacji działających na twoim komputerze. Ten pierścień nie ma bezpośredniego dostępu do procesora ani pamięci, a zatem musi przekazać wszelkie instrukcje dotyczące ich do dzwonienia 0.

Pierścienie 1 i 2

Pierścienie 1 i 2 mają specjalne uprawnienia, które zadzwoni 3 (tryb użytkownika). Pierścień 1 służy do interakcji i sterowania sprzętem podłączonym do komputera. Odtwarzanie piosenki za pomocą głośników lub słuchawek lub wyświetlanie wideo na monitorze, są przykładami instrukcji, które musiałyby uruchomić na tym pierścieniu. Pierścień 2 służy do instrukcji, które muszą oddziaływać z przechowywaniem systemu, ładowania lub zapisywania plików. Tego rodzaju uprawnienia są nazywane wejście I wyjście, ponieważ obejmują przenoszenie danych do lub z pamięci roboczej (pamięć RAM). Na przykład załadowanie dokumentu Word ze przechowywania byłoby w pierścieniu 2. Przeglądanie i edytowanie dokumentu spadłoby na pierścień 3, warstwa aplikacji.

Dyskusja

  • Pomyśl o procesie, który może działać na komputerze, taki jak program kalkulatora lub gra w grę. Jakie instrukcje byłyby zaangażowane i jakiego pierścienia użyliby?
  • Jak myślisz, co by się stało, gdyby cały kod działał w pierścieniu 0?