Architektura Komputerów/Wykład 11: Ochrona zasobów

Plan wykładu





Potrzeby ochrony





Zasoby podlegające ochronie



  • Procesor
    • proces nie może zmonopolizować czasu procesora - inne procesy muszą mieć możliwość wykonywania się
    • (inne aspekty ochrony procesora - w dalszej części wykładu)
  • Pamięć
    • proces może mieć dostęp tylko do przydzielonej mu pamięci
      • ew. do danych współdzielonych - za zgodą innego procesu
    • proces nie powinien odwoływać się do własnej pamięci w nieprawidłowy sposób (np. zapis stałych, odczyt lub zapis kodu. "wykonanie" danych)
  • Wejście - wyjście
    • dostęp do urządzeń zewnętrznych musi być realizowany w taki sposób, aby procesy nie przeszkadzały sobie nawzajem
    • w praktyce uzyskuje się to przez całkowite uniemożliwienie bezpośrednich odwołań do urządzeń


Użytkownik i system



  • Realizacja mechanizmów ochrony wymaga wyodrębnienia conajmniej dwóch poziomów uprawnień - tzw. poziomów zaufania
  • Procesy użytkowe pracują na poziomie użytkownika, na którym podlegają one zasadom określonym przez system operacyjnym
  • System operacyjny pracuje na poziomie systemowym na którym istnieje możliwość określania zasad ochrony obowiązujących procesy użytkowe
  • Zakłada się, że oprogramowanie działające na poziomie systemowym jest zaufane, czyli wolne od błędów
  • Oprogramowanie działające na poziomie użytkownika może zawierać dowolne błędy i nie mogą one wpływać destrukcyjnie na działanie systemu


Poziomy zaufania



  • W prostych realizacjach systemów ochrony występują dwa lub trzy poziomy zaufania
    • poziom jądra systemu - pełny dostęp do wszystkich zasobów
    • poziom usług systemu (opcjonalny) - dostęp ograniczony, ale o znacznych uprawnieniach
    • poziom użytkownika - dostęp do zasobów przydzielonych przez system, na zasadach określonych przez system
  • Dostęp do zasobów zależy od poziomu zaufania
    • w każdej chwili procesor pracuje z określonym poziomem zaufania
  • Informacja o bieżącym poziomie zaufania jest przechowywana w procesorze
    • najczęściej w systemowym rejestrze stanu procesora
    • informacja ta ma postać jednego lub dwóch bitów, w zależności od liczby poziomów zaufania dostępnych w danej architekturze


Poziomy zaufania - x86



  • Cztery poziomy zaufania
    • 0 - jądro
    • 1, 2- dodatkowe poziomy systemowe
    • 3 - użytkownik
  • Współczesne oprogramowanie korzysta z dwóch poziomów: 0 i 3
  • Informacja o bieżącym poziomie zaufania jest przechowywana w niewidocznym programowo rejestrze deskryptora segmentu kodu
    • informacja ta ma postać pola 2-bitowego oznaczonego jako CPL (Current Pmilege Level)


Ochrona procesora



  • W celu umożliwienia sterowania mechanizmami ochrony procesor jest wyposażony w rejestry zawierające informacje sterujące
    • np. bieżący poziom zaufania
  • Dostęp do tych rejestrów jest możliwy tylko na poziomie systemowym
    • w przeciwnym razie użytkownik mógłby np. zmienić poziom zaufania na systemowy
  • Rejestry systemowe procesora muszą podlegać ochronie


Egzekwowanie zasad ochrony



  • Każda próba naruszenia zasad ochrony musi być wykryta i udaremniona oraz zgłoszona systemowi operacyjnemu jako wyjątek
    • więcej o wyjątkach - moduł 13
  • Próba nie dochodzi do skutku i sterowanie przejmuje system operacyjny
  • System ma możliwość zakończenia wykonania procesu naruszającego zasady ochrony i usunięcia go


Ochrona czasu procesora



  • System wieloprocesowy musi przełączać procesy w czasie
  • Proces nie może zmonopoliować procesora
    • nawet jeśli wpadnie w pętlę nieskończoną
  • Praca z przydziałem czasu jest realizowana poprzez periodyczne przejmowanie kontroli przez system operacyjny
    • dzieje się to przez zgłoszenie wyjątku przez timer systemowy
    • częstotliwość - w zależności od potrzeb - od kilkudziesięciu Hz do kilku kHz
  • Po przejęciu sterowania system ma możliwość usunięcia procesu
    • dzieje się to zwykle na życzenie użytkownika, który zauważył "zawieszenie" procesu


Ochrona urządzeń wejścia - wyjścia



  • Zwykle realizowana przez całkowite odizolowanie procesów użytkowych od fizycznych urządzeń
    • próba dostępu jest blokowana i sygnalizowana jako wyjątek
  • Fizyczną obsługą urządzeń zajmuje się system operacyjny
    • system operacyjny udostępnia aplikacjom obiekty wirtualne, które są powiązane z urządzeniami w sposób określony przez sam system
      • przykład - strumienie STDIN i STDOUT w języku C
  • W niektórych sytuacjach system może zezwolić na wyłączny dostęp pojedynczego procesu do urządzenia
    • przykład: współpraca ze sterownikiem graficznym dla aplikacji intensywnych graficznie - podsystem DirectX w Windows


Ochrona pamięci



  • Ochrona pamięci jest najbardziej skomplikowanym aspektem ochrony zasobów
    • proces musi mieć dostęp do pamięci mu przydzielonej, a jednocześnie nie może odwoływać się poza przedzielony obszar
  • Więcej na temat zarządzania pamięcią - moduł 12


Maszyny wirtualne



  • W niektórych zastosowaniach może istnieć potrzeba równoczesnej pracy kilku systemów operacyjnych na jednym komputerze
    • jest to podobne do pracy aplikacji z podziałem czasu, ale system operacyjny musi mieć możliwość sterowania ochroną zasobów
  • Współdzielenie komputera przez kilka systemów wymaga:
    • oprogramowania nadrzędnego w stosunku do systemów -hypervisora
    • obniżenia poziomu zaufania systemu w sposób, który nie byłby zauważalny przez pracujący w ten sposób system


Maszyny wirtualne - implementacja



  • Dawniej:
    • system na poziomie zaufania użytkownika, hypervisor na poziomie zaufania systemu
    • hypervisor emuluje programowo wszelkie operacje o charakterze system owym
      • próba dostępu do zasobów systemowych powoduje wyjątek, obsługiwany przez hypervisora
      • wymaganie: każda próba odczytu (a nie tylko modyfikacji) informacji systemowych musi być sygnalizowana jako błąd do hypeivisora
  • Obecnie:
    • dodatkowy poziom zaufania hypervisora albo
    • hypervisor na poziomie "dawnym" systemowym (tzw. "gospodarz" -host) i tryb "gościa" (guest) dla systemów operacyjnych
      • np. AMD64
    • operacje na niektórych zasobach dostępne tylko w trybie gospodarza