Do tematu: Zarządzanie procesami
Do tematu: Struktury danych

task_struct

Typ Nazwa Opis
Pola podstawowe
volatile long state stan, w którym znajduje się proces 
-1 - zombie, 
0 - śpiący bądź gotowy,
>0 - zatrzymany
long counter liczba tyknięć zegara jaka pozostała z przydzielonego kwantu czasu do momentu, w którym system spróbuje wywłaszczyć proces
long priority priorytet obliczany na podstawie wartości nice procesu. W rzeczywistości jest to długość kwantu czasu przyjmująca wartości od 0 do 2* DEF_PRIORITY
unsigned long signal sygnały które nadeszły (dla każdego zaznaczany jest tylko fakt nadejścia, a nie np. liczba sygnałów o danym numerze, które się pojawiły)
unsigned long blocked czasowa maska sygnałów (nadejście zamaskowanego sygnału jest zaznaczane, ale jego obsługa odkładana jest do momentu zdjęcia maski)
unsigned long flags różne flagi -> kliknij tu aby je zobaczyć
int errno numer błędu funkcji
long [8] debugreg rejestry sprzętowe
struct exec_domain* exec_domain struktura zwierająca informacje potrzebne do wykonywania plików binarnych pochodzących z różnych odmian uniksa
Inne pola ważne przy szeregowanu procesów
struct linux_binfmt* binfmt opisuje format pliku wykonywalnego
struct task_struct* next_task następny proces na liście wszystkich procesów
struct task_struct* prev_task poprzedni proces na liście wszystkich procesów
struct task_struct* next_run następny proces w kolejce procesów gotowych do wykonania
struct task_struct* prev_run poprzedni w kolejce gotowych do wykonania
unsigned long saved_kernel_stack obecnie nie używane
unsigned long kernel_stack_page stos jądra
int exit_code kod zakończenia procesu
int exit_signal numer sygnału wysyłanego do ojca przy wywoływaniu exit (standardowo SIGCHLD); do procesu init zawsze wysyłany jest SIGCHLD, do pozostałych procesów może być wysłany inny sygnał, ale taka zmiana wymaga rekompilacji jądra i na dodatek zawsze będzie to taki sam sygnał dla wszystkich procesów w danym systemie
unsigned long personality stała określająca, z której odmiany uniksa pochodzi dany plik wykonywalny
int:1 dumpable określa, czy można wykonać zrzut pamięci danego procesu (core dump) oraz zapewnia, że nie powstaną zrzuty rekurencyjne
int:1 did_exec czy została wykonana funkcja exec dla tego procesu
int pid numer procesu (PID)
int pgrp numer grupy, do której należy proces
int tty_old_pgrp (prawdopodobnie) jeśli proces jest liderem grupy i zostanie zerwana łączność z terminalem sterującym tej grupy, to na tym polu zapamiętywana jest wartość pgrp tego procesu
int session identyfikator sesji (grupy terminalowej ?)
int leader "true" jeśli dany proces jest liderem sesji
int [NGROUPS] groups zbiór identyfikatorów grup, do których należy właściciel danego procesu
Dowiązania do innych procesów
struct task_struct* p_opptr wskaźnik do oryginalnego ojca
struct task_struct* p_pptr wskaźnik do ojca
struct task_struct* p_cptr wskaźnik do najmłodszego dziecka
struct task_struct* p_ysptr wskaźnik do młodszego brata
struct task_struct* p_osptr wskaźnik do starszego brata
struct wait_queue* wait_chldexit kolejka wykorzystywana do oczekiwania na śmierć dzieci
unsigned short uid rzeczywisty identyfikator użytkownika
unsigned short euid efektywny identyfikator użytkownika
unsigned short suid "ustawiony" identyfikator użytkownika (identyfikator właściciela programu, który jest wykonywany jako dany proces)
unsigned short fsuid identyfikator użytkownika wykorzystywany przy sprawdzaniu praw związanych z systemem plików
unsigned short gid rzeczywisty identyfikator grupy użytkownika
unsigned short egid efektywny identyfikator grupy użytkownika
unsigned short sgid "ustawiony" identyfikator grupy użytkownika (patrz opis do suid)
unsigned short fsgid podobnie jak fsuid, tylko że dotyczy grupy
unsigned long timeout czas, w którym dany proces ma zostać obudzony (wartość ta ustawiana jest podczas usypiania procesu, a następnie wywoływana jest funkcja szeregująca)
unsigned long policy metoda szeregowania procesu
SCHED_RR
SCHED_FIFO
SCHED_OTHER
unsigned long rt_priority statyczny priorytet procesu określający, w której kolejce koncepcyjnej on się znajduje (istotne tylko dla SCHED_FIFO i SCHED_RR); wartość: 1-99
unsigned long it_real_value aktualna wartość zegara typu ITIMER_REAL (odlicza czas rzeczywisty)
unsigned long it_prof_value aktualna wartość zegara typu ITIMER_PROF (odlicza czas zarówno wykonania samego procesu, jak i czas, w którym system pracuje "w imieniu" danego procesu)
unsigned long it_virt_value aktualna wartość zegara typu ITIMER_VIRTUAL (odlicza czas wirtualny, czyli czas właściwego wykonywania się procesu)
unsigned long it_real_incr określa, na jaką wartość ma być ustawiany zegar ITIMER_REAL (czyli inaczej mówiąc - co jaki czas proces będzie dostawał sygnał SIGALRM)
unsigned long it_prof_incr określa, na jaką wartość ma być ustawiany zegar ITIMER_PROF (czyli inaczej mówiąc - co jaki czas proces będzie dostawał sygnał SIGPROF)
unsigned long int_virt_incr określa, na jaką wartość ma być ustawiany zegar ITIMER_VIRTUAL (czyli inaczej mówiąc - co jaki czas proces będzie dostawał sygnał SIGVTALRM)
struct timer_list real_timer zegar czasu rzeczywistego, który ma odmierzać czas ustawiony w polu timeout
long utime czas spędzony przez proces w trybie użytkownika
long stime czas systemowy wykorzystany przez proces
long cutime suma czasów utime danego procesu i czasów utime jego procesów potomnych
long cstime suma czasów stime danego procesu i czasów stime jego procesów potomnych
long start_time czas rozpoczęcia procesu (wartość czasu systemowego - jiffies)

