Files
BarotraumaLuaProjects/atlas_os/docs/01-hardware.md

84 lines
6.1 KiB
Markdown

# 01 — Аппаратный слой (Hardware)
## 1. Физические компоненты
AtlasOS использует следующие компоненты Barotrauma + MicroLua:
| Компонент | Кол-во | Назначение | Ёмкость / пины | Примечание |
|---|---|---|---|---|
| **MicroLua** | 3 (+5 резерв) | **IOC, CMC, MMC** | 32 in / 32 out | контроллеры блоков |
| **Memory** | n (≥2) | сегменты **SEG0..SEGn** | 4096 символов UTF-8 | хранилище |
| **Terminal / Display** | n | экраны | — | по одному IOC на терминал, login/logout per-terminal |
Дополнительно:
- Кнопки / переключатели — источники ввода команд.
- Memory-компоненты подключаются к MMC по **WE- и RD-линиям** (подробно ниже).
## 2. Распределение контроллеров
| Контроллер | Роль | Входы (примеры) | Выходы (примеры) |
|---|---|---|---|
| **IOC** (n шт.) | терминал + login | in1 = ввод строки | out1 = текст, out2 = clear, out3 = цвет |
| **CMC** (1) | центральный CPU, shell | сообщения от IOC | команды к IOC и MMC (однонаправленно) |
| **MMC** (1) | MMU + inode-ФС | ответы от SEG | WE/RD/DATA к сегментам |
Оставшиеся до 5 контроллеров:
- копроцессоры тяжёлых команд (поиск, архивирование);
- параллельные сессии;
- внешние устройства (радио, датчики, логи).
## 3. Пины и типы сигналов (MicroLua)
| Тип на пине | Формат | Пример | Использование |
|---|---|---|---|
| integer | `0`, `1`, `-100` | `out[2] = 1` (clear) | флаги, адреса, коды |
| string | UTF-8 | `out[1] = "ls -l"` | тексты, имена файлов, JSON-подобные сообщения шины |
| color | `"R,G,B"` | `"255,0,128"` | цвет текста на терминале |
**Важно:** строковые сигналы **неэкранированы** по умолчанию. При передаче по шине специализированные символы (`|`, `\n`, `,`) экранируются внутри протокола (см. `02-bus-protocol.md`).
## 4. Физическая топология (схема пинов)
```
Терминал 1 IOC1 Терминал 2 IOC2
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
│экран │◀──────│out1-3 │ │экран │◀──────│out1-3 │
│ввод │──────▶│in1 │ │ввод │──────▶│in1 │
└────────┘ └────▲───┘ └────────┘ └────▲───┘
│ │
└──────────────┬─────────────────┘
│ (однонаправленно)
┌─────────────────▼─────────────────┐
│ CMC (1) │
│ центральный CPU │
└─────────────────▲─────────────────┘
│ (однонаправленно)
┌─────────────────▼─────────────────┐
│ MMC (1) │
│ память + inode-ФС │
└─────────────────▲─────────────────┘
WE/RD/DATA (однонаправленно)
┌──────────────┬──────────┬─────────────┐
┌───┴───┐ ┌───┴───┐ ┌───┴───┐ ┌───┴───┐
│ SEG0 │ ... │ SEGk │ │SEG n-1│ │ SEGn │
└───────┘ └───────┘ └───────┘ └───────┘
```
- Сигналы **только** `in → out` (никаких bidirectional пинов между контроллерами).
- Каждый терминал имеет свой IOC — отдельная сессия + login/logout.
- CMC — единственный исполнитель команд (центральный CPU).
- MMC — единственный доступ к памяти.
См. детальную организацию пинов и протокол в `02-bus-protocol.md`.
## 5. Ограничения и рекомендации по экономии
- Каждый SEG несёт ** overhead сериализации** (`|`, `\n`). Минимизируйте мелкие записи.
- Храните **метаданные только в SEG0** (системная область).
- Используйте **агрегированные сообщения шины** (batch) вместо множества мелких пинов.
- Резервные контроллеры подключайте только когда нужно вынести тяжёлые вычисления.
См. следующие документы для деталей протокола, памяти и ФС.