Projekt zadania laboratoryjnego

Autor: Michał Pakuła

Słowo wstępu

Obecnie w jądrze Linuxa zaimplementowane są trzy tryby szeregowania procesów:

  1. SCHED_OTHER
  2. SCHED_FIFO
  3. SCHED_RR.

Mimo, że istnieją różnice w szeregowaniu procesów znajdujących się w różnych trybach, to łączy je jedna cecha wspólna - generalnie system stara się, by użytkownik miał wrażenie, iż wszystkie procesy są wykonywane równocześnie (równolegle). Wrażenie to osiągane jest między innymi przez wyznaczenie dość krótkich kwantów czasu, jakie są przyznawane poszczególnym procesom oraz przez stosowanie wywłaszczania.

Zarys ogólny

Proponowane zadanie będzie, jak się już chyba łatwo domyślić, związane z modyfikacją trybów szeregowania procesów. Chodzi mianowicie o to, by zaimplementować w jądrze Linuxa nowy tryb szeregowania ? szeregowanie wsadowe (dalej określane jako SCHED_BATCH). Prócz samej implementacji tego trybu należy oczywiście udostępnić możliwość tworzenia procesów szeregowanych w tym właśnie trybie.

Szczegóły

Jako szeregowanie wsadowe rozumiany jest tutaj specjalny tryb szeregowania procesów: nie muszą one być faktycznie uruchomione w momencie utworzenia, nie wymagamy od nich szybkiego czasu reakcji czy rozsądnej czasowo interakcji z użytkownikiem. Jako standardowe przykłady procesów, które mogą wykonywać się w takim trybie można podać żmudne procesy obliczeniowe (potrzebujące dużo czasu i mocy procesora) oraz różnego rodzaju procesy administracyjne, dokonujące np. okresowych przeglądów systemu, sprawdzania haseł itp. Gdyby procesy takie były uruchamiane w trakcie codziennej pracy użytkowników systemu komputerowego, nie przyniosłoby to specjalnych korzyści ani tym użytkownikom, ani wspomnianym procesom. Dlatego standardowo zadania takie wykonuje się w okresach, kiedy system jest mało obciążony, czyli np. w godzinach nocnych lub w weekendy. Obecnie w Linuxie istnieją takie usługi jak cron i at, które pozwalają określić moment rozpoczęcia wykonania danego procesu, jednak są one zaimplementowane na poziomie użytkownika (a nie jądra systemu) i faktycznie nie realizują specjalnego trybu szeregowania. Przedstawiany projekt to propozycja zrealizowania przetwarzania wsadowego na poziomie jądra systemu operacyjnego. Miałoby ono działać w taki sposób, że o określonej godzinie (każdego dnia) algorytm szeregujący ?przełączałby się? na tryb szeregowania wsadowego i obsługiwał zadania uruchomione w tym trybie. Po pewnym (określonym) czasie system przywracałby standardowy sposób szeregowania. Co ważne ? zadania wsadowe wykonywałyby się faktycznie tylko w trakcie obsługi szeregowania wsadowego, natomiast w trakcie zwykłej pracy systemu w ogóle by nie były wybierane do szeregowania. Dzięki temu w systemie istniałoby wyraźne rozgraniczenie: (na przykład) od godz. 7.00 do 22.00 mamy czas przeznaczony dla zwykłych użytkowników, natomiast w pozostałych godzinach użytkownicy nie pracują a wykonują się wyłącznie zadania wsadowe. Oczywiście nie jest to najbardziej elastyczne rozwiązanie, niemniej jednak wydaje się, że w większości przypadków użytkowanie (lokalnego) systemu komputerowego przebiega w podobny sposób, zatem wprowadzenie proponowanych zmian nie powinno zakłócić jego pracy.

Ważnym elementem jest określenie metody szeregowania procesów w trybie wsadowym. Ponieważ w trybie tym będą wykonywane głównie zadania czasochłonne (np. skomplikowane procesy obliczeniowe) i nie wymaga się szybkiej reakcji na poczynania użytkownika (bo go w ogóle w tym czasie nie powinno być), dość naturalne wydaje się przyjęcie prostego sposobu szeregowania typu FIFO z długim kwantem czasu. Takie rozwiązanie pozwoli na poczynienie dodatkowych oszczędności czasowych wynikających z rzadszego przełączania kontekstu i faktu, że nie przegląda się za każdym razem całej listy procesów.

Elementy do modyfikacji

Zadanie określone zostało dość ogólnie, toteż jest wiele możliwości jego modyfikacji. Najważniejsze elementy, które można zmodyfikować to:

  1. sposób przekazywania parametrów szeregowania (określenia momentów przełączania się funkcji szeregującej z trybu zwykłego do wsadowego)
  2. sposób traktowania zadań nie-wsadowych w trakcie trybu wsadowego
  3. reprezentacja procesów wsadowych
  4. algorytm szeregowania procesów wsadowych i jego parametry.

W części "Dla prowadzących laboratorium" przedstawiona jest moja propozycja wyboru powyższych opcji, niemniej jednak wydaje się, że pozostawienie wolnego wyboru studentom, którzy będą (ewentualnie) rozwiązywać to zadanie może być dla nich dobrym ćwiczeniem (a dla sprawdzających dodatkowym kryterium oceniania).