Nastoletni
Programiści

Logo Nastoletnich Programistów

Linux – procesy. Stany procesów w praktyce.

Do zrozumienia wpisu wymagana jest umiejętność napisania modułu jądra „HelloWorld” plus przynajmniej podstawowa wiedza na temat posługiwania się terminalem w Linuxie.

Proces jest programem w trakcie wykonania. Każdy proces posiada swój identyfikator (nr pid – process identifier).

W Linuksie procesy są  opisane przez deskryptor procesu – strukturę task_struct (implementacja). W strukturze tej są zawarte wszystkie najważniejsze informacje o procesie, m. in.  stan procesu, wskaźnik stosu, flagi, priorytety, pid, nr procesora, na którym proces jest wykonywany, listy procesów potomnych i siostrzanych itp.

Wykonywany proces może znajdować się w następujących stanach:

  • unrunnable (wartość -1),
  • runnable (wartość 0),
  • stopped (wartość  >0).

Wartości podane w nawiasach (-1, 0, >0) są przypisywane do pola state w strukturze task_struct. Aby się dowiedzieć, w jaki sposób funkcjonują, najlepiej uzyskać dostęp do deskryptora pewnego procesu. Tutaj tym procesem będzie moduł jądra.

Teraz można z procesu dostać się do jego struktury task_struct. Aby móc korzystać z typu task_struct, należy dodać plik nagłówkowy <linux/sched.h>. Wtedy można zacząć działać:

Przy użyciu plecenia dmesg: ~# dmesg |tail(w celu wyczyszczenia logów można użyć ~# dmesg -C).

Można zobaczyć, w jakim stanie znajduje się proces w momencie wypisywania logów, np:

Teraz mały eksperyment z zatrzymywaniem procesu:

W powyższym przykładzie widać, że proces jest zatrzymywany wraz z przypisaniem mu wartości state 1. Proces jest wznawiany wraz z wywołaniem funkcji usuwającej moduł – komunikat wyświetlany po zmianie stanu procesu (z funkcji inicjującej) jest wyświetlany dopiero przy uruchomieniu rmmod process.

To będzie na tyle, jeśli chodzi o artykuł. Zachęcam do dalszego, samodzielnego eksperymentowania ze strukturą task_struct i wszystkim innym.

Wiktoria

Ten autor jeszcze nie podzielił się czymś o sobie.

Zobacz wszystkie posty tego autora →

Komentarze