Спецификация на машину 3m

Возможности машины 3m

Машина 3m предназначена для проведения только базовых операций с деревьями, такими как создание дерева, добавление элемента, удаление элемемнта из дерева, присоединение атрибута к узлу дерева элементов, удаление атрибутов, ... Более сложные операции могут быть реализованы на ней с использованием этих команд.

Устройство памяти

Машина 3m.v1 позволяет работать с памятью размером до 4 Гб. Память машины устроена следующим образом:

  1. Заголовок
    Version1 байт
    Length of length (lol)1 байтРазмер указателя памяти машины
    Tree size lol (treeszlol)1 байтРазмер поля номера узла дерева
    Flag size lol (flaglol)1 байтРазмер поля атрибутов узла дерева
    Tree count(tcount)(lol) байтКоличество деревьев в файле памяти
    Tree refs(tcount)*(lol) байтМассив ссылок на деревья
    Current memory (curmem)(lol) байтСсылка на текущую память машины
    Swap memory (altmem)(lol) байтСсылка на альтернативную память машины
    Swap size(lol) байтРазмер памяти curmem и altmem
  2. Первая копия памяти
  3. Вторая копия памяти

Основная память имеет сегментную организацию. Сегмент имеет следующую структуру:

  1. Флаги (1 байт) (flags)
    1. flags & 00000001b - свободен/занят (0/1)
    2. flags & 00000010b - не последний/последний (0/1)
  2. Размер сегмента (lol) байт

Любая структура данных машины хранится в сегментах. Структуры данных машины:

Дерево
Node count(treeszlol) байтколичество узлов в дереве
Capacity(treeszlol) байтколичество узлов в дереве
Atribute reference(lol) байтссылка на таблицу атрибутов дерева
Root number(treeszlol) байт номер корня
Node list(node count)*(nodesz) байтсписок узлов дерева
Узел дерева
Поля обязательных заголовков
Node number(treeszlol) байтномер узла
Reverse hash(treeszlol) байтполе обратного разрешения номера узла
Parent(treeszlol) байтномер узла родителя
Flags(flaglol) байтполе флагов узла(отвечает за счетчик ссылок и удален/не удален)
Atribute table ref(treeszlol) байтномер в таблице атрибутов с которого начинаются атрибуты узла
Поля необязательных заголовков
Left child(treeszlol) байтномер левого потомка
Right brother(treeszlol) байтномер правого брата
Child count(treeszlol) байтколичество прямых потомков
AllChild count(treeszlol) байтОбщее количество потомков
Таблица атрибутов

  1. Количество атрибутов в таблице (lol)
  2. Список атрибутов
    1. Ссылка на имя атрибута (lol)
    2. Ссылка на значение атрибута (lol)

Словарь

Состоит из Паскалевских строк длиной не более 255 байт. Представляет из себя последовательность строк, 0 - отсутствие строки и место, куда добавляется новая строка

Сборка мусора

Структуры, находящиеся в текущей памяти могут иметь сильную фрагментацию из-за постоянных процедур добвления.удаления элементов. Для устранения этой проблемы, а также для расширения базовых размеров структур используется сборка мусора копированием. Эта процедура копирует все валидные структуры из текущей памяти в альтернативную с расширением их размеров. Если памяти не хватает, то выходит ошибка. После копирования текущая и альтернативная памяти меняются местами.