Wywołania systemowe Uniksa
Z Wikipedii, wolnej encyclopedia
W systemach uniksowych program jest całkowicie odizolowany od sprzętu, dlatego zawsze musi się odwoływać do odpowiednich funkcji jądra.
|
Zasugerowano, aby ten artykuł został przeniesiony do Wikibooks. Proponowaną stroną docelową jest Programowanie w systemie UNIX. |
Z punktu widzenia programu odwołania te są ukryte w bibliotece libc – program nie wie, czy dana funkcja dostarczana jest bezpośrednio przez jądro, czy też implementuje ją libc korzystając z innych mechanizmów jądra (np. w GNU/Linuksie fork zaimplementowany jest za pomocą clone).
Na x86 i innych systemach o podobnej architekturze libc (lub też czasem program bezpośrednio) komunikuje się z jądrem za pośrednictwem przerwań systemowych. W Linuksie funkcje systemowe są dostępne przez przerwanie 0x80, argumenty są przekazywane w rejestrach w następującej kolejności: eax, ebx, ecx, edx, edi, esi, ebp. Numer funkcji systemowej jest przekazywany w eax, natomiast pozostałe argumenty zależą od rodzaju funkcji (nie wszystkie muszą być wykorzystane). Status operacji zwracany jest w rejestrze eax. Gdy operacja wykona się bezbłędnie, jego wartość jest równa 0, w przeciwnym razie jest to (ujemna) stała z pliku asm/errno.h. Pozostałe rejestry nie są zmieniane.
W przypadku innych procesorów wywołania systemowe są wykonywane przez specjalizowane instrukcje procesora – np. Pentium 4 posiada instrukcję sysenter (ang. system enter).