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), окружение. |