LINUX.ORG.RU
ФорумTalks

Asterinas: Linux-совместимое ядро

 asterinas,


0

4

Из самого сердца Китая, Южного Университета Наук и Технологий (SUSTech) города Шэньчжэня, родился проект Asterinas. Совместимый с ядром Linux на уровне ABI, написанный на Rust, основанный на архитектуре, которую авторы называют «framekernel», сочетающей в себе плюсы монолитного и микроядерного дизайна.

Ядро ядра, простите за каламбур, написано на unsafe Rust и представляет из себя небольшую, но достаточно функциональную библиотеку, которая реализует все нужные абстракции. Это аналог микроядра. Остальная часть ядра написана на safe Rust и использует эту библиотеку. Это аналог сервисов для микроядра. Но в данном случае всё ядро выполняется в одном адресном пространстве на одном уровне привилегий. Таким образом вызовы между этими частями не вызывают накладных расходов, которые типичны для микроядер, связанных с переключением контекста процессора. Но в то же время гарантии, которые даёт компилятор safe Rust, дают стабильность, которая, традиционно, достигалась разграничением кода на аппаратном уровне и была лишь прерогативой микроядер.

Ну а совместимость с ядром Linux на уровне ABI позволяет использовать любой софт, скомпилированный для Linux.

Asterinas был анонсирован в начале 2024 года под свободной лицензией Mozilla Public License. В настоящий момент проект активно разрабатывается студентами ряда китайских университетов и поддерживает 206 из 368 системных вызовов Linux.

Подробней на английском языке почитать можно тут: LWN: Asterinas: a new Linux-compatible kernel project

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

★★★★★

Последнее исправление: vbr (всего исправлений: 5)

которую авторы называют «framekernel», сочетающей в себе плюсы монолитного и микроядерного дизайна.

Ядро ядра, простите за каламбур, написано на unsafe Rust и представляет из себя небольшую, но достаточно функциональную библиотеку, которая реализует все нужные абстракции. Это аналог микроядра. Остальная часть ядра написана на safe Rust и использует эту библиотеку. Это аналог сервисов для микроядра. Но в данном случае всё ядро выполняется в одном адресном пространстве на одном уровне привилегий. Таким образом вызовы между этими частями не вызывают накладных расходов, которые типичны для микроядер, связанных с переключением контекста процессора. Но в то же время гарантии, которые даёт компилятор safe Rust, дают стабильность, которая, традиционно, достигалась разграничением кода на аппаратном уровне и была лишь прерогативой микроядер.

Не, не дают. Но чувакам, конечно же, удачи.

hateyoufeel ★★★★★
()

В настоящий момент проект активно разрабатывается студентами

А профессора там хоть участвуют в этом?

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

У них в ближайших планах создание ОС для контейнеров, которую можно будет разворачивать в облаке Aliyun (известном, как Alibaba Cloud). Драйверы для virtio уже готовы.

vbr ★★★★★
() автор топика

основанный на архитектуре, которую авторы называют «framekernel», сочетающей в себе плюсы монолитного и микроядерного дизайна.

Ядро ядра, простите за каламбур, написано на unsafe Rust и представляет из себя небольшую, но достаточно функциональную библиотеку, которая реализует все нужные абстракции. Это аналог микроядра. Остальная часть ядра написана на safe Rust и использует эту библиотеку. Это аналог сервисов для микроядра

У нас тогда почти весь софт вокруг, не только ядра, построен на архитектуре «framekernel». Например, libc — аналог микроядра, а остальная часть программы, что вызывает функции из libc — аналог сервисов микроядра.

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

Весь софт не может уронить всю ОС одной строчкой. А драйвер традиционного монолитного ядра - может. Поэтому указанное разделение для обычных программ не актуально. Хотя можно найти аналогии с платформами вроде Java, где JVM играет роль ядра, написанного на небезопасном C++ и реализующего безопасные API для остального кода, написанного на Java.

vbr ★★★★★
() автор топика
Последнее исправление: vbr (всего исправлений: 2)

Я конечно дико извиняюсь за оффтоп, но Флаттершай что, в новых сериях изменила пол?)

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

При чём тут может или не может уронить? Я про архитектуру.

Почему-то для монолитов любят всякие баззворды придумывать. Типа «гибридное ядро» для NT (и OS X?), а тут — «framekernel».

Если в ядре выделили какие-то общие абстрации/общеиспользуемый код (а возможно по-другому разрабатывать, что ли?), это не становится в «аналогом микроядра»

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

Нет, это мои фантазии, воплощённые нейросеткой, можешь считать это создание двоюродным братом Флаттершай.

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

При чём тут может или не может уронить? Я про архитектуру.

При том, что изоляция драйверов это как раз то, для чего делают микроядерную архитектуру. Чтобы можно было писать некачественные драйверы (а они по-любому будут некачественными, их слишком много и их пишет кто попало), и они не влияли на стабильность других частей ядра (и на стабильность всей системы в целом, как следствие).

Ровно та же причина, по которой вообще придумали разделение на userspace и kernelspace. Которое тоже не является аксиомой, между прочим.

Почему-то для монолитов любят всякие баззворды придумывать. Типа «гибридное ядро» для NT (и OS X?), а тут — «framekernel».

