LINUX.ORG.RU

poll и epoll(...) и x86 WAIT/FWAIT

 , ,


0

1

Подскажите, где найти реализацию poll syscall на уровне машинных команд?
Можно ли получить такой листинг с помощью gcc -S на простейшем примере кода, где есть вызов poll()?
Если нет, то какие файлы ядра посмотреть? Поглядел /usr/src/linux-source-4.9/include/linux/poll.h - там ничего, напоминающего ассемблерный код, нет.

И ещё. Как poll связан с x86-инструкцией WAIT/FWAIT? Реализован ли poll() через прерывания процессора?

Или происходит сохранение контекста процесса (нити), переключение выполнения на другой участок кода?
В процессоре 80286 или 80386 были для этого инструкции ENTER / LEAVE.

https://www.opennet.ru/man.shtml?category=2&topic=poll



Последнее исправление: BruteForceSSL (всего исправлений: 1)
Ответ на: комментарий от Deleted

Что-то почитал я про XSAVE*/XRSTOR* - они ведь только всякую экзотику сохраняют, типа SSE/AVX/MPX…

А нормальные регистры (*ax, *bx, *cx, *dx, *di, *di, и т.д.), насколько я знаю, сохраняются чисто программно операциями MOV. Если я не прав и отстал от жизни - поправьте.

bigbit ★★★★★
()
Ответ на: комментарий от bigbit

Что-то почитал я про XSAVE*/XRSTOR* - они ведь только всякую экзотику сохраняют, типа SSE/AVX/MPX…

А нормальные регистры (*ax, *bx, *cx, *dx, *di, *di, и т.д.), насколько я знаю, сохраняются чисто программно операциями MOV. Если я не прав и отстал от жизни - поправьте.

Все верно.

Регистры общего пользования нерационально сохранять/восстанавливать одной командой (это показал опыт использования pusha / pushad / popa / popad). Часть регистров сохраняется по стеку вызовов, часть используется особенным образом. Оставшиеся проще обслужить обычными mov-ами, нежели городить отдельнсую CISC-инструкцию (которая все равно будет выполняться через микрокод).

В свою очередь XSAVE*/XRSTOR* тоже работают через микрокод, но избавляют от нобходимости знать все features (включая размер данных), проверки этих features через флажки cpuid, и кучи соответствующих переходов.

Deleted
()
Ответ на: комментарий от bigbit

Любой x86-64 (те по сути вообще любой реально используемый проц) гарантирует минимум sse2. Экзотику, блин.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.