Pull to refresh

Comments 11

Хорошее изложение ! Статья очень хорошо ложится после вот этой и некоторой базы про Rust embedded. Просто идеально заполняет пробелы. Благодарю вас за труд.

Спасибо большое.
Я рад, что статья была для вас интересна.

Здорово, но очень много опечаток в тексте (

Спасибо большое за ваш комментарий.
Только что исправил опечатки в тексте.
Надеюсь, в тексте не осталось опечаток.

вот так а на бсд есть своя подсистема bhyve [vm команда] ) не надо ничё ставить пишешь загрузчик и погнал )

поидее терминал это оболочка - интерпретатор для ОС надо же сисколы реализовывать вроде, а рисовать не так сложно вроде на сколько я погружался

Добрый день.

В системе на примере Linux терминал — это отдельная оболочка, не являющаяся частью ядра.
Однако это не мешает, например, в другой операционной системе реализовать терминал как часть ядра.

Точно так же графическая оболочка в большинстве систем не входит в состав ядра,
но в Windows она является неотъемлемой его частью.

Таким образом, что считать частью ядра, а что нет — во многом зависит от решений разработчика.

Не путайте оболочку и (под)систему. Графическая оболочка в винде называется "Проводник" и частью ядра никогда не была.

Добрый день.
Похоже, возникло недоразумение в терминах.

Когда я говорил о графической оболочке как части ядра Windows, я имел в виду не "Проводник" (Explorer.exe) как файловый менеджер и пользовательский интерфейс, а графическую подсистему (GDI, USER, win32k.sys), которая действительно работает в режиме ядра (kernel mode), начиная с Windows NT 4.0.

До NT 4.0 графическая подсистема находилась в пользовательском пространстве, но позже ради повышения производительности (особенно для серверных терминалов и рендеринга UI) её перенесли в kernel mode. Это сделало графическую подсистему частью ядра в архитектурном смысле, хотя она и не является ядром в узком понимании (как, например, планировщик задач или управление памятью).

То есть, я говорил не о GUI как оболочке (типа Explorer), а о графической подсистеме, выполняющей низкоуровневые задачи отрисовки.

Весьма много unsafe, да и без ассемблерных вставок не обошлось. Стоило ли для этого проекта использовать именно Rust?

Добрый день.

  1. Вставки unsafe в основном используются в тех местах, где необходимо прямое взаимодействие с памятью компьютера — например, при работе с VGA, клавиатурой или при вызове ассемблерного кода.

  2. Ассемблер в данном примере ядра применяется лишь для низкоуровневых операций — таких как выключение или перезагрузка компьютера.

  3. Реализация ядра на Rust даёт ряд преимуществ:

  • Более безопасная разработка благодаря borrow checker (вне unsafe-функциях), контроль за памятью и переменными.

  • Более высокая и понятная абстракция по сравнению с чистым C (на котором написан Linux).

  • Проще в разработке, чем с чистого C.

Но есть, конечно, и минусы, такие как:

  • Мало статей по созданию ядра на Rust. Большинство статей приводят пример на чистом C.

  • Библиотека bootloader не совершенна. Как я понял, в ней отсутствует поддержка MBR-секторов, что не дало мне возможности добавить работу с файловой системой в ядро.

+ Некоторые библиотеки в Linux сейчас начинают писать на Rust, так как Линус Торвальдс ввёл поддержку этого языка в ядро.

Таким образом, я считаю, что выбор Rust для создания ядра — вполне оправдан. Он не только жизнеспособен, но и открывает интересные перспективы.

Sign up to leave a comment.

Articles