ZADANIE 16 (11)






Laborutorium linux - zadanie_16




Do tematu: Zarządzanie procesami


Zadanie 16 - Zarządzanie procesami



Zadanie:

Zadanie polega na zaprogramowaniu funkcji systemowych i programu umożliwiającego
śledzenie algorytmu szeregowania procesów w jądrze systemu Linux.

W systemie Linux za szeregowanie procesów jest odpowiedzialna funkcja
schedule(). Algorytm tam wykonywany
nie jest
dokładnym odwzorowaniem algorytmu opisanego w książce M.J. Bacha "Budowa systemu
operacyjnego UNIX", dlatego też proponuję wykonanie pracy umożliwiającej
prześledzenie następujących rzeczy:


jakie procesy uzyskują procesor (jakie mają wartości pól count i priority)
w jakich sytuacjach procesy są wywłaszczane
jak często następuje przełączanie kontekstu
jak wygląda szeregowanie procesów czasu rzeczywistego


Napisanie tego zadania umożliwi porównanie działania standardowego algorytmu
szeregowania procesów z algorytmem zaproponowanym w zadaniu:
zadanie_02.html

Szczegóły implementacyjne:

Zadanie składa się z dwóch części: wykonania funkcji zbierającej informacje o
szeregowanych procesach oraz z napisania programu umożliwiającego prześledzenie
przebiegu algorytmu szeregowania. Ze względu na ogromny narzut związany z śledzeniem
szeregowania procesów na bieżąco, proponuję aby proces śledzenia przebiegał
dwuetapowo:

Etap 1: śledzenie szeregowania procesów i zapisanie wyników do
plików systemowych

Etap 2: analiza wyników śledzenia i wykonanie statystyk

Etap 1:

Funkcja służąca do śledzenia powinna być następującej postaci:


inline void watch(task_struct *prev,task_struct *next);

parametry:


task_struct * prev - dowiązanie do
procesu, który był wykonywany w procesorze przed uruchomieniem funkcji schedule()
task_struct * next - dowiązanie do
procesu, który pozostanie w procesorze po zakończeniu funkcji schedule()
w szczególności jeśli prev = next to w wyniku działania funkcji schedule() proces
utrzymał swoje prawo do procesora


Funkcja watch() powinna na podstawie wiadomości o procesie uzyskującym i procesie
tracącym procesor, wykonać zestawienie następujących informacji dla każdego procesu:

counter- czas pozostały procesowi do podjęcia próby wywłaszczenia

priority- priorytet procesu

policy- metoda szeregowania procesu

state- stan w jakim znajduje się proces (ważne w przypadku procesu
tracącego procesor)

A także informacji jiffies (czasu zegara systemowego)

Wszystkie informacje można umieszczać w jednym z plików systemowych (message lub
syslog) za pomocą funkcji printk(). Powinny one być łatwe do rozpoznania przez program
wykonujący analizę i dobrze spakowane ze względu na dużą częstość zapisów
szeregowanych procesach.

Można także rozważyć utworzenie specjalnego bufora na przechowywane informacje o
stałej 1-2 Mb wielkości i pozostawienie tam informacji.

Funkcja watch() powinna zacząć śledzenie w momencie, w którym trafi do niej proces
wywołany z pliku o nazwie watch_start i zakończyć gdy się pojawi proces watch_stop.
Rozpoznanie procesu powinno następować na podstawie badania parametru comm struktury
task_struct.

Funkcja watch() powinna być umieszczona w pliku watch.h taka implementacja, umożliwi
łatwe jej zastosowanie w różnych algorytmach szeregowania procesów.

Funkcja watch() może być zastosowana w standardowym algorytmie szeregowania procesów
jądra 2.0.32 tuż przed zestawem funkcji dokonujących przełączenia kontekstów.
Będzie także możliwe umieszczenie jej na końcu funkcji szeregowania, realizowanej w
ramach zadania: zadanie_02.

Etap 2:

Wykonanie programu dokonującego analizy wyników szeregowania procesów.

Program taki powinien udostępniać następujące wyniki:


kolejność szeregowanych procesów wraz z wartościami count, priority, status
procesów wchodzących i wychodzących z procesora, a także z czasem, jaki proces miał
przydzielony procesor oraz powodem stracenia dostępu do procesora.
ogólny czas, jaki każdy proces spędził w procesorze, jak często tracił procesor i
jakie były tego powody
jak często był zmieniany kontekst


Rozwiązanie zadania powinno zawierać testy, analizę działania szeregowania
procesów w jądrze linux. Warto zwrócić uwagę na przebieg szeregowania równorzędnych
procesów, procesów uprzywilejowanych przez nadanie innego priorytetu oraz analizę
procesów zasypiających w oczekiwaniu na przerwanie i takich, które wykonują działanie
ciągłe.

Autor:

Michał Tabor





Wyszukiwarka

Podobne podstrony:
ZADANIE (11)
zadaniegz 11
ZADANIE (11)
Analiza Zadania 11
ZADANIE (11)
ZADANIE (11)
ZADANIE (11)
ZADANIE (11)
ZADANIE (11)
ZADANIE (11)
ZADANIE (11)
ZADANIE (11)
zadanie 11
ZADANIE (11)
ZADANIE (11)
ZADANIE (11)
ZADANIE (11)

więcej podobnych podstron