Pamięć

unsigned long min_flt zmienna określająca ile razy w wyniku błędu braku lub ochrony strony proces potrzebował przydzielenia strony pamięci fizycznej (takiego przydzielenia, które nie wymagało dostępu do urządzenia wymiany)
unsigned long maj_flt informuje, ile razy podczas przydzielania strony pamięci fizycznej było konieczne odwołanie do urządzenia wymiany
unsigned long nswap licznik stron poddanych wymianie od początku istnienia danego procesu
unsigned long cmin_flt suma wystąpień małych błędów strony u wszystkich potomków danego procesu
unsigned long cmaj_flt j.w. tyle, że tu zliczane są duże błędy strony
unsigned long cnswap j.w. tyle, że tu zliczana jest liczba stron poddanych procesowi wymiany
int:1 swappable określa, czy proces może w danym momencie być wyrzucony z pamięci na dysk (np. proces w trakcie tworzenia nie może)
unsigned long swap_address wirtualny adres należący do przestrzeni adresowej procesu, od którego rozpocznie się przeglądanie w celu wyznaczenia kolejnej strony do przeniesienia z pamięci na urządzenie wymiany
unsigned long old_maj_flt stara wartosc maj_flt
unsigned long dec_flt licznik błędów strony w ostatnim czasie
unsigned long swap_cnt liczba stron do przechowania na dysku następnym razem
struct mm_struct * mm opisuje przestrzeń adresową procesu

Limity

struct rlimit [RLIM_NLIMITS] rlim tablica zwierająca struktury określające różnego rodzaju limity zasobów dla danego procesu; każda taka struktur(k)a zawiera dwa pola: rlim_cur i rlim_max, w których umieszczone są odpowiednio aktualny limit dla danego procesu i ogólny maksymalny limit systemowy; ponieważ w samej strukturze rlimit nie ma informacji, którego zasobu dotyczą podane limity, informacja o tym znajduje się w tablicy rlim - każde jej pole przypisane jest konkretnemu zasobowi; do pól tych odwołuje się typowo przez predefinowane stałe:
#define RLIMIT_CPU      0	/* czas użycia procesora */
#define RLIMIT_FSIZE    1	/* maksymalny rozmiar pliku */
#define RLIMIT_DATA     2	/* maksymalny rozmiar danych */
#define RLIMIT_STACK    3	/* maksymalny rozmiar stosu *
#define RLIMIT_CORE     4	/* maksymalny rozmiar pliku core */
#define RLIMIT_RSS      5	/* maksymalny rozmiar zbioru rezydentnego (?) */
#define RLIMIT_NPROC    6	/* maksymalna liczba procesów */
#define RLIMIT_NOFILE   7	/* maksymalna liczba otwartych plików */
#define RLIMIT_MEMLOCK  8	/* maksymalna wielkość przestrzeni adresowej 
						"zablokowanej w pamięci" */ 
#define RLIMIT_AS       9	/* limit przestrzeni adresowej */
unsigned short used_math obecnie nieużywane; we wcześniejszych wersjach jądra pole to informowało, czy dany proces korzystał z koprocesora
char [16] comm nazwa pliku wykonywalnego związanego z danym procesem

System plików

int link_count liczba dowiązań, po których przeszedł proces (jest nałożone górne ograniczenie na tę liczbę - 6 - prawdopodobnie po to, by zabezpieczyć przed zapętleniem w chodzeniu po dowiązaniach)
struct tty_struct * tty informacje dotyczące terminala sterującego (NULL - jesli brak)
struct fs_struct * fs maska praw dostępu do nowo tworzonych plików oraz wskaźnik do i-węzła naszego katalogu oraz katalogu bieżącego + licznik odwołań
struct files_struct * files inforamacja o plikach używanych przez pojedynczy proces (licznik odwołań, zbiór deskryptorów plików, tablica otwartych plików)

IPC

struct sem_undo * semundo wskaźnik do struktury zawierającej informacje potrzebne do anulowania operacji semaforowych (wykonywanych z flagą SEM_UNDO)
struct sem_queue * semsleeping kolejka procesów śpiących w oczekiwaniu na dowolny semafor z danego zestawu (dla każdego zestawu semaforów w systemie istnieje jedna taka kolejka)

Inne

struct desc_struct * ldt używane przez niskopoziomowe mechanizmy szeregowania
struct thread_struct * tss używane przez niskopoziomowe mechanizmy szeregowania
struct signal_struct * sig tablica funkcji obsługujących sygnały

Autor: Michał Pakuła