Внимательно прочитайте справочные страницы syscalls (2) , vdso (7) и вики-страницы по системным вызовам и VDSO, Читайте также операционная система wikipage и Операционные системы: три простых компонента (свободно загружается).
Системные вызовы являются фундаментальными, они являются только способом, которым пользовательское пространство приложение может взаимодействовать с операционной системой kernel и использовать предоставляемые им сервисы. Таким образом, каждая программа использует некоторые системные вызовы (если она не завершается сбоем и не завершается некоторым сигналом (7) ). Системные вызовы требуют перехода от пользователя к ядру (например, через SYSCALL
или SYSENTER
машина инструкция на x86 ), что несколько «дорого» (например, может занять микросекунду).
VDSO - это только умная оптимизация (чтобы избежать затрат на подлинный системный вызов, для очень немногих функций, таких как clock_gettime (2) , которые также существуют как подлинные системные вызовы), немного похоже на некоторые общие библиотека волшебным образом предоставлена ядром без какого-либо реального файла. Некоторые программы (например, статически связанные или не использующие libc
, например BONES или, вероятно, busybox ) не используют его.
Вы можете избежать VDSO (или не использовать его), и более ранние ядра не имели его. Но вы не можете избежать системных вызовов, и программы обычно делают их много.
Играйте также с strace (1) , чтобы понять (многие) системные вызовы, выполняемые приложением или запущенным процессом.