int X в ассамблее переводит на номер системного вызова n.
Екс. Syscall может быть присвоен номер 4.
При запуске системы ОС строит таблицу указателей, называемую таблицей дескриптора прерываний (IDT), которая имеет список адресов для системных вызовов с привилегией, необходимой для их выполнения.
Текущий уровень привилегий (CPL) сохраняется в одном из бит регистра CS (технически 2 бит на x86).
Это шаги, за которыми следует инструкция int:
• Извлечь n-й дескриптор из IDT, где n - это аргумент int.
• Проверьте, что CPL в% cs равен < = DPL, где DPL - это уровень привилегий в дескрипторе.
• Если нет, у пользователя не было достаточных привилегий для его выполнения, и в результате будет выполнена инструкция int 13 (общая ошибка защиты) (у пользователя не было достаточно привилегий)
• Если да, то код пользователя имеет достаточно привилегий для выполнения этого системного вызова, сохраняется текущий контекст выполнения (регистры и т. д.), так как теперь мы переключаемся в режим ядра.
Информация включает регистры, флаги, поскольку, когда системный вызов финиширован, мы хотим продолжить выполнение с того места, где мы ушли. • Параметры системного вызова сохраняются в стеке ядра, поскольку системный вызов выполняется в режиме ядра.
VSYSCALL (FAST SYSTEM CALL)
Каждый системный вызов времени выполняется пользователем, Os сохраняет текущее состояние машины (т.е. регистр, указатель стека и т.д.) и переключается в режим ядра для выполнения , Для некоторого системного вызова нет необходимости сохранять весь регистр. Ex gettime дневного системного вызова считывает текущее время и возвращается системный вызов. Таким образом, некоторые системные вызовы реализуются через так называемые vsyscalls. Здесь, когда выполняется системный вызов, он выполняется в пользовательском пространстве, не переходя в ядро. Таким образом, время сохраняется.
Смотрите здесь подробную информацию о vsyscall http://www.trilithium.com/johan/2005/08/linux-gate/
и здесь Anyone can understand how gettimeofday works?
Что такое код ядра, исполняемая бинарная, сборная или динамически связанная библиотека? – MainID
Ядро - это запущенное ядро вашей системы, то есть изображение ОС в памяти. – tvanfosson