Выбрать главу

Выждав когда у Вектрона будет период спокойствия, я просто взял и включил построенную систему защиты памяти, основанную на метках процессов. Сейчас этих меток всего две: 1 — Мои программы, 2 — Вектрон. Включив защиту памяти, я стал внимательно наблюдать за его аурой.

Рассуждал я так: Ему понадобится память, он возьмёт любой из доступных кусков и… внезапно получит исключение. При этом у него под рукой теперь есть две ассемблерные инструкции для выделения и освобождения памяти. Попав в жёсткие рамки ограничивающие его в доступе к такому важному ресурсу, он перепробует различные варианты, в том числе и эти инструкции.

Дальше это или приведёт его к тому, что он перестроится на их использование, либо он умрёт. О его состоянии я могу судить по цвету его ауры, если что, то смогу отключить систему защиты, не давая ему умереть.

Пока я возился со всем этим, Этера и Косм написали простенький дизассемблер и перевели все программы, написанные нами в кодах в текстовый формат. Теперь мы можем вносить в них изменения.

Я периодически включал и выключал систему защиты памяти, но почему-то Вектрон никак не мог придти к тому, что для работы с памятью ему нужно использовать специально предназначенные для этого инструкции.

Выход из ситуации мне подсказала Этера.

— Если это маг, то…

— Он точно маг, ты же видела! — перебил я её.

— Если это маг, то он должен быть как-то связан и с астралом. Наши учёные считают, что астрал всегда отражает всю существующую в мире информацию.

— И что ты предлагаешь?

— Я думаю, что можно подсказать ему, собрав для него какую-то астральную картинку.

— Хгм… — сказал я, и мы стали пробовать.

Я представил Вектрона как этакого червячка, питающегося памятью. У червячка внутри было много органов, но все они состояли из наших процессоров. Вокруг Вектрона была питательная среда, которая могла поглощаться нашими процессорами.

Иногда эта среда становилась токсичной и кушать её можно было через одну инструкцию, а выводить отходы жизнедеятельности — через другую.

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

Проделав эту работу, мы вернулись к экспериментам.

Пока что, при включении аппаратной защиты памяти между метками процессов, никакой возможности обхода её нет. Когда у меня будет операционная система, то какой-никакой супервизор мне понадобится, но сейчас, пока мы занимаемся помещением Вектрона в клетку, я специально не стал реализовывать эту возможность, чтобы он случайно не нашёл иную дорогу, чем мне требуется.

Включая защиту, мы смотрели на то, как аура Вектрона плавно становится из зелёной жёлтой, потом краснеет, а потом защиту приходилось отключать.

Чего-то не хватало, но мы не понимали чего. Выключив генератор у Орион-128, я исследовал процессы Вектрона и убедился, что астральные картинки помогли и какое-то количество памяти, запрошенное правильным способом у него есть. Но полностью переходить на её использование он почему-то не хотел.

Поняв, что мне очень неудобно наблюдать за процессом выделения памяти, я добавил несколько аппаратных индикаторов и запустил программу их размножения.

Это часто так бывает: пока у тебя нет системы мониторинга, то у тебя ничего не получается, а когда она появляется, то всё начинает работать так, что она вроде как и не нужна.

Когда у нас появилась аппаратная индикация кто сколько памяти использует, то при первом же включении защиты памяти, аура Вектрона чуть пожелтела, а затем вернулась к привычному голубовато-зелёному цвету.

— У него получилось? — удивилась Эт.

— Похоже, что да. — прошептал я.

Я оценил расходы Вектрона на себя: ему и нужно-то было всего около десятка миллиардов ячеек памяти, да от десятка до миллиарда процессоров.

Моя система пока ограничивает только перекрёстное использование памяти, но не вводит какие-либо квоты.

На всё это заборостроение между нашей и Вектрона памятью мы убили около трёх месяцев времени.

Руки к небу!

Где-то в самом начале этого пути, я пришёл к тому, что программирование на ассемблере — это очень сложно и решил, что нам нужен другой язык программирования. Более высокого уровня. Но написать на ассемблере компилятор языка высокого уровня — это крайне сложная задача.

Я долго не решался подступиться к ней: даже простой язык, вроде какого-нибудь Lua выглядел, как нечто неподъёмное. А однажды меня осенило: LISP! Этот язык считается одним из самых мощных в мире не только потому, что абсолютно все современные технологии пришли из него, но и потому, что базовый его интерпретатор очень простой, поскольку весь его синтаксис базируется на одинаковых s-выражениях.