next up previous
Next: Funkcja do_execve() Up: Opis działania Previous: Struktury danych

Funkcja sys_execve()

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