Files
BarotraumaLuaProjects/atlas_os/docs/README.md

117 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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), окружение. |