W Linuksie przynajmniej mechanizm wywołań systemowych działa pod większością architektur, umieszczając niektóre specjalnie sformatowane dane (zwykle pewnego rodzaju strukturę c) w niektórych rejestrach lub predefiniowanych adresach pamięci.
Problemem jest jednak zmuszanie procesora do przełączenia się w przestrzeń jądra, aby mógł uruchomić uprzywilejowany kod jądra w celu obsługi wywołania. Odbywa się to przez wymuszenie jakiegoś błędu (błąd będący dzieleniem przez 0, niezdefiniowane przepełnienie lub segfault itp.), Co zmusza jądro do przejęcia wykonania w celu obsługi błędu.
Zwykle jądro obsługuje błędy, zabijając proces powodujący lub uruchamiając procedurę obsługi dostarczoną przez użytkownika. Jednak w przypadku wywołania syscall zamiast tego sprawdzi wstępnie zdefiniowane rejestry i lokalizacje pamięci, a jeśli zawierają żądanie syscall, uruchomi je przy użyciu danych dostarczonych przez proces użytkownika w strukturze w pamięci. Zwykle należy tego dokonać przy pomocy specjalnie spreparowanego zestawu. Aby ułatwić użytkownikowi korzystanie z syscall, biblioteka C systemu musi ją zawinąć jako funkcję. Interfejs niższego poziomu można znaleźć na stronie http://man7.org/linux/man-pages/man2/syscall.2.html, aby uzyskać informacje na temat działania wywołań syscall i sposobu, w jaki można dzwonić bez opakowania C.
Jest to uproszczone, nie jest tak we wszystkich architekturach (mips ma specjalną instrukcję syscall) i niekoniecznie działa tak samo na wszystkich systemach operacyjnych. Jeśli jednak masz jakieś uwagi lub pytania, zadaj je.
Poprawiono: Uwaga dotycząca twojego komentarza na temat rzeczy w / dev / jest to w rzeczywistości interfejs wyższego poziomu do jądra, a nie niższy. Urządzenia te używają (około) 4 wywołań systemowych pod spodem. Zapisywanie do nich jest takie samo jak zapisywanie syscall, odczytywanie odczytanego syscall, otwieranie / zamykanie ich jako równoważne otwieraniu i zamykaniu syscall i uruchamianie ioctl powoduje specjalne wywołanie systemowe ioctl, które samo w sobie jest interfejsem umożliwiającym dostęp do jednego z wielu ioctl systemu wywołania (specjalne, zwykle specyficzne dla urządzenia połączenia o zbyt wąskim użyciu, aby napisać dla nich całe połączenie systemowe).