# 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) вместо множества мелких пинов. - Резервные контроллеры подключайте только когда нужно вынести тяжёлые вычисления. См. следующие документы для деталей протокола, памяти и ФС.