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