Эд Нерский – Инженер 2.1 (страница 106)
Рассуждал я так: Ему понадобится память, он возьмёт любой из доступных кусков и… внезапно получит исключение. При этом у него под рукой теперь есть две ассемблерные инструкции для выделения и освобождения памяти. Попав в жёсткие рамки ограничивающие его в доступе к такому важному ресурсу, он перепробует различные варианты, в том числе и эти инструкции.
Дальше это или приведёт его к тому, что он перестроится на их использование, либо он умрёт. О его состоянии я могу судить по цвету его ауры, если что, то смогу отключить систему защиты, не давая ему умереть.
Пока я возился со всем этим, Этера и Косм написали простенький дизассемблер и перевели все программы, написанные нами в кодах в текстовый формат. Теперь мы можем вносить в них изменения.
Я периодически включал и выключал систему защиты памяти, но почему-то Вектрон никак не мог придти к тому, что для работы с памятью ему нужно использовать специально предназначенные для этого инструкции.
Выход из ситуации мне подсказала Этера.
— Если это маг, то…
— Он точно маг, ты же видела! — перебил я её.
— Если это маг, то он должен быть как-то связан и с астралом. Наши учёные считают, что астрал всегда отражает всю существующую в мире информацию.
— И что ты предлагаешь?
— Я думаю, что можно подсказать ему, собрав для него какую-то астральную картинку.
— Хгм… — сказал я, и мы стали пробовать.
Я представил Вектрона как этакого червячка, питающегося памятью. У червячка внутри было много органов, но все они состояли из наших процессоров. Вокруг Вектрона была питательная среда, которая могла поглощаться нашими процессорами.
Иногда эта среда становилась токсичной и кушать её можно было через одну инструкцию, а выводить отходы жизнедеятельности — через другую.
Мы нарисовали несколько страшных картинок о том, что будет, если не выводить отходы, надеясь, что помимо запросов на выделение памяти, от него будут приходить и запросы на её освобождение.
Проделав эту работу, мы вернулись к экспериментам.
Пока что, при включении аппаратной защиты памяти между метками процессов, никакой возможности обхода её нет. Когда у меня будет операционная система, то какой-никакой супервизор мне понадобится, но сейчас, пока мы занимаемся помещением Вектрона в клетку, я специально не стал реализовывать эту возможность, чтобы он случайно не нашёл иную дорогу, чем мне требуется.
Включая защиту, мы смотрели на то, как аура Вектрона плавно становится из зелёной жёлтой, потом краснеет, а потом защиту приходилось отключать.
Чего-то не хватало, но мы не понимали чего. Выключив генератор у Орион-128, я исследовал процессы Вектрона и убедился, что астральные картинки помогли и какое-то количество памяти, запрошенное правильным способом у него есть. Но полностью переходить на её использование он почему-то не хотел.
Поняв, что мне очень неудобно наблюдать за процессом выделения памяти, я добавил несколько аппаратных индикаторов и запустил программу их размножения.
Это часто так бывает: пока у тебя нет системы мониторинга, то у тебя ничего не получается, а когда она появляется, то всё начинает работать так, что она вроде как и не нужна.
Когда у нас появилась аппаратная индикация кто сколько памяти использует, то при первом же включении защиты памяти, аура Вектрона чуть пожелтела, а затем вернулась к привычному голубовато-зелёному цвету.
— У него получилось? — удивилась Эт.
— Похоже, что да. — прошептал я.
Я оценил расходы Вектрона на себя: ему и нужно-то было всего около десятка миллиардов ячеек памяти, да от десятка до миллиарда процессоров.
Моя система пока ограничивает только перекрёстное использование памяти, но не вводит какие-либо квоты.
На всё это заборостроение между нашей и Вектрона памятью мы убили около трёх месяцев времени.
Руки к небу!
Где-то в самом начале этого пути, я пришёл к тому, что программирование на ассемблере — это очень сложно и решил, что нам нужен другой язык программирования. Более высокого уровня. Но написать на ассемблере компилятор языка высокого уровня — это крайне сложная задача.
Я долго не решался подступиться к ней: даже простой язык, вроде какого-нибудь Lua выглядел, как нечто неподъёмное. А однажды меня осенило: LISP! Этот язык считается одним из самых мощных в мире не только потому, что абсолютно все современные технологии пришли из него, но и потому, что базовый его интерпретатор очень простой, поскольку весь его синтаксис базируется на одинаковых s-выражениях.
В моём мире когда-то даже устраивали соревнования: кто напишет самый короткий интерпретатор LISP и победители укладывались в несколько десятков строк. В общем, похоже пришла, наконец, и моя очередь поучаствовать в этом процессе и, засев за реализацию односвязных списков, я реализовал очередной диалект этого языка. Я не помнил до конца, какой набор функций является для этого языка минимальным, впрочем, это не является принципиальным.
В результате моих усилий, Орион-128 стал включать в себя средства разработки на трёх языках:
LISP — для реализации программ общего назначения;
Ассемблер;
и Shell — язык командной строки. Не мудрствуя лукаво, я реализовал три традиционных потока для данных: вход, выход и ошибки, а затем, на базе терминала сделал простой командный интерфейс: вводишь имя файла, запускается программа с введённым именем. В качестве shell я развиваю диалект языка, очень похожий на bash.
Попутно со всеми этими занятиями, мы разбирались с вопросами открытия дополнительных сознаний. В результате, мы довольно далеко продвинулись в исследовании этого вопроса. Ещё раньше я установил, что если человек хочет открыть в себе новое сознание, то он должен выполнять умственные упражнения, вроде “рассматривания вещи или проблемы с разных сторон”.
Теперь же, дополнительно нам удалось выяснить, что, выделив одно сознание под такие упражнения, можно открыть третье, четвёртое сознания и так далее. Есть ли тут какие-то ограничения пока непонятно.
Мы открыли у Косма и у Эт по четыре сознания и решили на этом пока остановиться. “Хорошо, но хорошего не до слёз.” — вспомнил я старую пословицу.
Успешное строительство забора между нашим софтом и Вектрона привело нас в себя. Мы вдруг задумались: “А зачем мы здесь находимся?”. А ведь на эти острова мы прибыли, чтобы посадить Космика, а не для того, чтобы без остановки заниматься своими делами! А ещё ведь есть и более важная цель — эльфы!
В общем, в один прекрасный момент, я понял, что если мы не вернёмся к делам сейчас, то не вернёмся уже никогда. Волевым усилием я отложил в сторону возню с переменными окружения процессов нашего, уже вырисовывающегося на горизонте, UNIX и вскочил, доставая зёрнышко Космика из кармана.
— Ну всё, пора! — сказал я. — Пришло время тебя прорастить!
— Я останусь один?
— Ты же умеешь приходить в наше убежище, кроме того, доступ к Орион-128 у тебя тоже есть. Чат, что мы сделали, пока не очень удобный, но его достаточно, чтобы гарантировать, что в астрале ты общаешься не со своим представлением, а с кем-то из нас. Какая тебе разница: лежишь ты в моём кармане или растёшь здесь?
— Нам нужно двигаться дальше. — подтвердила Эт, — засиделись мы здесь!
Решительным движением я скатился с кровати на песок, уложил зёрнышко кмэла в небольшую ямку, а потом чуть присыпал его сверху. Почему-то я знал, что искать хорошую почву для него совершенно необязательно.
— Подождите, мы не попрощались! — прислал жалобную мысль Косм.
— Прощаются, когда расстаются. — строго сказал я. — А мы не расстаёмся, и не собираемся это делать!
Прилетел мой конструкт, собиравший и хранящий синеву, и я, продолжая всё тот же порыв, перелил все его запасы в Космика.
— Нужно было уйти подальше от берега. — задумчиво сказала Эт.
— Хм… И правда. — сказал я. — Пока ничего не происходит, может ещё успеем?
Я зачерпнул в ладони горсть песка вместе с зёрнышком, встал и мы начали удаляться вглубь острова. Поскольку ничего не происходило, мы шли довольно спокойным шагом, не спеша. А потом, я вдруг понял, что … не чувствую свои руки!
— Косм, остановись! — попросил я. — Это ведь моё тело!
Косм не отвечал. Он не был без сознания: я чувствовал его мысли, но в них был хаос. Я попытался навести в нём порядок, но у меня не особо получалось. Выглядело так, будто Косм занят попыткой открыть ещё одно сознание и для этого разбирается с форматом хранения строк в Орион-128.
На горке песка, лежащей на моих ладонях, показался маленький зелёный росток. Будто маленькие ручонки, он тянул два лепестка к небу, к свету.
Я хотел было положить его на землю но не мог. Мои руки парализовало, паралич плавно продвигался от них через плечи в остальное тело.
— Этера, помогай! — закричал я мысленно.
Она не нашла ничего лучше, чем ударить меня по рукам, выбив и сбросив на землю мою ношу. Песок осыпался, я мельком увидел свои руки: почему-то они были в крови.
Моё тело потеряло всякую чувствительность и я начал заваливаться вперёд. Пытаясь удержать меня или хотя бы сместить траекторию моего падения в сторону от Косма, Эт подставила под меня плечо. Что было дальше память моя не сохранила, сознания мои выключились.
Часть 14. Вершина
Путь в пирамиды
— Ваше величество, вы не должны рисковать жизнью, вам лучше остаться в Цехине!