В Redox появился системный вызов с шестью аргументами

16.12.2025

В ядре Redox добавлен вызов syscall6 для системных вызовов с шестью аргументами. В тот же день появился unlinkat, а unlink и rmdir переписаны через него.

Зачем системному вызову шесть аргументов

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

Каждый обходной путь требует дополнительного кода на стороне библиотеки и на стороне ядра, а главное — ошибается. Шесть аргументов — это расширение формата, снимающее часть обходных решений. Особенно полезно для вызовов, работающих с расширенными структурами: там пять-шесть параметров естественны.

Контекст: работа над capability-безопасностью

Авторы указывают, что сделано это в рамках перехода на capability — модели, где право доступа передаётся как дескриптор, а не определяется по идентификатору пользователя. Свойства границ ОС с этим переходом связаны: работа со схемами и пространствами имён требует передавать дополнительные параметры.

Но и более широкое применение найдено, и это отмечено в сводке прямо.

Что ещё изменилось тем же днём

Добавлен вызов unlinkat — удаление файла относительно каталога-дескриптора, а не текущего. Вызовы unlink и rmdir переписаны через него, а из ядра убраны отдельные SYS_OPEN, SYS_UNLINK и SYS_RMDIR. Обёртка появилась в relibc, redox-scheme и в ramfs.

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

Что это даёт коду на Rust

Новый вызов доступен через крейты-обёртки системных вызовов, то есть это новая точка API. А переход на unlinkat вместо unlink — изменение поведения: код, полагавшийся на текущий каталог процесса, в новой схеме работает иначе, и это правильнее с точки зрения многопоточности.

Оригинал

Коммит Implement the syscall6 system call от 16 декабря 2025 года в репозитории redox-os/kernel, слияние в основную ветку 17 декабря; unlinkat добавлен в redox-os/redox-scheme 16 декабря и в relibc 17 декабря. Сводка «This Month in Redox — December 2025», раздел «Kernel Improvements»

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