Документация проекта AtlasOS
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
# 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` — конкретные команды и их аргументы.
|
||||
Reference in New Issue
Block a user