Но с миллионами пакетов мне как-то не очевидно: нормальный драйвер на одно прерывание читает все данные, которые есть в буфере железа, или пишет все, которые можно запихать в буфер за один раз. Совсем нормальный вообще делает железу в памяти scatter-gather list и железо само его обходит и делает ввод-вывод чисто аппаратно. В любом случае никто не делает прервание на байт, пакет или сектор — работают пачками.
Вопрос соотношения времени обмена данными и простоя. И — цены свободного ядра процессора. Плюс несколько повышается реактивность. Прерывание тоже требует времени.
Был такой процессор — propeller, если не ошибаюсь — там восемь синхронных ядер и нет прерываний. Весь обмен — поллингом. Принципиально.
Кроме того, в жёстком риалтайме драйвера поллинговые — считается, что иначе невозможно гарантировать время реакции. (Хотя у меня лично есть смутные сомнения на этот счёт.)
проблема только с именами, и то — частичная. рантайм вернёт ошибку. Всё остальное есть у ioctl в полный рост. никто и никак не проверит бинарный номер и формат структуры. а так же выравнивание полей.
«формирование снапшотов и вызовы в ядро могут пересекаться по времени.» — это вызов в ядро. Если он будет блокировать снапшоты, то они не будут происходить месяц.
Все объекты прикладного уровня, имеющие отношения с ядром при рестарте получают уведомление о случившемся, соответственно — могут принять его во внимание, чтобы отличить эти два случая. См. restart_list выше.
Решение требует задачи. Нет смысла выбирать ЯП абстрактно.
Однако, как 20 лет назад был универсальный ответ «не знаешь, на чём писать — пиши на Си (++)», так сегодня дефолтным ЯП является Ява, если ты юниксоид и С#, если ты хочешь жить и умереть в виндах. Инфраструктура поддержки этих двух ЯП несравнима ни с чем (включая си).
Если тебе нужно скриптик или страничку — похрен. Хоть на коболе.
Был такой процессор — propeller, если не ошибаюсь — там восемь синхронных ядер и нет прерываний. Весь обмен — поллингом. Принципиально.
Кроме того, в жёстком риалтайме драйвера поллинговые — считается, что иначе невозможно гарантировать время реакции. (Хотя у меня лично есть смутные сомнения на этот счёт.)
В целом — согласен, есть в жизни место поллингу.
(Кстати, интересное пересечение — нулевая версия ядра фантома использовала в качестве базы oskit, на котором и fluke базировался.)
:)
Однако, как 20 лет назад был универсальный ответ «не знаешь, на чём писать — пиши на Си (++)», так сегодня дефолтным ЯП является Ява, если ты юниксоид и С#, если ты хочешь жить и умереть в виндах. Инфраструктура поддержки этих двух ЯП несравнима ни с чем (включая си).
Если тебе нужно скриптик или страничку — похрен. Хоть на коболе.
давайте тратить байты на обсуждение сути, а не фантика.
с другой стороны, возможно, правильная схема именно fs:
/dev/tty0
/dev/tty0.speed
/dev/tty0.stop_bits