TEORIA
1. SFORMUŁOWANIE PROBLEMU.
Deterministyczne problemy szeregowania zadań (programów) na procesorach (maszynach) polegają na wykonywaniu danego zbioru zadań (których wszystkie parametry są z góry znane) przez określony zbiór procesorów w taki sposób, aby określone kryterium oceny wykonania zbioru zadań było ekstremalizowane. Procesory mogą być przy tym albo równoległe tzn. spełniające te same funkcje, albo dedykowane tzn. różniące się wykonywanymi funkcjami.
Interpretacja problemu szeregowania zadań jest bardzo szeroka i istotna. Zadania i maszyny mogą być interpretowane np. jako: detale i obrabiarki, statki i doki, zajęcia lekcyjne i nauczyciele, pacjenci i wyposażenie szpitala lub miasta i komiwojażerowie. Pomimo iż mówimy o procesorach i zadaniach interpretacja nie powinna być czysto komputerowa.
- Spis treści -
2. KLASYFIKACJA PROCESORÓW.
Rozpatrujemy zbiór n zadań Z = {Z1, Z2, ..., Zn} i zbiór m procesorów P = {P1, P2, ..., Pn}.
2.1. Procesory równoległe.
Ogólnie ujmując procesory równoległe to procesory wykonujące te same zadania. Wyróżniamy wśród nich trzy typy w zależności od prędkości pracy:
- Procesory identyczne - wykonują wszystkie zadania ze zbioru zadań Z z równymi prędkościami.
- Procesory jednorodne - wykonują zadania ze zbioru zadań Z z różnymi prędkościami ale w ten sposób, że prędkość każdego z nich jest stała i nie zależy od zadanie ze zbioru Z.
- Procesory dowolne - jeżeli prędkości co najmniej dwóch procesorów ze zbioru P zależą od wykonywnego zadania ze zbioru Z.
- Spis treści -
2.2. Procesory dedykowane.
W przypadku procesorów dedykowanych wyróżnia się trzy systemy obsługi zadań:
- Przepływowy (flow shop) - każde zadanie ze zbioru Z musi być wykonane w tej samej kolejności przez wszystkie procesory ze zbioru P.
- Otwarty (open shop) - kolejność wykonania nie jest narzucona.
- Ogólny (job shop) - zarówno podzbiór procesorów mających wykonać dane zadanie, jak i kolejność wykonywania każdego zadania są dowolne, choć określone.
W przypadku procesorów dedykowanych zadanie Zj należące do zbioru Z dzieli się na operacje O1 j , O2 j , ...,Ok j , z których każda może żądać innego procesora. Przy tym dla systemu przepływowego liczba operacji przypadających na zadanie jest równa liczbie procesorów m, a kolejność ich wykonywania jest taka, że operacja O1j jest wykonywana na procesorze P1, operacja O2j - na procesorze P2 itd. Ponadto wykonanie operacji Oi-1,  j musi poprzedzać wykonanie operacji Oi j, i = 2, 3, ..., m. W przypadku systemu otwartego na wykonanie jednego zadania składa się także m operacji, identyczne jest również ich przyporządkowanie do procesorów. Kolejność wykonania operacji jest natomiast dowolna i nieokreślona. W przypadku systemu ogólnego zarówno liczba operacji przypadających na zadanie jak i przyporządkowanie ich do procesorów i kolejność wykonywania są dowolne, lecz muszą być z góry określone.
- Spis treści -
3. PODSTAWOWE DEFINICJE.
 
