Poprzedni temat Spis treści Następny temat

Tryby działania

UML może byc uruchamiany w dwóch trybach: Tracing Thread (TT) i Separate Kernel Address Space (SKAS).

Tryb TT:


W trybie TT jądro UML znjaduje się w górnych 0.5 GB przestrzeni adresowej procesów.
Tryb TT opiera się na istnieniu w systemie hosta wątku śledzącego (Tracing Task). Wątek ten dzięki funkcji systemowej ptrace() może przechwytywać wywołania systemowe procesów spod UML i wykonywać je za nie (w ten sposób wywołujać funkcję fork() staje się on rodzicem wszystkich procesów w UML-każdemu procesowi pod UML odpowiada proces w systemie hosta).Normalny tryb wykonywania funkcji systemowej przez proces spod UML wygląda następująco:
  1. proces wywołuje funkcję systemową
  2. wątek śledzący zapamietuje numer i argmenty funkcji systemowej i zamienia go na nr funkcji getpid()
  3. proces jest przenoszony do rejonu pamięci odpowiadającemu jadru UML
  4. wątek śledzący przestaje na chwile śledzenie funkcją ptrace() i wywołuje funkcje systemową procesu
  5. zwrócoene wartości zapisywane są w odpowiednich rejesetrach i budzony jest proces UML
  6. proces wykonuje się dalej ze zwróconymi wartościami wywołania systemowego, z jego punktu widzenia nie wydarzyło się nic niezwykłego
Takie rozwiązanie tego problemu wymuszone było brakiem wsparcia ze strony sytemu operacyjnego host i powodowało pewne problemy:
  • jądro UML znajdowało się w przestrzeni adresowej procesów hosta i było dostępne dla wykonywanych procesów i domysłnie zapisywalne, jest to problem bezpieczeństwa - proces może się dostać do systemu macierzystego.
  • UML używa mechanizmu sygnałów do wymuszenia zmiany kontroli w czasie wywołania systemowego, co powoduje spory narzut wydajnościowy. Częsciowym rozwiązaniem tych problemów jest tryb Jail w którym można uruchomić UML. W trybi tym jądro UML jest tylko do odczytu, niestety jest ono wciąż widoczne z poziomu procesów, a zapewnienie prawa tylko do odczytu powoduje dodatkowy spory narzut wydajnościowy.

    Tryb SKAS:

    Rozwiązaniem problemów trybu TT stał się tryb SKAS (Separate Kernel Address Space) w trybie tym jądro UML umieszczone jest w osobnej przestrzeni adresowej (tym samym jądro staje się niewidoczne dla innych procesów UML). Jest ona identyczna z tą jaką miałoby ono jako jądro macierzyste. Eliminuje to więc rówież problem komunikacji sygnałami przy wywołaniach systemowych i zwiększa wydajność działania systemu. Według strony projektu, UML w tym trybie pownien powienien pracować około 30% szybciej niż w trybie TT. W trybie SKAS z poziomu hosta widoczne są tylko cztery procesy UML:
  • Wątek jądra UML, uruchomiony w oddzielnej przestrzeni adresowej, który wykonuje kod jądra i przechwytuje wywołania funkcji systemowych prcesów UML
  • Wątek użytkownika, który uruchamia wszystkie procesy pod UML i przełącza pomiedzy przestrzenią adresów UML i macierzystego systemu operacyjnego.
  • Asynchroniczny watek obslugi urządzeń blokowych
  • Watek emulujący sygnał SIGIO Użycie tego trybu wymaga założenie łatki na jądro systemu macierzystego (łatka dostępna jest na stronie projektu) i zaznaczeniu opcji CONFIG_MODE_SKAS w konfiguracji jądra. Autorzy zapewniają, że łatka jest mało inwazyjna i nie powinna mieć negatywnego wpływu na działanie systemu. Jeżeli opcja CONFIG_MODE_SKAS nie była zaznaczona lub nie wykryta zostanie łatka SKAS UML uruchamiał się będzie w trybie TT.

    © 2004 Mateusz Chrzęst, Piotr Krawczyk, Adam Kruszewski.