Zadanie nr 9 z procesów - zmiana szeregowania



Wstęp

Kiedy Linux nie jest obciążony, czyli niewiele zadań jest gotowych do wykonania, bo np. czekają na naciśnięcie klawisza lub ogólnie komunikat od urządzenia wejścia/wyjścia, wpisywane komendy wykonują się szybko i sprawnie, a wpisywane z klawiatury znaki natychmiast pojawiają się na ekranie.

Czasem jednak zdarza się, że system musi wykonywać wiele zadań jednocześnie - mówimy wtedy, że jest bardzo obciążony. W takiej sytuacji system rzadko oddaje czas programowi, którym jesteśmy najbardziej zainteresowani (np. konsoli), za to na dłużej. Nie zawsze nam to odpowiada - wolelibyśmy, aby nasz proces dostawał procesor częściej, nawet jeśli na krótszy czas. Zapewnia to nieco większą responsywność systemu - wpisywane znaki pojawiają się szybciej pojedynczo na ekranie, a nie co jakiś czas porcjami po kilka znaków.

Konsola jest tu tylko przykładem - równie dobrze może chodzić o programik wypisujący coś dokładnie raz na sekundę, ale nie częściej. Nietrudno zgadnąć, że przy dużym obciążeniu systemu standardowy algorytm szeregowania nie spełni naszych oczekiwań - programik będzie rzadziej coś wypisywał, choć gdyby dostawał procesor raz na sekundę, ale na krótko, działałby zgodnie z naszymi intencjami.

Opis zadania

Dokonać takich zmian w jądrze Linuxa, aby w przypadku dużego obciążenia odstęp czasowy między kolejnymi przydziałami procesora każdemu z procesów przy dużym (względne okreœlenie) obciążeniu systemu był znacząco mniejszy niż w przypadku standardowego algorytmu szeregowania, przy którym taki odstęp rośnie praktycznie liniowo wraz z liczbą aktywnych procesów. Dobrze byłoby, aby taki odstęp nie przekraczał pewnej ustalonej granicy, np. 0,5s.

Tak ulepszona procedura szeregująca powinna odznaczać się dość szybką reakcją, ale nie absolutnie natychmiastową, bo na czas krótszy niż sekunda raczej nie warto zmieniać zasad szeregowania.

Zauważmy, że takie skrócenie cyklu ma tylko sens przy dużym obciążeniu systemu - czynności związane ze zmianą wykonywanych procesów takie jak zmiana kontekstu, zabierają cenny czas. Wobec tego najlepiej byłoby, żeby przy bardzo niskim obciążeniu systemu - 2-3 procesy aktywne - cykl ten nawet nieco wydłużyć.

Wskazówki

Zadanie można rozwiązać zaglądając tylko do pliku kernel/sched.c. Warto zwłaszcza zwrócić uwagę na główną procedurę szeregującą procesy i na to, od czego zależy w niej długość "cyklu", w którym procesor jest przydzielany "zwykłym" procesom. Pomocne będą też strony projektów Linux i LabLinux dotyczące szeregowania i rzeczy związanych z tym plikiem.

Mateusz Lipczyński