3.4 KiB
3.4 KiB
03 — Модель памяти (Memory Model)
1. Адресное пространство
0x0000 СИСТЕМНАЯ ОБЛАСТЬ (kernel space)
├─ SEG0 суперблок + inode table + free list + passwd
└─ (опц.) SEG1 (расширение метаданных)
0x1000+ ПОЛЬЗОВАТЕЛЬСКОЕ ПРОСТРАНСТВО (user space)
├─ SEG2..SEGk блоки файлов (сжатые LZ4)
└─ ... до SEGn (ограничено 8 контроллерами, n ~ десятки)
- SEG0 обязателен и содержит все указатели.
- Пользовательские данные (файлы) — только в user-сегментах.
- Каждый сегмент — независимый компонент Memory (4096 символов UTF-8).
2. Сегмент (SEG)
| Поле | Размер | Описание |
|---|---|---|
SEG_SIZE |
4096 | максимум символов UTF-8 |
BLOCK_SIZE |
512 | логический блок внутри сегмента (рекомендация) |
BLOCKS_PER_SEG |
8 | 512 × 8 = 4096 |
Можно использовать переменный размер блоков; главное — детерминированная адресация.
Адрес блока кодируется как uint32 = (seg_idx << 16) | block_idx.
3. Указатели и сериализация
Все указатели (номера inode, номера блоков, смещения) хранятся в SEG0 в компактном ASCII-формате:
SUPER|version|seg_size|inode_count|root_inode|free_head
INODE|ino|type|mode|uid|gid|size|block0,block1,...
DIR|ino|name→ino|name→ino|...
PASSWD|uid|name|gid|home|hash
Контроллеры (CMC/MMC) держат в Lua-памяти только индексы и кэши, а не целые файлы.
4. Сжатие и кодирование
| Способ | Плотность | Безопасность | Примечание |
|---|---|---|---|
| LZ4 + Base64 (по умолчанию) | ~3/4 | 100 % ASCII safe | 4096 симв. → ~3 КБ сжатых данных |
| LZ4 + BMP-упаковка (опция) | ~2× | нужно экранирование управляющих | 2 байта → 1 символ |
- Сжатие применяется поблочно (каждый блок файла сжимается отдельно).
- При Base64 длина сжатого блока должна быть кратна 3 байтам.
- Декодирование и распаковка — задача MMC при чтении/записи.
5. Экономия памяти (рекомендации)
- Храните только метаданные в SEG0; содержимое файлов — в user-сегментах.
- Используйте агрегированные free-list вместо bitmap (экономит поле на сегмент).
- Избегайте мелких файлов — они дают overhead inode + минимум 1 блок.
- При чтении подгружайте только нужные блоки, не весь файл целиком.
Следующий документ: 04-filesystem.md — точные форматы inode, каталогов и free-list.