Comments 11
Здорово, но очень много опечаток в тексте (
вот так а на бсд есть своя подсистема 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), а о графической подсистеме, выполняющей низкоуровневые задачи отрисовки.
Статья @amirul показывает, что win32k.sys можно "отсоединить" от ядра. Также имеются альтернативные оболочки, работающие на более низком уровне.
Весьма много unsafe, да и без ассемблерных вставок не обошлось. Стоило ли для этого проекта использовать именно Rust?
Добрый день.
Вставки
unsafe
в основном используются в тех местах, где необходимо прямое взаимодействие с памятью компьютера — например, при работе с VGA, клавиатурой или при вызове ассемблерного кода.Ассемблер в данном примере ядра применяется лишь для низкоуровневых операций — таких как выключение или перезагрузка компьютера.
Реализация ядра на Rust даёт ряд преимуществ:
Более безопасная разработка благодаря borrow checker (вне
unsafe
-функциях), контроль за памятью и переменными.Более высокая и понятная абстракция по сравнению с чистым C (на котором написан Linux).
Проще в разработке, чем с чистого C.
Но есть, конечно, и минусы, такие как:
Мало статей по созданию ядра на Rust. Большинство статей приводят пример на чистом C.
Библиотека
bootloader
не совершенна. Как я понял, в ней отсутствует поддержка MBR-секторов, что не дало мне возможности добавить работу с файловой системой в ядро.
+ Некоторые библиотеки в Linux сейчас начинают писать на Rust, так как Линус Торвальдс ввёл поддержку этого языка в ядро.
Таким образом, я считаю, что выбор Rust для создания ядра — вполне оправдан. Он не только жизнеспособен, но и открывает интересные перспективы.
Создание своего ядра на Rust