В сигнале man 7 описаны определенные ограничения относительно момента вступления в силу флага SA_RESTART.
read(2), readv(2), write( 2), writev(2) и ioctl(2) вызываются на «медленных» устройствах. «Медленным» устройством является устройство, в котором вызов ввода-вывода может блокироваться на неопределенное время, например терминал, канал или сокет. Если вызов ввода-вывода на медленном устройстве уже передал некоторые данные к тому моменту, когда он был прерван обработчиком сигнала, то вызов вернет статус успеха (обычно количество переданных байтов). Обратите внимание, что (локальный) диск не является медленным устройством согласно этому определению; Операции ввода-вывода на дисковых устройствах не прерываются сигналами.
Мои вопросы
Согласно руководству терминальное устройство, канал и сокет являются медленными устройствами, а диск — нет. А как насчет сетевого устройства (eth, wlan и т. д.), графического процессора или ускорителя ASIC? Мне сложно судить по свойству "неопределенное время".
В каком файле ядра или функции это делается (т.е. различает ли ядро медленный и немедленный режим) Как ядро перезапускает операцию, когда она прерывается сигналом и т. д.) под капотом? Возможно, я смогу зайти туда и узнать подробности.
В сигнале man 7 описаны определенные ограничения относительно момента вступления в силу флага SA_RESTART.
read(2), readv(2), write( 2), writev(2) и ioctl(2) вызываются на «медленных» устройствах. «Медленным» устройством является устройство, в котором вызов ввода-вывода может блокироваться на неопределенное время, например терминал, канал или сокет. Если вызов ввода-вывода на медленном устройстве уже передал некоторые данные к тому моменту, когда он был прерван обработчиком сигнала, то вызов вернет статус успеха (обычно количество переданных байтов). Обратите внимание, что (локальный) диск не является медленным устройством согласно этому определению; Операции ввода-вывода на дисковых устройствах не прерываются сигналами.
Мои вопросы [list] [*]Согласно руководству терминальное устройство, канал и сокет являются медленными устройствами, а диск — нет. А как насчет сетевого устройства (eth, wlan и т. д.), графического процессора или ускорителя ASIC? Мне сложно судить по свойству "неопределенное время". [*]В каком файле ядра или функции это делается (т.е. различает ли ядро медленный и немедленный режим) Как ядро перезапускает операцию, когда она прерывается сигналом и т. д.) под капотом? Возможно, я смогу зайти туда и узнать подробности. [/list] Спасибо.