Разница между INT 0x80 и SYSCALL


1

SYSCALL инструкция считается 64-разрядная версия INT 0x80, однако он по-прежнему можно использовать последний в 64-битном коде (хотя strace декодирует его неправильно из-за 64-битный ABI, я думаю), который обычно проходит через "legacy entry". Но есть кое-что, что я не совсем понимаю, почему инструкция SYSCALL быстрее?

1

Короткий ответ: syscall имеет меньше накладных расходов, чем int 0x80.

Для получения более подробной информации о том, почему это так, см принятый ответ на Intel x86 vs x64 system call, где был задан почти идентичный вопрос:

Я сказал, что системный вызов легче и быстрее, чем генерации программного прерывания , Почему он быстрее на x64, чем x86, и могу ли я сделать системный вызов на x64 с помощью int 80h?

Смотрите также:

  • Intel P6 vs P7 system call performance
    • это письмо нить обсуждает наблюдаемое замедление на некоторых процессорах Intel, вызванных накладными расходами, связанные с int 0x80
  • Sysenter Based System Call Mechanism in Linux 2.6

    Было обнаружено, что этот метод прерывания программного обеспечения [int 0x80] был намного медленнее на процессорах Pentium IV. Чтобы решить эту проблему, Linus внедрил альтернативный механизм системных вызовов, чтобы воспользоваться инструкциями SYSENTER/SYSEXIT, предоставляемыми всеми процессорами Pentium II +.

  • The Linux kernel, 4.6 Sysenter and the vsyscall page (2003)

    Было отмечено, что 2 ГГц Pentium 4 а был гораздо медленнее, чем 850 МГц Pentium III на определенных задач, и что эта медленность обусловлена ​​очень большой накладных расходов из традиционный int 0x80 прерывание на Pentium 4. У некоторых моделей семейства i386 есть более быстрые способы ввода ядра. На Pentium II есть инструкция sysenter. Также AMD имеет инструкцию syscall.