3.1. Parametry charakteryzujące zadanie
Zadanie Zj Î Z jest scharakteryzowane przez następujące dane:
- Wektor czasów wykonywania - tj = [t1j, t2j, ..., tmj]T, gdzie tij jest czasem, w którym procesor Pi wykonuje zadanie Zj. W przypadku procesorów identycznych czasy wykonywania zadania Zj są równe dla wszystkich procesorów, mówimy zatem o czasie wykonywania tj. W przypadku procesorów jednorodnych czas wykonywania zadania Zj na procesorze Pi jest równy tij = tj / bi, i = 1, 2, ...,m, gdzie tj jest czasem wykonywania zadania Zj na wybranym procesorze standardowym (np. najwolniejszym), zaś bi jest współczynnikiem prędkości procesora Pi w stosunku do procesora standardowego.
- Moment przybycia (gotowości do wykonania) - rj. Jeśli dla wszystkich zadań ze zbioru Z momenty te są jednakowe, to przyjmuje się rj = 0, j = 1, 2, ..., n.
- Termin zakończenia wykonywania - dj. Jeśli wykonywanie zadania Zj musi zostać zakończone przed upływem terminu dj, to dj nazwiemy linią krytyczną.
- Waga (priorytet) - wj, interpretuje się ją jako koszt przebywania zadania Zj w systemie komputerowym w ciągu jednostki czasu. Zatem koszt przebywania w systemie zadania Zj zakończonego w chwili t jest równy wjt.
- Spis treści -
3.2. Pozostałe definicje.
- Zadania podzielne (w przypadku maszyn dedykowanych - operacje) - wykonywanie każdego zadania ze zbioru Z (lub operacji z odpowiedniego zbioru operacji) może być przerwane w dowolnej chwili i następnie kontynuowane, być może na innym procesorze, przy czym obsługa tego przerwania nie jest związana ze stratą czasu.
 
- Zadania niepodzielne - przerwanie wykonywania każdego zadania ze zbioru Z jest niemożliwe.
 
- Ograniczenia kolejnościowe - określone w sposób Zi
Zj oznacza, że wykonywanie zadania Zi musi zostać zakończone przed rozpoczęciem wykonywania zadania Zj. Jeżeli w zbiorze zadań istnieje przynajmniej jedno tak określone ograniczenie kolejnościowe mówimy o zbiorze zadań zależnych, w przeciwnym razie - o zbiorze zadań niezależnych.
- Spis treści -
- Uszeregowanie - takie przyporządkowanie w czasie procesorów ze zbioru P do zadań ze zbioru Z, dla którego spełnione są następujące warunki:
 
- w każdej chwili każdy procesor wykonuje co najwyżej jedno zadanie;
- zadanie Zj jest wykonywane w przedziale czasowym [rj, ¥ );
- wszystkie zadania zostaną wykonane;
- dla każdych dwóch zadań Zi, Zj Î Z, takich że Zi
Zj, wykonywanie zadania Zj rozpoczyna się po zakończeniu wykonywania zadania Zi;
- w przypadku zadań niepodzielnych wykonanie żadnego zadania w zbiorze Z nie jest przerywane, w przypadku zadań podzielnych liczba przerw w wykonywaniu każdego zadania jest skończona.
W przypadku zadań niepodzielnych mówimy o uszeregowaniu niepodzielnym, w przypadku zadań podzielnych - o uszeregowaniu podzielnym.
- Spis treści -
4. ALGORYTMY DOKŁADNE DLA PROCESORÓW DEDYKOWANYCH.
 
4.1. Przepływowy system obsługi (Flow Shop).
Ponizszy algorytm znajduje optymalne uszeregowanie w przypadku dwóch procesorów i dowolnych czasów wykonywania operacji niepodzielnych. Jest to algorytm o złożoności O(nlogn)
Algorytm Johnsona: Szeregowanie na dwóch procesorach operacji niepodzielnych o dowolnych czasach wykonywania w przepływowym systemie obsługi, w celu minimalizacji Cmax.
1. Wybierz zadania, dla których t1jŁt2j. Przydzielaj operacje tych zadań do odpowiednich procesów w kolejności nie malejących wartości t1j.
2. Operacje pozostałych zadań przydzielaj do odpowiednich procesorów w kolejności nie rosnących wartości t2j.
Powyższy algorytm można także rozszerzyć na specjalny przypadek trzech procesorów, dla którego
albo
. W tym przypadku czas wykonywania na drugim procesorze nie odgrywa roli, a optymlne uszeregowanie można otrzymać, stosując algorytm Johnsona dla czasów wykonywania (t1j + t2j,   t2j + t3j)
Przykład zastosowania algorytmu Johnsona dla dwóch procesorów (m = 2) i pięciu zadań (n = 5)
- Spis treści -
4.2. Otwarty system obsługi (Open Shop).
Rozpatrujemy problem minimalizacji Cmax dla dwóch procesorów. Znajdujemy optymalne rozwiązanie stosując poniższy algorytm o złożoności O(n).
Algorytm: Szeregowanie na dwóch procesorach operacji niepodzielnych w otwartym systemie obsługi, w celu minimalizacji Cmax.
Przyjmujemy następujące oznaczenia:
| aj = t1j,
|
A = {Zj: aj ł bj}
|
|
|
| bj = t2j,
|
B = {Zj: aj < bj}
|
|
|
1. Wybierz spośród wszystkich zadań dowolne dwa zadania
Zr oraz
Zl, dla których są spełnione warunki:

