Procesy

Algorytm Exec

Autor: Bartłomiej Kijanka


1.0 Interfejs programisty

Funkcje z rodziny exec* zmieniają kontekst danego procesu na podstawie programu wykonywalnego umieszczonego w pliku dyskowym. Kod, jakim jest program na dysku, staje się działającym w pamięci operacyjnej procesem. Do rodziny exec należą funkcje:

Różniące się składniowo, jednak wszystkie wywołują ostatecznie funkcję sys_execve z pliku process.c, która wywołuje do_execve z pliku exec.c.


2.0 Struktura linux_binprm

Przed usunięciem z pamięci kodu procesu wykonującego do_execve oraz jego kontekst, trzeba zapamiętać argumenty i zmienne środowiskowe. W tym celu korzystamy ze struktury linux_binprm:




3.0 Działanie

Wewnętrzna funkcja

zarządza całym algorytmem exec; sama funkcja jest bardzo krótka, jednak wywołuje dużą ilość funkcji pomocniczych.

Algorytm działania do_execve():


4.0 Formaty plików wykonywalnych

W wersji jądra 2.4 standardowo rozpoznawane są formaty: script, a.out, ELF, java, em86.

Przykładowo, dla formatu ELF ładowaniem programu zajmuje się funkcja:.

Jej algorytm (w dużym skrócie) to: