Очереди событий в ядре Redox стали вложенными

06.11.2025

Обработчик события в ядре Redox теперь может зарегистрировать новое событие в той же очереди, из которой его вызвали. Это снимает ограничение, на которое упирался асинхронный код.

Что такое очередь событий

Ядро не крутит цикл опроса. Вместо этого у него есть очередь событий: когда происходит что-то требующее внимания — пришёл байт в сокет, истёк таймер, завершилась операция — ядро создаёт событие и кладёт его в очередь. Потоки, ожидающие событий, просыпаются.

Очередь принадлежит конкретному потоку. Внутри неё уже могут быть вложенные очереди — событие может относиться к другой очереди, и тогда обработка идёт рекурсивно.

Какое ограничение снимается

Раньше обработчик не мог зарегистрировать событие в той же очереди, из которой его вызвали. Это значит, что определённый класс асинхронных операций был невозможен: операция, которая должна сообщить о своей готовности из обработчика, вынуждена была искать другой путь.

В программировании на Rust это ограничение особенно заметно. Асинхронный код, построенный на «вызови меня, когда будет готово», естественным образом регистрирует продолжение из обработчика. На Redox такой код упирался в ограничение ядра.

Попутно исправленные гонки

В том же месяце исправлена гонка между очередью событий и каналами, а ложные пробуждения стали обрабатываться как сигнал, а не как истечение таймаута. Обе правки касаются того же механизма.

Ложные пробуждения — обычное дело в системах с ожиданием: поток может проснуться, хотя условие ещё не выполнено, и должен проверить его заново. Если система считает такое пробуждение истечением таймаута, поведение становится неверным.

Практический смысл

По сути, это снятие искусственного ограничения на использование привычных приёмов асинхронного программирования. Крейты вроде tokio и им подобные строятся именно на регистрации продолжений из обработчиков.

Оригинал

Коммит Implement nested event queues от 6 ноября 2025 года в репозитории redox-os/kernel; гонка с каналами исправлена 14 ноября, обработка ложных пробуждений — 28 ноября. Сводка «This Month in Redox — November 2025», раздел «Kernel Improvements»

Упоминаний: 1 · Просмотров: 2