Niech
A' =
A \ {
Zr,
Zl}, 
B' =
B \ {
Zr,
Zl}.
2. Skonstruuj uszeregowanie osobno dla
B' È {
Zl} oraz dla
A' È {
Zr} w sposób pokazany na poniższym rysunku, przy czym uszeregowanie zadań w zbiorach
A' i
B' jest dowolne.
 

 
3. Połączenie uszeregowań w jedno. Rozpatrujemy dwa przypadki.
3a. Przypadek 1:
T1 -
al ł T2 -
br.
Połącz obydwa uszeregowania w jedno, w sposób pokazany na poniższym rysunku. Przesuń zadania ze zbioru
B' È {
Zl} wykonywane na procesorze
P2, maksymalnie w prawo.
 

 
3b. Przypadek 2:
T1 -
al < T2 -
br.
Połącz obydwa uszeregowania w jedno, w sposób pokazany na poniższym rysunku. Przesuń zadania ze zbioru
A' È {
Zr} wykonywane na procesorze
P1, maksymalnie w lewo.
 

 
4.Zmiana kolejnosci wykonywania operacji.
4a. Przypadek 1:
T1 -
al ł T2 -
br.
Zmień kolejność wykonywania operacji na procesorze
P2 tak ,by operacja
O2r była wykonana jako pierwsza. Jeśli
ar Ł T2 - br to uszeregowanie ma postać przedstawioną na rys.1. Jeśli natomiast
ar > T2 - br to uszeregowanie ma postac jak na rys.2.
   
 
4b. Przypadek 2:
T1 -
al < T2 -
br.
Zmień kolejność wykonywania operacji na procesorze
P1 tak, by operacja
O2l była wykonana na końcu. Jeśli
bl Ł T1 - al to uszeregowanie ma postać przedstawioną na rys.3. Jeśli natomiast
bl > T1 - al to uszeregowanie ma postac jak na rys.4.
   
 
- Spis treści -
4.3. Ogólny system obsługi (Job Shop).
Poniższy algorytm można stosować w przypadku dwóch procesorów i zadań składających się z co najwyżej dwóch operacji. Algorytm znajduje optymalne rozwiązanie. Jego złożoność jest O(nlogn)
Przyjmujemy wstępne oznaczenia:
Ji - zbiór zadań składających się tylko z jednej operacji, która ma być wykonana na procesorze Pi (i = 1, 2)
Jhi - zbiór zadań składających się z dwóch operacji, z których pierwsza ma być wykonana na procesorze Ph, a druga na procesorze Pi (hi = 12,21).
 
Algorytm: Szeregowanie na dwóch procesorach w ogólnym systemie obsługi zadań składających się z co najwyżej dwóch niepodzielnych operaji, o dowolnych czasach wykonywania,w celu minimalizacji Cmax.
2. Przydziel do procesora P1 zadania w koleności J12, J1, J21, a do procesora P2 - w kolejności J21, J2, J12.
- Spis treści -
[1] J. Błażewicz, W. Cellary, R. Słowiński, J. Węglarz: "Badania operacyjne dla informatyków". ; WNT, Warszawa 1983.
[2] M. M. Sysło, N. Deo, J. S. Kowalik: "Algorytmy optymalizacji dyskretnej." ; PWN , Warszawa 1993.
- Spis treści -