Files
BarotraumaLuaProjects/atlas_os/docs/06-execution-model.md

56 lines
2.7 KiB
Markdown

# 06 — Модель выполнения (Execution Model)
## 1. Роли контроллеров
| Контроллер | Что хранит в Lua | Что делает |
|---|---|---|
| **IOC** (n шт.) | цвет, буфер вывода, текущий пользователь | вывод на терминал, clear, приём ввода, login/logout |
| **CMC** (1) | таблица предопределённых команд, сессии | парсинг, выполнение только встроенных команд, вызовы MMC |
| **MMC** (1) | кэш inode (опц.), free list head | операции ФС, сжатие/распаковка, проверка прав |
## 2. Сессия (в CMC)
```
session = {
uid = 100,
gid = 10,
cwd = "/home/captain",
env = { PATH = "/bin:/usr/bin" }
}
```
- Сессия создаётся при `login`.
- `cwd` обновляется командой `cd` (MMC проверяет `x`).
- uid/gid передаются в каждый MEM-запрос.
## 3. Модель команд
- Контроллеры выполняют **только предопределённые команды**, зашитые в прошивку (Lua-код контроллера).
- Пользователь **не может** выполнять произвольный Lua-код.
- Доступные команды: `ls`, `ls -l`, `ls -la`, `cat`, `cd`, `login`, `logout` и другие, зарегистрированные в CMC.
- Каждая команда — жёстко заданная функция в firmware CMC.
## 4. Копроцессоры (опционально)
Оставшиеся 5 контроллеров могут выполнять:
- тяжёлые команды (`find`, `grep`, архивация);
- фоновые задачи (логи, мониторинг);
- параллельные сессии нескольких пользователей.
Связь — по той же шине MEM/CMD.
## 5. Очередь и сериализация
- CMC допускает **только один активный MEM-запрос** одновременно.
- Следующая команда ждёт ответа `OK`/`ERR`.
- При отсутствии ответа — таймаут и ошибка.
## 6. Экономия памяти Lua
- Храните в сессии только **скаляры** (cwd — строка пути, uid/gid — числа).
- Буферы файлов и большие таблицы — **только** в SEG (MMC).
- Избегайте рекурсии и больших локальных таблиц в командах.
См. `07-command-set.md` — конкретные команды и их аргументы.