Структура узла NDDI
3. Структура узла NDDI
Компоненты· D-секция · Значения · Активности · Соединители · Грани
3. 1. Общие принципы
NDDI является единственным типом сущности в сети GNET. Всё, что существует в сети — это NDDI и отношения между ними. Операционные сети (OPNT), администраторы (ANOD), репозитории D-компонентов, сенсоры, эффекторы — все являются NDDI, различающимися только составом компонентов.
NDDI состоит из компонентов. Компонент — это элементарная единица узла, обладающая значением, статусом и возможностью участвовать в отношениях через соединители. Компонент — это не просто переменная. Это feature узла: значение + статус + соединители + метаданные. Однотипные компоненты могут быть объединены в группы для целей визуализации — грани многогранника NDDI (v-грань, a-грань, d-грань и т.д.).
Не все типы компонентов присутствуют в каждом NDDI. Набор компонентов определяется D-секцией — и именно D-секция является первым компонентом, который необходимо рассмотреть, так как она создаёт NDDI как сущность.
Порядок возникновения компонентов. D-компоненты являются первичными. Они представляют собой объектный код (ELF), хранящийся в узле-репозитории. Пока D-компоненты не собраны и не слинкованы — NDDI не существует как живая сущность. При линковке D-компонентов и запуске полученного кода появляются V-компоненты (значения) и A-компоненты (активности). Набор D + V + A даёт минимально живой узел, способный хранить значения и реагировать на входы. Этого достаточно для создания сети уровня SERN.
По мере добавления новых D-компонентов (генов) и перелинковки появляются компоненты высших уровней:
Уровень |
Новые компоненты |
Что добавляется |
D, V, A |
Базовый узел: код, значения, реакции |
|
+ L |
Позиция в пространственной карте |
|
+ R |
Инвариантное распознавание объектов |
|
+ T, B |
Целевые состояния и вектор сплайса |
|
+ S |
Символьные компоненты |
|
+ N, P |
Нарративы и предикаты |
|
+ C |
Понятия |
|
+ W |
Вектор противоречия |
|
Эволюционная иерархия DOM из Книги 1 (GTOM) отображается на состав компонентов NDDI: каждый новый уровень DOM — это новые D-компоненты (гены), которые при линковке порождают новые типы компонентов в узле.
Персистентность. NDDI создаётся навсегда и никогда не удаляется — аналогично нейронам в мозге человека. Созданный узел со всеми компонентами и выросшими соединителями размещается на устройстве постоянной памяти, которое является его первичным местом хранения.
Для осуществления активности (реакции на входящие отношения, вычисления, передача значений по соединителям) NDDI должен быть активирован в оперативной памяти. Однако первичным хранилищем остаётся постоянная память.
Критические данные — компоненты с внешними соединителями, соединители с контр-именами, D-секция — всегда синхронизируются с постоянной памятью. Запись критических данных является синхронной операцией, аналогичной транзакциям в СУБД со строгой моделью ACID. Это вызывает задержки — но гарантирует, что при любом сбое ни одно отношение не потеряно, ни одно критическое значение не повреждено.
Некритические данные — внутренние переменные, промежуточные вычисления, кэши — могут существовать только в оперативной памяти и теряться при деактивации узла. При повторной активации они пересчитываются из критических данных.
Традиционная модель: программа живёт в RAM, иногда сохраняется на диск. Модель GNET: NDDI живёт на постоянной памяти, иногда активируется в RAM для вычислений. Постоянная память — источник истины. RAM — кэш.
3. 2. D-компоненты (ДНК узла)
D-компоненты являются первичными — без них NDDI не существует как сущность. Все остальные компоненты (V, A, L, R, B, T, S, N, P, C, W) появляются как результат линковки и запуска D-компонентов.
Природа D-компонента. D-компонент — это скомпилированный объектный код в формате ELF (перемещаемый .o файл). По аналогии с биологией, D-компонент является геном: самостоятельным модулем, который в изоляции является просто записью, но при сборке с другими генами порождает живой организм.
D-компоненты хранятся в двух местах:
-
В узлах-репозиториях. Это специализированные NDDI, содержащие библиотеки D-компонентов — «генофонд» системы. Репозитории являются источником генов для создания новых узлов. OPNT обращается к репозиторию, выбирает нужные D-компоненты и собирает из них новый NDDI.
-
В D-секции конкретного NDDI. После создания узла его D-компоненты хранятся в D-секции на постоянной памяти. Они являются первичным описанием узла, из которого исполняемый код может быть пересобран в любой момент.
Состав D-секции. D-секция NDDI содержит:
-
D-компоненты (гены) — множество объектных ELF-файлов. Каждый реализует определённую функциональность: один ген может отвечать за обработку v-отношений, другой — за вычисление b-вектора, третий — за внутреннюю логику активации. Количество генов определяет сложность узла.
-
Линкер-скрипты (.ld) — правила сборки генов в исполняемый код. Главная функция: фиксация абсолютных адресов LOCN для компонентов с внешними соединителями. Линкер-скрипт указывает компоновщику: «переменная v_component_1 ОБЯЗАНА лежать по адресу 0x00001000». Это гарантирует, что при любой перелинковке внешние соединители партнёров остаются валидными.
-
ELF-таблицы слинкованной программы — таблица символов, таблица глобальных смещений (GOT), таблица перемещений и другие служебные структуры. Необходимы для работы слинкованного кода и для последующей перелинковки.
Линковка. При создании NDDI (или при получении новых D-компонентов через d-отношения) выполняется линковка: компоновщик берёт D-компоненты и линкер-скрипты и собирает исполняемый код. При линковке все ссылки на компоненты с внешними соединителями жёстко привязываются к их абсолютным адресам LOCN.
Перелинковка. При получении нового D-компонента через d-отношение от другого узла, ген добавляется в D-секцию. Перелинковка не происходит немедленно — она выполняется в период неактивности узла (аналог биологического сна и default mode network). Новый код собирается в резервной области, и только при успешной сборке происходит атомарное переключение на новый код. При ошибке сборки — узел продолжает работать на старом коде. Данные (V-компоненты) не затрагиваются — их адреса LOCN фиксированы и сохраняются при перелинковке.
Передача D-компонентов (d-отношение). D-компоненты могут быть переданы от одного NDDI к другому через d-отношение. Это механизм «горизонтального переноса генов». D-отношение всегда использует режим с подтверждением доставки — потеря даже одного байта объектного кода недопустима.
3. 3. V-компоненты (значения)
V-компонент — аналог переменной в архитектуре фон-Неймана, но более сложная структура. V-компонент — это значение, записанное в ячейку памяти, плюс его статусы, соединители и метаданные.
Значение. Числовое значение определённого формата: целое (int32, int64), вещественное (float32, float64), или массив. Формат определяется D-компонентом, создавшим этот V-компонент при линковке.
Статус. V-компонент может находиться в состояниях:
-
Актуальное — значение вычислено и является текущим.
-
Изменённое — значение было обновлено входящим отношением, но ещё не обработано A-компонентом.
-
Неопределённое — значение не инициализировано (после холодного старта).
Изменение статуса на «Изменённое» является триггером для активации A-компонентов.
Соединители. V-компонент может иметь произвольное количество входящих и исходящих соединителей (POCN). Через входящие — узел получает значения от других NDDI. Через исходящие — передаёт своё значение другим. Все соединители V-компонента участвуют только в v-отношениях.
Критичность. V-компонент с хотя бы одним внешним соединителем является критическим: его LOCN фиксирован навсегда, его значение синхронизируется с постоянной памятью. V-компонент без внешних соединителей — некритический.
3. 4. A-компоненты (активности)
A-компонент — пара (event + handler). Event = изменение V-компонента через входящий соединитель. Handler = функция из Code Section. A-компоненты определяют поведение: что узел делает, когда получает новое значение.
Природа A-компонента. A-компонент — это указатель на функцию в исполняемом коде. Когда V-компонент переходит в статус «Изменённое», срабатывает связанный с ним A-компонент: управление передаётся соответствующей функции, которая обрабатывает новое значение, вычисляет результаты и может обновить другие V-компоненты.
Два типа A-компонентов.
A-компоненты разделяются на два типа, определяющих характер выполняемой работы:
Пакет активности (APAK — Activity PAcKage). Блок последовательного кода: одна или несколько инструкций, выполняемых линейно от начала до конца. APAK получает на вход значения V-компонентов, выполняет вычисления и записывает результаты в другие V-компоненты. Аналог: тело функции в C/C++/Rust, блок { ... }, последовательность инструкций процессора. Визуализируется как розовый прямоугольник.
Йота активности (AIOT — Activity IOTa). Логический переход: точка ветвления, которая на основании условия направляет поток выполнения к одному из пакетов. AIOT не выполняет вычислений — она только оценивает условие и выбирает путь. Аналог: if/else, switch/case в C/C++/Rust, условный переход jne/jmp в ассемблере. Визуализируется как желтый шестигранник.
Вместе APAK и AIOT образуют граф выполнения внутри NDDI: пакеты выполняют вычисления, йоты управляют потоком. Это аналог блок-схемы, где прямоугольники — операции, а шестигранники — условные переходы.
Пример: входящее v-отношение записывает новую температуру в V-компонент «sensor_temp». Это событие активирует AIOT, который проверяет: температура выше порога? Если да — управление передаётся APAK «alarm», который обновляет V-компонент «alarm_state» и вызывает отправку по исходящему соединителю. Если нет — управление передаётся APAK «normal», который обновляет V-компонент «status».
Цепочка реакций. Обновление одного V-компонента активирует A-компонент (APAK или AIOT), который может обновить другой V-компонент, что активирует следующий A-компонент — и так далее. Цепочка продолжается до тех пор, пока все обновлённые V-компоненты не будут обработаны. Это аналог распространения возбуждения в нейронной сети.
Исходящие отношения. Если в ходе цепочки реакций обновляется V-компонент, имеющий исходящие соединители, — для каждого соединителя формируется сплайс-дейтаграмма и передаётся в сеть. Внутренняя активность узла порождает сетевые события.
Связь с D-компонентами. Функции, на которые указывают A-компоненты (как APAK, так и AIOT), определены в D-компонентах (генах). При перелинковке A-компоненты обновляются — указатели перенаправляются на новый код. V-компоненты (данные) остаются на своих местах.
3. 5. Минимальный узел: D + V + A
Набор D + V + A является минимально живым узлом. Он способен:
-
Существовать на постоянной памяти (D-секция хранит код)
-
Быть активированным в RAM
-
Принимать входящие v-отношения (значение записывается в V-компонент)
-
Реагировать на изменения (A-компонент обрабатывает новое значение)
-
Передавать результаты по исходящим соединителям (сплайс-дейтаграмма)
Этого достаточно для создания сети уровня SERN — сенсорно-рефлекторной сети, в которой узлы хранят значения и реагируют на входы. Замкнутый цикл «сенсор → обработка → мотор» реализуется цепочкой NDDI, связанных v-отношениями.
Минимальный узел D + V + A — цифровой аналог простейшего нейрона: принял сигнал, обработал, передал. Вся сложность высших уровней появляется через добавление новых D-компонентов — генов, порождающих новые типы компонентов.
3. 6. Компоненты высших уровней
По мере добавления D-компонентов (генов) в D-секцию и перелинковки, в узле появляются компоненты высших уровней. Каждый тип компонента высшего уровня наследует свойства V-компонента (значение + статус + соединители + критичность), но добавляет специфический формат значения и специфический тип отношений.
L-компонент (Location, DOM1). Позиция объекта в пространственной карте MAP1. Значение: вектор координат. L-отношения связывают L-компоненты разных узлов для построения аллоцентрической модели пространства.
R-компонент (Recognition, DOM2). Инвариантное распознавание объекта. Значение: Feature Vector — компактная репрезентация, продукт свёрточной нейросети CNN1. R-отношения передают Feature Vectors между узлами.
T-компонент (Target, DOM3). Целевое состояние объекта. Значение: координаты или параметры целевого состояния. T-отношения связывают узлы в контексте целеполагания.
B-компонент (Behavior, DOM3). Вектор сплайса физического уровня (b-вектор). Значение: пара состояний — начальное и целевое. B-отношения передают поведенческие импульсы — направленные изменения в физическом пространстве.
S-компонент (Symbolic, DOM6). Символьный компонент без пространственной привязки. Значение: вектор в семантическом пространстве, продукт свёрточной нейросети CNN2. S-отношения связывают символы между узлами.
N-компонент (Narrative, DOM8). Нарративная структура. Значение: элемент графа триад KLEN. N-отношения передают нарративные структуры между узлами.
P-компонент (Predicate, DOM8). Предикативный вектор сплайса символьного уровня. Значение: идентификатор триады KLEN + вес отношения. P-отношения устанавливают семантические связи между символами.
C-компонент (Concept, DOMA). Понятие. Значение: вектор в пространстве MAPA, продукт свёрточной нейросети CNN3. C-отношения передают Понятия между узлами.
W-компонент (Widerspruch, DOMB). Вектор противоречия. Значение: расстояние между двумя C-компонентами (C_есть → C_должно). W-отношения передают мотивационные импульсы.
Каждый тип компонента участвует только в отношениях своего типа. Это строгая типизация: сплайс-дейтаграмма содержит тип отношения, и принимающая сторона проверяет соответствие типа пакета и типа целевого компонента.
3. 7. Соединители (POCN)
Соединитель (POCN — Point Of CoNnection) — структура данных, обеспечивающая участие компонента в отношении с другим узлом. Визуально соединитель представляется как штырёк (исходящий) или розетка (входящий) на теле компонента.
Каждый соединитель является отдельной структурой данных с собственным LOCN и содержит:
Поле |
Размер |
Описание |
32 бит |
Собственный адрес соединителя. Фиксирован навсегда. |
|
Контр-имя: UNON |
64 бит |
Глобальное имя узла-партнёра |
Контр-имя: LOCN |
32 бит |
Адрес компонента/соединителя партнёра |
Тип отношения |
16 бит |
Наследуется от компонента (v, l, d, r, b, s, n, p, c, w) |
Режим доставки |
8 бит |
С подтверждением / без подтверждения |
Шифрование |
8 бит |
Нет / симметричное / асимметричное |
Ключ |
переменный |
Ключ шифрования (если применимо) |
Динамическое создание. Соединители создаются при жизни узла через протокол SYGN (Глава 4). Новый соединитель — новый «синапс»: создаётся структура данных, назначается LOCN, прописывается контр-имя.
Направленность. Соединитель является либо входящим (розетка — принимает значения), либо исходящим (штырёк — передаёт значения). Одно отношение между двумя узлами состоит из исходящего соединителя на одной стороне и входящего на другой. Для двунаправленного обмена необходимы два отношения.
Множественность. Один компонент может иметь произвольное количество соединителей. V-компонент с тремя исходящими соединителями передаёт своё значение трём разным узлам одновременно. V-компонент с пятью входящими — принимает значения от пяти источников.
Критичность. Все соединители являются критическими данными: их LOCN фиксирован, их контр-имена сохраняются на постоянной памяти. Потеря соединителя означает разрыв отношения.
Механизм передачи. При срабатывании компонента (изменении его значения), код узла перебирает все исходящие соединители данного компонента и для каждого формирует сплайс-дейтаграмму, содержащую контр-имя (UNON+LOCN партнёра) и новое значение. Сплайс-дейтаграмма передаётся системе маршрутизации, которая определяет уровень доставки (G1/G2/G3) и отправляет пакет.
Аналогия: компонент — нейрон. Соединители — синапсы. Один нейрон может иметь тысячи синапсов, каждый ведущий к другому нейрону. При возбуждении нейрона сигнал передаётся по всем синапсам одновременно.
3. 8. Сенсорные и эффекторные компоненты
Некоторые NDDI содержат компоненты, связанные не с другими узлами через соединители, а с физическими устройствами.
Сенсорный компонент — V-компонент, значение которого определяется не входящим отношением, а физическим сигналом: свет, звук, давление, температура, напряжение. Сенсорный компонент является входной точкой сети GNET: физическая реальность попадает в сеть через значения сенсорных компонентов.
Эффекторный компонент — V-компонент, изменение значения которого приводит не к формированию сплайс-дейтаграммы, а к физическому воздействию: движение мотора, генерация звука, изменение напряжения. Эффекторный компонент является выходной точкой сети.
На уровне спецификации GNET сенсорные и эффекторные компоненты неотличимы от обычных V-компонентов. Другие узлы видят только UNON+LOCN и тип компонента. Различие существует только на уровне платформы GATE, где конкретные LOCN привязаны к аппаратным регистрам.
3. 9. Грани многогранника
Для визуализации NDDI используется метафора многогранника. Каждая грань содержит компоненты одного типа:
-
D-грань — D-компоненты (код, гены, линкер-скрипты)
-
V-грань — V-компоненты (значения)
-
A-грань — A-компоненты (активности)
-
L-грань — L-компоненты (позиции)
-
R-грань — R-компоненты (распознавание)
-
T-грань — T-компоненты (цели)
-
B-грань — B-компоненты (поведение)
-
S-грань — S-компоненты (символы)
-
N-грань — N-компоненты (нарративы)
-
P-грань — P-компоненты (предикаты)
-
C-грань — C-компоненты (понятия)
-
W-грань — W-компоненты (противоречия)
Соединители визуализируются как штырьки и розетки на теле компонентов, выступающие за поверхность грани. Отношение между двумя узлами — провод, соединяющий штырёк одного узла с розеткой другого.
Для куба — одновременно видны три грани, чего достаточно в большинстве случаев для отображения основных типов компонентов. Для более сложных узлов могут использоваться многогранники с большим числом граней.
Визуализация является инструментом разработки и отладки, а не частью спецификации GNET.
3. 10. Жизненный цикл NDDI
Создание. NDDI создаётся операционной сетью (OPNT). OPNT выбирает D-компоненты из узла-репозитория, собирает D-секцию, инициирует создание узла на платформе GATE. Платформа назначает GANN, выполняет линковку D-компонентов, размещает узел на постоянной памяти. OPNT устанавливает начальные отношения через SYGN.
Активность. При поступлении входящего отношения на узел, находящийся в неактивном состоянии, платформа GATE активирует узел в оперативной памяти: загружает код и критические данные, передаёт полученное значение в целевой компонент, запускает цепочку реакций A-компонентов. После завершения обработки узел может оставаться активным (если ожидаются новые отношения) или быть деактивирован.
Деактивация. При отсутствии активности платформа GATE может деактивировать узел: критические данные уже на постоянной памяти (синхронизированы по ACID), некритические данные могут быть отброшены, код не нужно сохранять (он собирается из D-секции). При повторной активации — код перелинковывается из D-секции, критические данные загружаются с постоянной памяти.
Перелинковка (эволюция). При получении нового D-компонента через d-отношение, ген добавляется в D-секцию. Перелинковка выполняется в период неактивности. Новый код собирается в резервной области. При успешной сборке — атомарное переключение на новый код. При ошибке — узел сохраняет старый код. Данные не затрагиваются: адреса LOCN фиксированы и сохраняются при перелинковке.
Перелинковка в период неактивности — аналог биологического сна и default mode network. Система накапливает новые D-компоненты в течение активного периода и перестраивает свою архитектуру в период покоя. «Утро вечера мудренее» — потому что за ночь D-секция была перелинкована.
Неудаляемость. NDDI не может быть удалён обычным способом. Удаление возможно только привилегированным администратором (ANOD) в исключительных случаях и сопровождается уведомлением всех узлов, имеющих соединители к удаляемому NDDI, для корректного разрыва отношений.
3. 11. Переход к Главе 4
Настоящая глава определила внутреннюю структуру NDDI: компоненты как элементарные единицы узла, D-компоненты как первичные (создающие NDDI как сущность), V и A как минимальный набор для живого узла, компоненты высших уровней, соединители как точки участия в отношениях, персистентность как базовое свойство.
Глава 3 определяет формат сплайс-дейтаграммы — пакета, реализующего отношение между узлами — и детальную спецификацию каждого типа отношений.
Содержание
