# 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` — конкретные команды и их аргументы.