Średni czas oczekiwania procesów.
Download
Report
Transcript Średni czas oczekiwania procesów.
Systemy operacyjne
Wykład 8
Szeregowanie zadań
dr inż. Wojciech Bieniecki
Instytut Nauk Ekonomicznych
i Informatyki
http://wbieniec.kis.p.lodz.pl/pwsz
1
Współbieżność procesów
Jeśli w pamięci systemu komputerowego rezyduje równocześnie kilka procesów,
to mogą one być wykonywane współbieżnie.
W przypadku komputerów jednoprocesorowych oznacza to, ze procesor co
pewien czas jest przydzielany na zmianę różnym procesom.
Taka współbieżność nazywamy pseudorównoległoscią.
W systemach wieloprocesorowych każdy z procesorów może w danej chwili
wykonywać odrębny proces.
Takie przetwarzanie nazywamy przetwarzaniem równoległym.
Za stosowaniem współbieżności przemawia:
możliwość podziału zasobów fizycznych i logicznych między wielu
użytkowników,
przyspieszenie przetwarzania (w architekturach wieloprocesorowych),
zwiększenie stopnia wykorzystania systemu komputerowego.
2
Potrzeba synchronizacji
Procesy wykonują się współbieżnie.
Jeżeli w 100% są izolowane od siebie, nie ma problemów z synchronizacją.
Problem, jeżeli procesy komunikują się lub korzystają ze wspólnych zasobów.
Przykład: Proces A przygotowuje wyniki, a proces B drukuje je na drukarce. Jak
zapewnić, aby B nie zaczął drukować przed zakończeniem przygotowania wyników
przez A?
Potrzeba utrzymywania wspólnych zasobów w spójnym stanie.
Np. proces A dodaje element do listy (z dowiązaniami), a jednocześnie B przegląda
listę, która w momencie trwania operacji dodania ma stan niespójny.
Potrzeba synchronizacji dotyczy także współbieżnych wątków.
Przykład: dwa wątki wywołują funkcję malloc, która przydziela pamięć.
3
Współpraca miedzy procesami współbieżnymi
W zależności od intencji programisty i usług dostarczanych przez system
operacyjny procesy współbieżne mogą ze sobą współpracować lub nie.
Przykład:
Proces niezależny
na jego stan nie wpływa żaden inny
proces,
jego działanie jest deterministyczne,
jego działanie daje się powielać,
jego działanie może być wstrzymywane
i wznawiane bez żadnych skutków
ubocznych.
Proces współpracujący
jego stan jest dzielony z innymi procesami,
jego wykonanie jest niedeterministyczne,
wynik jego działania może zależeć od
innych wykonania procesów.
4
Motywacja planowania przydziału procesora
Wykonanie każdego procesu jest podzielone na fazy:
fazę procesora, w której procesowi jest przydzielony procesor
fazę wejścia-wyjścia, w której na rzecz procesu wykonywana jest operacja wejściawyjścia.
Jeśli dwa procesy są wykonywane
szeregowo, to muszą czekać długo na swoje
wykonanie, a urządzenia wejścia-wyjścia i
procesor są naprzemiennie bezczynne.
Takie procesy można wykonywać współbieżnie.
Jeśli proces, który do tej pory korzystał z procesora wszedł
w fazę korzystania z urządzeń peryferyjnych, to procesor
może zostać przydzielony innemu procesowi, który jest
gotów do wykonania. Takie postępowanie:
zmniejsza czas przetwarzania i czas oczekiwania procesu,
zwiększa i równoważy obciążenie procesora i urządzeń
zewnętrznych,
podnosi przepustowość systemu (ilość pracy wykonana w
jednostce czasu).
5
Algorytmy szeregowania
Sytuacja, przedstawiona powyżej jest "idealna" i w rzeczywistości występuje rzadko.
We wszystkich procesach występują naprzemiennie fazy procesora i wejścia-wyjścia, ale w
różnych proporcjach:
procesy ograniczone przez procesor – mała ilość długich faz procesora
procesy ograniczone przez wejście-wyjście – dużo bardzo krótkich faz procesora.
Wiedza o tych proporcjach umożliwia optymalizację różnych aspektów wydajności systemu
komputerowego, np.:
→ max
wykorzystanie procesora
→ max
przepustowość (ang. throughput) (liczbę wykonanych procesów w jednostce czasu),
→ min
czas cyklu przetwarzania (ang. turnaround time) (czas od przedłożenia procesu do
wykonania do jego zakończenia),
→ min
czas oczekiwania (ang. waiting time)(czas od przedłożenia procesu do rozpoczęcia
jego wykonania),
→ min
czas odpowiedzi (ang. response time)(czas reakcji procesu na zadania użytkownika
– ważny w systemach interaktywnych),
Powyższe strategie realizuje planista krótkoterminowy
6
Wywłaszczanie procesów
Wywłaszczenie – technika używana w środowiskach wielozadaniowych, w której
planista może wstrzymać aktualnie wykonywany proces lub wątek, by umożliwić
działanie innemu. Dzięki temu zawieszenie jednego procesu nie powoduje
blokady całego systemu operacyjnego.
Wywłaszczanie umożliwia szczegółowe określanie czasu, w jakim dany proces
może korzystać z procesora. Wywłaszczanie w niektórych systemach operacyjnych
może dotyczyć nie tylko programów, ale także samego jądra (Linux).
Wywłaszczanie jest często ograniczane, na przykład procedury odpowiedzialne za
obsługę przerwań sprzętowych są zwykle niewywłaszczalne, co znacznie upraszcza
ich konstrukcję ale wymusza też zadbanie o to, żeby szybko się kończyły
umożliwiając działanie innym procesom.
7
Wywłaszczanie procesów
W systemach bez wywłaszczenia zadania jawnie informują planistę, gdy chcą
umożliwić przejście do innych zadań. Jeżeli nie zrobią tego w odpowiednim czasie,
system zaczyna działać bardzo wolno.
Definiujemy dwa rodzaje strategii szeregowania procesów
szeregowanie niewywłaszczalne
Szeregowanie z wywłaszczaniem (ang. preemptive)
Systemy z wywłaszczaniem
Większość UNIXów
Windows (95, ME, NT, 2000, XP, Vista, 7, 8)
AmigaOS
Systemy bez wywłaszczania
MS-DOS
Microsoft Windows 3.x i wcześniejsze
Mac OS 9 i wcześniejsze
8
Wykres Gantta
H.L. Gantt jest autorem metody planowania przedsięwzięć przy
pomocy harmonogramów (rok 1917), które znane są pod nazwą
diagramów (wykresów) Gantta.
Przykład harmonogramu prezentuje schemat:
9
Algorytm FCFS
FCFS (ang. First-Come First-Served), nazywany także FIFO jest
najprostszym algorytmem szeregowania.
Procesor jest przyznawany procesom w takiej kolejności w jakiej są
one umieszczone w kolejce procesów gotowych.
Może prowadzić do efektu konwoju, tzn. oczekiwania procesów
ograniczonych przez wejście-wyjście na zakończenie realizacji
długich faz procesora procesu ograniczonego przez procesor.
10
Algorytm FCFS
Średni czas oczekiwania można policzyć
posługując się diagramem Gantta, który
obrazuje kolejność wykonania procesów.
Na jego dole znajdują się czasy oczekiwania
kolejnych procesów na wykonania.
Są one sumą czasów wykonania ich
poprzedników.
Średni czas oczekiwania procesów jest w przypadku algorytmu FCFS średnią arytmetyczną
czasów wykonania poszczególnych procesów czyli
n
tk
0 24 27 3 17m s
k 1 n
t
11
Algorytm SJF
SJF (ang. Shortest Job First) - najpierw najkrótsze zadanie.
Jest algorytmem optymalnym, jeśli chcemy uzyskać minimalny czas oczekiwania procesów.
Procesor jest przydzielany procesom według długości trwania ich faz procesora (tzn.
zaczynając od tego o najkrótszej fazie, a kończąc na tym o najdłuższej).
Średni czas oczekiwania procesów dla
niewywłaszczającego algorytmu SJF
liczony jest w ten sam sposób jak dla
algorytmu FCFS.
Dla danych z rysunku będzie to:
(3 + 16 + 9 + 0)/4 = 7ms.
12
Algorytm SRT
Algorytm SRT (ang. Shortest Remaining Time) – najpierw najkrótszy pozostały czas.
Jest odmianą algorytmu SJF z wywłaszczaniem.
Procesor jest odbierany wykonywanemu procesowi wtedy, kiedy do kolejki procesów
gotowych nadchodzi proces o czasie trwania fazy procesora krótszym, niż czas konieczny
do zakończenia fazy procesora bieżącego zadania.
Średni czas oczekiwania procesów.
Należy uwzględnić czasy częściowego
wykonania fazy procesora wywłaszczanych
procesów i odjąć je od czasów ich oczekiwania.
Należy również uwzględnić i odjąć od czasu
oczekiwania czas nadejścia do kolejki
procesów gotowych, dla wszystkich
procesów.
t0 k t wk
n
k 1
10 1 1 1 17 2 5 3 4
n
t
26 4 6.5m s
13
Przewidywanie czasu trwania fazy procesu
Stosuje sie oszacowania statystyczne, bazujące na historii wykonania procesu.
Te oszacowania opierają się na średniej wykładniczej.
Jeśli zapamiętywane są tylko dwie ostatnie fazy procesora procesu, to ta średnia ma
postać:
gdzie jest czasem wykonania fazy procesora, a współczynnikiem z przedziału [0,1].
Jeśli zapamiętywanych jest j faz, to wzór na średnią wykładniczą przyjmuje postać:
14
Przewidywanie fazy CPU
15
Szeregowanie priorytetowe
Algorytm priorytetowy przydziela procesor procesom według przypisanego im priorytetu.
Priorytet najczęściej liczba naturalna, która określa „ważność” procesu. Zazwyczaj im
mniejsza jest wartość tej liczby, tym proces ma wyższy priorytet.
Priorytety mogą być przydzielane zewnętrznie jak i wewnętrznie.
Szeregowanie priorytetowe może odbywać się z wywłaszczaniem (ang. preemptive), jak i
bez (non-preemptive).
Algorytm SJF (w obu wersjach) jest formą algorytmu priorytetowego (priorytetem jest
przewidywany czas fazy CPU).
Przy planowaniu priorytetowym może dojść do zjawiska, które nazywamy zagłodzeniem
procesu (ang. starvation). Zachodzi ono wtedy, gdy w systemie jest proces o bardzo niskim
priorytecie. Jeśli inne procesy będą miały zawsze wyższe priorytety to ten proces nigdy nie
otrzyma dostępu do procesora.
Aby uniknąć zjawiska zagłodzenia stosuje sie okresowe postarzanie procesów (ang. aging),
czyli zwiększanie ich priorytetów w miarę upływu czasu.
16
Średni czas oczekiwania
Średni czas oczekiwania będzie
policzony dla algorytmu
priorytetowego bez wywłaszczeń.
Dla danych z rysunku obok będzie to
(1 + 6 + 16 + 18)/5 = 8, 2ms.
Szeregowanie rotacyjne
Algorytm rotacyjny (ang. RR – round robin) zwany także karuzelowym występuje tylko w
formie wywłaszczeniowej i jest właściwy dla systemów interaktywnych.
Każdemu procesowi system operacyjny przyznaje pewien kwant czasu (ang. time quantum)
na wykonanie fazy procesora, np. 10 – 100ms.
Jeśli proces wykona swoją fazę wcześniej, to dobrowolnie oddaje procesor innym
procesom. Jeśli nie – to procesor jest mu odbierany, a on wędruje na koniec kolejki
procesów gotowych i musi czekać aż wszystkie pozostałe procesy wykorzystają swój kwant
czasu. Kolejka procesów gotowych jest wiec listą cykliczną.
Jeśli jest n procesów w kolejce gotowości, a kwant czasu wynosi q, to każdy proces otrzyma
1/n czasu procesora, porcjami, których wielkość nie przekracza q jednostek czasu.
Żaden proces nie czeka dłużej niż (n-1)q jednostek czasu
Dobierając kwant czasu należy uważać, aby nie był zbyt długi (wówczas otrzymamy
algorytm FCFS) lub zbyt krótki (wówczas procesor więcej czasu będzie poświęcał na
przełączanie kontekstu, niż na wykonywanie procesów).
18
Średni czas oczekiwania
Należy uwzględnić czasy częściowych
wykonań faz procesora poszczególnych
procesów (może ich być kilka) i odjąć je
od czasów ich oczekiwań.
19
Kwant czasu a czas przełączania
kontekstu
20
Zależność czasu cyklu od kwantu czasu
21
Kolejka wielopoziomowa
Działanie opisanych wcześniej algorytmów można połączyć dzieląc kolejkę procesów gotowych na kilka
kolejek.
Procesy umieszczane są w tych kolejkach w zależności do jakiej kategorii należą lub jaki maja priorytet.
Szeregowanie w obrębie poszczególnych kolejek odbywa sie różnymi algorytmami lub tez tym samym
algorytmem, ale różne są parametry dla tego algorytmu.
Przykład – podział na dwie kolejki
Kolejka pierwszoplanowa – foreground (interactive)
Kolejka drugoplanowa – background (batch)
Każda kolejka ma swój algorytm szeregowania
Pierwszoplanowa: RR
Drugoplanowa: FCFS
Planowanie między kolejkami
Stałopriorytetowe (fixed priority scheduling). Obsługuje najpierw kolejkę pierwszoplanową
potem drugoplanową. Możliwość zagłodzenia
Odcinek czasu (time slice) – każda kolejka dostaje pewną ilość czasu CPU, który może
rozdysponować między swoje procesy, np. 80% dla pierwszoplanowej i 20% dla
drugoplanowej
22
Szeregowanie w kolejkach wielopoziomowych
najwyższy priorytet
Procesy systemowe
Procesy interaktywne
Procesy interaktywne edycji
Procesy wsadowe
Procesy studentów
najniższy priorytet
23
Kolejka wielopoziomowa ze sprzężeniem
zwrotnym
Schemat kolejki wielopoziomowej można uzupełnić o migrację procesów miedzy kolejkami.
Otrzymujemy w ten sposób wielopoziomową kolejkę ze sprzężeniami zwrotnymi (ang.
Mulitlevel Feedback Queue) – autor Leonard Kleinrock.
Przechodzenie procesów miedzy kolejkami jest zależne od czasu trwania ich poprzedniej
fazy procesora (w ten sposób można realizować postarzanie procesów).
Na tym schemacie opiera sie szeregowanie procesów w oryginalnym systemie Unix.
Planista MLFQ jest określany za pomocą następujących parametrów:
Liczba kolejek
Algorytm planowania dla każdej kolejki
Metoda użyta do decydowania o awansowaniu procesu do kolejki o wyższym
priorytecie
Metoda użyta do decydowania o przeniesieniu procesu do kolejki o niższym
priorytecie
Metoda określająca kolejkę, do której trafia proces potrzebujący obsługi
24
Przykład MLFQ
Mamy trzy kolejki
Q0 – kwant czasu 8ms
Q1 – kwant czasu 16ms
Q2 – FCFS
Szeregowanie:
Nowe zadanie trafia do kolejki Q0, obsługiwanej wg. Algorytmu FCFS. Po
przydzieleniu CPU otrzymuje kwant 8ms. Jeżeli w tym czasie zadanie nie
skończy się, jest przemieszczane do kolejki Q1.
W kolejce Q1 zadanie jest obsługiwane wg. FCFS i otrzyma dodatkowo
16ms. Jeżeli w tym czasie nie zakończy się, jest wywłaszczane i
przemieszczane do kolejki Q2.
25
Przykład MLFQ
26
Algorytm O(1)
Opracowany przez Ingo Molnara na potrzeby systemu Linux.
Jest modyfikacją MLFQ i jest bardzo efektywny.
Każdy proces w Linuksie posiada dwa priorytety:
statyczny nazywany poziomem uprzejmości (ang. nice),
dynamiczny, który zależy od stopnia interaktywności procesu
i zmienia się w czasie.
Linux preferuje procesy ograniczone przez wejście-wyjście, które uznaje za
bardziej interaktywne od procesów ograniczonych przez procesor.
Ocena stopnia interaktywności dokonywana jest przez funkcje heurystyczne.
Im wyższy stopień interaktywności procesu, tym większy priorytet dynamiczny on
uzyskuje.
Priorytet ostateczny jest wynikiem dodania priorytetu statycznego i
dynamicznego.
27
Algorytm O(1)
Kolejka procesów gotowych jest strukturą danych zawierająca wskaźniki na dwie tablice
priorytetów: aktywna i przeterminowana.
Tablice te maja po 140 elementów (tyle jest różnych priorytetów w Linuksie), każdy z nich
jest wskaźnikiem na listę cykliczną procesów gotowych do wykonania.
28
Algorytm O(1)
Szeregowanie w obrębie jednej takiej listy zachodzi według algorytmu rotacyjnego, przy
czym kwant czasu jest zależny od wartości priorytetu (im wyższy, tym kwant dłuższy).
Aby przyspieszyć wyszukiwanie elementów w tablicach zawierających wskaźniki na
niepuste listy procesów, z każdą z nich skojarzono mapę bitową.
Pozycja pierwszego ustawionego bitu wskazuje, który element tablicy zawiera niepusty
wskaźnik.
Jeśli proces wykorzysta swój kwant czasu, to natychmiast wyliczany jest dla niego nowy
priorytet i jest on przenoszony do tablicy przeterminowanej.
Po całkowitym opróżnieniu tablicy aktywnej dokonywana jest zamiana wskaźników i tablica
aktywna staje sie tablica przeterminowana, a tablica przeterminowana aktywna.
Powyższy opis nie uwzględnia kilku szczegółów, takich jak dawanie drugiej szansy procesom
wysoko interaktywnym lub sprawdzanie, czy któryś z procesów nie ulega zagłodzeniu.
29
Szeregowanie w systemach
wieloprocesorowych
Jeśli w systemie wieloprocesorowym każdy procesor jest innego typu (system
heterogeniczny, np.: w systemie rozproszonym), to planowanie jest stosunkowo proste każdy procesor otrzymuje sobie właściwe zadania.
Jeśli procesory są jednakowe (system homogeniczny), to planowanie może przebiegać na
kilka sposobów.
Każdy z procesorów może mieć osobną kolejkę zadań, a system operacyjny powinien dbać o
to, aby liczby elementów tych kolejek były takie same lub porównywalne (load sharing).
Procesory mogą też mieć wspólną kolejkę zadań. W takim rozwiązaniu wyznacza się
najczęściej jeden z procesorów do wykonywania kodu planisty.
Jest to forma wieloprzetwarzania asymetrycznego (asymmetric multiprocessing).
30
Ocena algorytmów szeregowania
Ocena wstępna: modelowanie deterministyczne – ocena analitycznej algorytmu przy
założeniu pewnych statycznych, uśrednionych obciążeń procesora.
To oszacowanie wykonywane jest za pomocą diagramów Gantta.
Drugi etap oceny: metoda analizy obsługi kolejek w sieci.
Głównym elementem tej metody jest wzór Little’a n = ·W, gdzie to tempo przybywania
nowych procesów do systemu, W to średni czas oczekiwania w kolejce, a n to średnia
długość kolejki. Jest to metoda trudna.
Prostsza, ale równie wiarygodna metoda oceny algorytmów szeregowania jest
symulowanie ich działania w komputerze.
Dane dla symulatora na temat procesów może dostarczać generator liczb pseudolosowych
o rozkładzie wykładniczym, lub można je pobrać z rzeczywistego systemu.
Ostateczną oceną jest jednak zawsze implementacja algorytmu w prawdziwym systemie
operacyjnym.
W takim przypadku programista systemowy może zmieniać parametry algorytmu lub sam
algorytm w oparciu o opinie użytkowników.
31
Literatura
Wojciech Kwedlo: Wykład: Systemy operacyjne Wydział Informatyki, Politechnika
Białostocka
Arkadiusz Chrobot: Wykład: Systemy Operacyjne. Katedra Informatyki
Politechniki Świętokrzyskiej
32