Ну любят и любят. Разница-то явно есть. Когда в винде падает драйвер видеокарты, экран моргает и через секунду всё опять работает, при этом меня даже из рейда не выкидывает - это круто. Уж не знаю, как именно в винде этого достигают. Но это явно не просто так произошло, а определёнными усилиями.

Если в ядре выделили какие-то общие абстрации/общеиспользуемый код (а возможно по-другому разрабатывать, что ли?), это не становится в «аналогом микроядра»

Ну вот в линуксе выделили, а он всё равно падает. А Asterinas не падает. Значит есть разница.

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

Значит разница есть, но это всё ещё не делает ядро микроядерным.

Жигули отличаются от Фокуса, но оба не являются мотоциклами-переростками, хоть и имеют по паре колёс.

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

Судя по исходникам они пока ориентируются на virtio-драйверы, т.е. их ОС запускается в qemu. В kernel/src/fs есть exfat, ext2.

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

это всё ещё не делает ядро микроядерным.

Но дает плюсы микроядра. Если конечно все так, как они утверждают.

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

Но linux полноценное ядро работающее на куче железа, а это исследовательский проект работающий в qemu на ext2. Тесты производительности какого-нибудь postgres или nginx они опубликовали?

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

При том, что изоляция драйверов это как раз то, для чего делают микроядерную архитектуру

Вот именно. А без изоляции драйверов нет микроядерной архитектуры. Что такое «аналог микроядра», без определяющего свойства микроядра? Монолит микроядросодержащий?

Когда в винде падает драйвер видеокарты, экран моргает и через секунду всё опять работает

Если падает юзерспейсная часть. Есть ещё ядерная.

Одной юзерспейсности недостаточно. Вон, иксы юзерспейсные. И вяленые композиторы тоже. Только падение ни иксов, ни вяленого пользовательская сессия не переживёт. Потому что нужна ещё возможность переподключения после падения. Ни в X11, ни в вяленом протоколе её нет.

А так, насколько я знаю, и в винде, и в линуксе графический драйвер частично сидит в ядре (kernel-mode display miniport driver в Windows), частично в юзерспейсе (libdrm-<vendor>, libGL-<vendor>, Xorg DDX-модули в Linux)

utf8nowhere ★★★★
()
Последнее исправление: utf8nowhere (всего исправлений: 2)
Ответ на: комментарий от imul

Да, с 2008 как подсел, так и не слезаю, всем рекомендую.

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

Одной юзерспейсности недостаточно. Вон, иксы юзерспейсные. И вяленые композиторы тоже. Только падение ни иксов, ни вяленого пользовательская сессия не переживёт. Потому что нужна ещё возможность переподключения после падения. Ни в X11, ни в вяленом протоколе её нет.

зато если композитор (менеджер, как его звать) окон дохнет, то оно переживает это без проблем. точно помню в кде валилось оно. тоже все замирало на секунды, пока не перезапустишь его или оно само не перезапустится.

думаю там тоже в венде что-то уровня композитора отваливалось в тот озвученный момент. иначе бы все тоже валилось, как при падении Х.

короче вижу явный паритет. просто в линаксах никто безрассудно не рапортует о том, что аж целый «драйвер был перезапущен».

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

зато если композитор (менеджер, как его звать) окон дохнет, то оно переживает это без проблем

В Wayland нет %)

думаю там тоже в венде что-то уровня композитора отваливалось в тот озвученный момент

Нет, и это не магия, просто Linux не очень хорош в этом плане. Еще в Windows можно обновить графический драйвер без перезагрузки, тоже все помигает, но включится с новым драйвером.

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

зато если композитор (менеджер, как его звать) окон дохнет, то оно переживает это без проблем

В иксах — да

utf8nowhere ★★★★
()

Я конечно дико извиняюсь за оффтоп, но Флаттершай что, в новых сериях изменила пол?)

да ты чего! это же Flutterguy из самого что ни есть первого сезона - серия, где поняши обнюхались "неправильных" цветов в лесу, а потом их плющило по-жесткому, каждую по-своему, пока зёбра не сварила им разупорин.

PerdunJamesBond
()

Совместимый с ядром Linux на уровне ABI

Как вообще можно заявлять совместимость с тем, что не имеет (и принципиально не собирается иметь) стабильной реализации?

quwy
()

Готовы ли мы к новой студенческой поделке?

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

Контракт ABI у Linux это как раз единственное, что стабильно.

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

ни в вяленом протоколе её нет

Возможность переподключения есть в qt, насколько я помню, kwin wrapper для этого держит сокет композитора открытым.

На практике я делал pkill -9 kwin_wayland и окна оставались на месте.

whbex ★★
()
Последнее исправление: whbex (всего исправлений: 2)
Ответ на: комментарий от next_time

Нет конечно, причем NVIDIA очень хотела это сделать, но ссылается на проблемы в ядре.

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

kwin wrapper

Это типа прокси между реальным композитором и клиентами? Ну да, таким образом можно сделать композитор перезапускаемым, пока прокси не падает

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

Насколько я понял, клиенты подключаются напрямую к KWin, wrapper только держит сокет открытым и перезапускает kwin_wayland в случае падения.

whbex ★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)