Next: Funkcja do_execve()
Up: Opis działania
Previous: Struktury danych
Funkcja execve() udostępniona jest w pliku nagłówkowym
/usr/include/unistd.h jednak właściwy jej opis znajduje się w specyficznym dla architektury
pliku /usr/include/asm/unistd.h. Wywołanie
execve() to po prostu makro _syscall3() z parametrem
execve. Makro to zapamiętuje w rejestrach procesora adresy
parametrów i wywołuje przerwanie. Po wejściu w tryb jądra wykonuje się
funkcja sys_execve() zdefiniowana w
arch/i386/kernel/process.c. Jej działanie ogranicza się do
zaalokowania pamięci jądra dla nazwy pliku, i wywołania funkcji
do_execve(). Jeśli ta się nie powiedzie to zwalnia
uprzednio zaalokowną pamięć jądra. Nazwa pliku jest przepisywana ze
względów efektywnościowych, pamięć jądra nie jest stronicowana, więc
nigdy nie zostanie zapisana na dysk.
Schemat funkcji sys_exec():
{
filename = getname(nazwa_pliku_do_wykonania); /* alokacja pamięci jądra */
errno = do_execve(filename,argumenty_linii_poleceń, środowisko);
putname(filename); /*zwolnienie pamięci jądra */
}
Michal Rutkowski
2001-12-19