Files

AtlasOS — Архитектура

AtlasOS — миниатюрная UNIX-подобная операционная система для бортовых компьютеров игры Barotrauma, построенная на MicroLua-контроллерах. Документ описывает полную архитектуру: аппаратный слой, шину, модель памяти, файловую систему, систему прав и модель выполнения программ.

Версия архитектуры: 2.0 (inode-ФС). Прототип CLI: atlas_os/AtlasOS.lua.


1. Цели проекта

  • Дать командную оболочку (shell) на терминале внутри игры.
  • Реализовать постоянное хранилище (файловую систему) поверх компонентов памяти.
  • Поддержать многопользовательность в духе Linux: пользователи, группы, права rwx.
  • Работать в условиях жёсткого лимита памяти компонентов Barotrauma.
  • Оставаться компактным: система не должна разрастаться и съедать память, предназначенную для пользовательских данных.

2. Ключевые ограничения (платформа Barotrauma + MicroLua)

Ограничение Значение Источник
Контроллеров в системе до 8 требование
Пинов на контроллер 32 входа / 32 выхода MicroLua
Ёмкость компонента памяти 4096 символов UTF-8 компонент Memory
Типы сигналов на пинах integer, string, color ("R,G,B") MicroLua
Модель исполнения upd(dt) каждый кадр или событие inp(pin,val) MicroLua
Состояние Lua не сохраняется между раундами MicroLua

Из последнего пункта следует фундаментальный принцип: всё, что должно пережить раунд, обязано лежать в компонентах памяти, а не в Lua-переменных контроллера. Lua-состояние используется только как кэш и регистры (см. 03-memory-model.md).

3. Декомпозиция на блоки

Система разделена на три функциональных блока. Каждый блок — отдельный физический MicroLua-контроллер; блоки общаются по сигнальной шине (проводам между пинами).

                         ┌──────────────────────────────┐
                         │        ТЕРМИНАЛ (экран)       │
                         │  текст · цвет · ввод · clear  │
                         └───────────────▲──────────────┘
                                         │ I/O-провода
                         ┌───────────────┴──────────────┐
   ввод пользователя ──▶ │   IOC — I/O Controller        │
                         │   (блок ввода/вывода)         │
                         └───────────────▲──────────────┘
                                         │ шина CMD
                         ┌───────────────┴──────────────┐
                         │   CMC — Command Controller    │  ◀── shell, разбор
                         │   (контроллер команд, «CPU»)  │      команд, сессия
                         └───────────────▲──────────────┘
                                         │ шина MEM
                         ┌───────────────┴──────────────┐
                         │   MMC — Memory/FS Controller  │  ◀── inode-ФС, MMU,
                         │   (блок памяти и ФС)          │      LZ4, права
                         └───────────────▲──────────────┘
                                         │ линии сегментов
            ┌────────────┬───────────────┼───────────────┬────────────┐
        ┌───┴───┐    ┌───┴───┐       ┌───┴───┐        ┌───┴───┐    ┌───┴───┐
        │ SEG0  │    │ SEG1  │  ...  │ SEGk  │   ...  │ SEGn-1│    │ SEGn  │
        │система│    │ user  │       │ user  │        │ user  │    │ user  │
        └───────┘    └───────┘       └───────┘        └───────┘    └───────┘
                          компоненты памяти (по 4096 симв.)
Блок Контроллер Роль
Ввод/вывод IOC Терминал: вывод текста, цвет, очистка, чтение строки ввода.
Контроллер команд CMC Shell: парсинг, диспетчеризация команд, сессия пользователя, права на уровне вызовов.
Память и ФС MMC MMU + файловая система (inode), сжатие LZ4, выделение блоков, проверка прав на уровне ФС.

Оставшиеся до 5 контроллеров — резерв/копроцессоры (тяжёлые команды, параллельные сессии). См. 01-hardware.md.

4. Разделение памяти: система ⇄ пользователь

Адресное пространство хранилища делится на две области (подробно — 03-memory-model.md):

  • Системная область (kernel space). Метаданные: суперблок, таблица inode, список свободных блоков, таблица пользователей. Указатели хранятся здесь. Компактна, фиксированного объёма.
  • Пользовательское пространство (user space). Содержимое файлов, сжатое LZ4 и закодированное в безопасный текст (Base64 по умолчанию, BMP-упаковка как опция).

Принцип: «указатели — в системе, данные — у пользователя». Контроллеры держат в Lua только указатели/индексы и небольшие кэши, а объёмные строки живут в сегментах пользовательского пространства и подгружаются по требованию.

5. Карта документов

Файл Содержание
01-hardware.md Компоненты, пины, типы сигналов, распределение контроллеров, физическая топология.
02-bus-protocol.md Протокол обмена между IOC↔CMC↔MMC по пинам: кадры, опкоды, коды ошибок.
03-memory-model.md Адресное пространство, сегменты, указатели, блочное выделение, LZ4 и кодирование.
04-filesystem.md inode-ФС: суперблок, формат inode, каталоги, аллокатор блоков, сериализация.
05-users-permissions.md Пользователи, группы, режим rwx, аутентификация, проверка прав.
06-execution-model.md Контроллер команд, оболочка, модель программы и процесса, копроцессоры.
07-command-set.md Спецификация команд ls, ls -l, ls -la, cat, cd и правила расширения.

6. Глоссарий

Термин Значение
IOC / MMC / CMC Три блочных контроллера (I/O, Память/ФС, Команды).
Сегмент (SEG) Один компонент памяти Barotrauma, ёмкость SEG_SIZE = 4096 символов.
Блок (block) Логическая единица хранения данных файла внутри сегмента (BLOCK_SIZE символов).
inode Запись метаданных одного объекта ФС (тип, права, владелец, размер, список блоков).
Системная область Сегменты/поля с метаданными ФС и указателями.
Пользовательское пространство Сегменты с содержимым файлов (сжатым LZ4).
Шина (bus) Набор пинов-проводов между контроллерами для обмена сообщениями.
Сессия Текущий контекст shell в CMC: uid/gid, рабочий каталог (cwd), окружение.