Files
BarotraumaLuaProjects/atlas_os/docs/README.md
T

117 lines
10 KiB
Markdown

# 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`](01-hardware.md) | Компоненты, пины, типы сигналов, распределение контроллеров, физическая топология. |
| [`02-bus-protocol.md`](02-bus-protocol.md) | Протокол обмена между IOC↔CMC↔MMC по пинам: кадры, опкоды, коды ошибок. |
| [`03-memory-model.md`](03-memory-model.md) | Адресное пространство, сегменты, указатели, блочное выделение, LZ4 и кодирование. |
| [`04-filesystem.md`](04-filesystem.md) | inode-ФС: суперблок, формат inode, каталоги, аллокатор блоков, сериализация. |
| [`05-users-permissions.md`](05-users-permissions.md) | Пользователи, группы, режим `rwx`, аутентификация, проверка прав. |
| [`06-execution-model.md`](06-execution-model.md) | Контроллер команд, оболочка, модель программы и процесса, копроцессоры. |
| [`07-command-set.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), окружение. |