Struktury danych i funkcje do obsługi procesów
Aleksander Zalewski
Listopad 2001
1 Struktura task_struct
Jest to struktura reprezentująca proces w systemie. Wymienię jedynie część pól.
- state - stan w jakim znajduje się proces
- TASK_RUNNING - proces czeka w kolejce procesów gotowych na wykonanie lub jest wykonywany (ma przydzielony procesor).
- TASK_INTERRUPTIBLE - proces czeka w kolejce na zdarzenie lub na zasoby
- TASK_UNINTERRUPTIBLE - proces nie jest budzony przez sygnał
- TASK_STOPPED - proces zatrzymany
- TASK_ZOMBIE - proces zakończył się ale na liście procesów wciąż znajduje się odpowiadająca mu struktura task_struct
- flags - flagi związane z procesem np. czy użyty był koprocesor
- need_resched - czy trzeba przeszeregować
- counter - bieżąca ilość czasu procesora pozostała procesowi do wykorzystania
- nice - dynamiczny priorytet z przedziału [-19,20] (im mniejszy tym proces ważniejszy)
- policy - tryb szeregowania procesy zwykłe mają: SCHED_OTHER, a czasu rzeczywistego mają: SCHED_FIFO lub SCHED_RR
- rt_priority - [0..99]
- pamięć przydzielona procesowi
- cpus_allowed - określa na których procesorach proces może się wykonywać
- thread - stan procesora dla tego procesu (kontekst)
- dowiązania do następnego i poprzedniego procesu w kolejce wszystkich procesów
- kod wyjścia
- pid procesu
- wskaźniki na struktury ojca, najmłodszego dziecka, rodzeństwa
- dowiązania do tablicy haszującej
- czas rozpoczęcia procesu
- czas w którym proces korzystał z procesora
- wskaźnik na strukturę użytkownika
- informacje o systemie plików i o otwartych plikach
2 Unia task_union
3 Tablica pidhash
Tablica haszująca procesy po ich pidach. Obecny rozmiar tablicy PIDHASH_SZ
wynosi 1024. (Jest to zapisane w bardzo ciekawy sposób (4096 >> 2))
Funkcja haszująca f(pid) = ((((pid) >> 8) ^ (pid)) & (PIDHASH_SZ - 1))
Funkcja znajdująca proces gdy znamy pid (find_task_by_pid) korzysta z tablicy pidhash.
4 Makro current
Zwraca wskaźnik na bieżącą strukturę task_struct na podstawie zawartości rejestru ESP.