В первой части я обещал не начинать с нуля, а сперва показать, что уже стоит на месте. Так что - поехали, небольшая экскурсия. Без кода, без регистров, только честный взгляд на то, что я собрал и что ты скоро сможешь запустить сам.
Что это по сути
Триалогия - собственная операционная система для 32-битных x86-машин (да да, у же слышу еще не написанные коментарии). Она стартует через классический BIOS, работает в QEMU или VirtualBox, и мне это важно,она ничего не заимствует ни у Linux, ни у кого-либо ещё (хотя конечно идеи линукса мне близки и наложили свой отпечаток). Каждая строчка, от загрузчика до рамки окна, выросла здесь, дома.
У этого есть и цена, и своя прелесть одновременно. Цена: я обязан всё делать сам, в том числе скучное. Прелесть: никакого наследия, никакой оглядки на сорок лет совместимости. Если идея нравится мне больше, я её просто беру и встраиваю. На данном этапе могу себе это позволить.
От включения до рабочего стола
Когда ты запускаешь машину, на фоне разворачивается короткая цепочка передач из рук в руки. BIOS достаёт с диска самый первый кусочек кода. Загрузчик подхватывает, переключает процессор в защищённый режим и грузит ядро. Ядро раскладывает память, поднимает драйверы, выясняет, какое железо вообще присутствует. И только потом система берётся за экран и в самом конце запускает оконный менеджер, который и рисует тебе рабочий стол.
Если с графикой что-то не складывается, система откатывается на простую текстовую консоль, то есть в полной темноте ты не останешься никогда. Этот порядок звучит как само собой разумеющийся, но это не так: именно здесь и застревает большинство любительских систем, о которых я рассказывал в первой части.
Как оно устроено внутри
Одно мне было важно с самого начала: ядро должно делать только то, чему действительно место в ядре. Управлять памятью, переключать процессы, разговаривать с железом. А оконный менеджер, то что ты видишь как рабочий стол, работает не в ядре, а как самая обычная программа в пространстве пользователя. Если он падает, он не утягивает за собой всю машину. Это осознанное решение, и оно определяет почти всё остальное. Это сейчас так. Раньше все было внутри kernel в ring0. Это я о ракете из предыдущего поста. И WindowManager (WM) и NetworkManager (NM) и LES Brocker (Lazy Events System) находилось в kernel. А затем с помощью напильника и такой-то матери пришлось выпиливать и переносить в userspace (ring3). Это к сати и стало основной причиной нестабильности (одной из причин).
Снизу вверх: железо, над ним драйверы дисков, сети, ввода и экрана, затем собственно ядро с планировщиком и управлением памятью. Выше лежит узкий мост между ядром и пользователем, через него программы разговаривают с системой, получают устройства, отправляют дальше свой вывод. А на самом верху сидят оконный менеджер и приложения: терминал, настройки, менеджер устройств и маленькие утилиты.
Что уже работает
Система загружается, показывает рабочий стол с иконками и строкой состояния, открывает окна, отзывается на мышь и клавиатуру. Есть терминал с небольшой оболочкой, в которой можно печатать и запускать программы.
Под этим работает файловая основа, понимающая сразу несколько форматов FAT, EXT2/3, и ListFS (идея и основная реализаци из интернета. Мной переработана и дополнена), и добирается она до данных через разные дисковые драйверы: классический IDE, SATA через AHCI, (NVMe и virtio в планах). Сеть стоит в общих чертах: есть драйверы для E1000, собственный стек TCP/IP, и ipping / dns по сети действительно работает. Картинки в форматах PNG и JPEG система умеет читать, курсор мыши рисуется аппаратно, и всё это запускается и в QEMU (нет аппаратного курсора), и в VirtualBox.
Чего пока нет или что шатается
А теперь честная часть, потому что без неё вся эта экскурсия была бы враньём.
Самое крупное в первую очередь: на одном процессорном ядре всё работает прилично. На двух и более (до 8-ми) пока ненадёжно: запуск иногда подвисает, и эти ошибки я как раз сейчас ловлю. USB пока нет. Устойчивой к сбоям файловой системы с журналом у меня нет, ListFS этого не имеет, если питание пропадёт прямо посреди записи, может быть больно. UEFI отсутствует полностью, это чистый запуск через BIOS, и 64-бит нет, осознанно, пока что.
Ничего из этого не секрет и не позор. Это просто состояние стройки. Что-то уже стоит, что-то в лесах, к чему-то я ещё даже не приступал. Хотя список обеих частей конечно больше, просто многие подсистемы лежат под капотом и не отсвечивают. Взять хотя бы bridge между kernel и userspace, важнейшая система построенная на SHM/Events и частично на Syscalls. Если она заглючит, ничего работать не будет. Тоже самое можно сказать и о протоколе обмена между Userspace App и WM (также как и NM).
И что дальше?
Теперь у тебя есть представление о том, что это за система и на что она способна. В следующей части ты перестаёшь читать и начинаешь играть: я по шагам покажу, как запустить образ в QEMU или VirtualBox и самому потыкать мышкой по рабочему столу.
◀ Предыдущая статья Содержание Следующая статья ▶
*Создано с использованием ИИ
*Система не стоит на месте, поэтому в дальнейшем тексты могут не совпадать с реальным положением