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