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