История изменений
Исправление Deleted, (текущая версия) :
Отвечу от имени KO:
Подскажите, где найти реализацию poll syscall на уровне машинных команд?
В коде ядра Linux, но (WTF) зачем?
Можно ли получить такой листинг с помощью gcc -S на простейшем примере кода, где есть вызов poll()?
Там будет вызов ядерного poll (т.е. подготовка параметров и инструкция syscall/int), но не реализация. Вот пример исходного кода функции poll()
с вызовом poll-syscall.
Если нет, то какие файлы ядра посмотреть? Поглядел /usr/src/linux-source-4.9/include/linux/poll.h - там ничего, напоминающего ассемблерный код, нет.
Вот тут исходный код poll и других родственных syscall-ов. Получить его в виде инструкций CPU несложно (например посредством objdump).
И ещё. Как poll связан с x86-инструкцией WAIT/FWAIT?
Никак не связан, от слова совсем.
Реализован ли poll() через прерывания процессора?
Системный вызов ядра может выполнятся из user-mode библиотеки (glibc, ulibc, musl) как посредством syscall инструкции, так и через программное прерывание. Саму инструкцию syscall также можно рассматривать как вариант программного прерывания.
Программные прерывания внутри ядра примерно не используются, ибо unreasonable.
Механизм аппаратных прерываний является основой, на которой строится диспетчеризация процессов и вытесняющая многозадачность во всех релевантных ОС.
Исходная версия Deleted, :
Подскажите, где найти реализацию poll syscall на уровне машинных команд?
В коде ядра Linux, но (WTF) зачем?
Можно ли получить такой листинг с помощью gcc -S на простейшем примере кода, где есть вызов poll()?
Там будет вызов ядерного poll (т.е. подготовка параметров и инструкция syscall/int), но не реализация. Вот пример исходного кода функции poll()
с вызовом poll-syscall.
Если нет, то какие файлы ядра посмотреть? Поглядел /usr/src/linux-source-4.9/include/linux/poll.h - там ничего, напоминающего ассемблерный код, нет.
Вот тут исходный код poll и других родственных syscall-ов. Получить его в виде инструкций CPU несложно (например посредством objdump).
И ещё. Как poll связан с x86-инструкцией WAIT/FWAIT?
Никак не связан, от слова совсем.
Реализован ли poll() через прерывания процессора?
Системный вызов ядра может выполнятся из user-mode библиотеки (glibc, ulibc, musl) как посредством syscall инструкции, так и через программное прерывание. Саму инструкцию syscall также можно рассматривать как вариант программного прерывания.
Программные прерывания в ядре примерно не используются, ибо unreasonable.
Механизм аппаратных прерываний является основой, на которой строится диспетчеризация процессов и вытесняющая многозадачность во всех релевантных ОС.