Zadanie polega na zaimplementowaniu algorytmów szeregowania procesów z wykorzystaniem różnych strategii szeregowania zarówno w środowisku jedno- jak i wieloprocesorowym.

Implementacja i badanie algorytmów szeregowania procesów.

Dany jest zbiór N (od 1 do 100) procesów oraz zbiór M (od 1 do 10) procesorów. Czas nadejścia oraz czas wykonania procesu i będzie oznaczany odpowiednio symbolem ri oraz pi.

Format danych wejściowych
Pierwszy wiersz zawiera trzy liczby naturalne oznaczające parametry: N, M, i C, określające odpowiednio liczbę procesów, liczbę procesorów oraz kwant czasu, po którym następuje wywłaszczenie procesora. Parametr C jest wykorzystywany wyłącznie w strategii szeregowania RR. Jednocześnie, dla strategii RR, parametr M jest ignorowany - należy założyć tylko 1 procesor. Drugi i trzeci wiersz zawiera N liczb naturalnych, gdzie i-ta liczba określa odpowiednio czas nadejścia ri (drugi wiersz) oraz czas wykonania pi (trzeci wiersz) procesu i.

Wynik
Historia symulacji obrazujaca co dzieje sie w kolejnym chwilach czasu. Zapis dla przykladowej chwili czasu t:

czas: 10
	zad: 2 -> gotowy
	zad: 3 -> gotowy
	proc: 0, zad: 0 -> zakonczony
	proc: 0, zad: 2 -> aktywny
	proc: 1, zad: 1 -> wstrzymany
	proc: 1, zad: 3 -> aktywny
Opisuje sytuację, gdzie w chwili czasu 10 pojawiły się 2 nowe zadania (2 i 3), a na procesorze 0-wym zakończyło się zadanie 0. Następnie, zgodnie z zaimplementowaną strategia, proces nr 2 zajął wolny procesor 0, natomiast zadanie nr 3 umieszczono na procesorze 1, wywłaszczając zadanie nr 1.

Zadanie:
1. Zaimplementuj algorytm, który ze standardowego wejścia czyta dane, a wyniki symulacji zapisuje na standardowe wyjscie. Numer strategii szeregownia program pobiera jako argument wywołania (0 - FCFS, 1 - SJF, 2 - LJF, 3 - SRTF, 4 - RR).

Przykład uruchomienia:
./sched 1 < data.in > data_1.out

2. Porównaj harmonogramy wygenerowane przy użyciu każdej ze strategii. Która ze strategii wydaje Ci się najlepsza?