Инженер 2.1
Шрифт:
Решив начать с символов размером около одного сантиметра, я смог нарисовать около трёхсот их штук по самой большой окружности вокруг себя.
Первый, созданный нами шрифт, был аляповат, некрасив. Некоторые линии, из которых состояли буквы, были избыточно тонкие или наоборот — жирные. Этера и Косм всё время порывались его переделать, но я останавливал их: впереди ещё такое количество работы, что подобные мелочи можно отложить на более позднее время. Текст получается разборчивым и ладно!
К концу пятого дня, когда плетение репликации
Чтобы двигаться дальше, мне нужна файловая система. Файл — это единица, инкапсулирующая в себе какой-то связанный набор данных.
Замкнутый круг: мне нужны файлы, чтобы хранить в них программы, а чтобы их реализовать мне нужно написать программу, поддерживающую файлы.
В общем, я пришёл к тому, что уже пора заняться операционной системой. В моём случае, поскольку очень большое количество её функций поддержано аппаратурой, операционная система представляет пока что просто список функций, которые может вызывать кто угодно. О пользователях я решил подумать попозже.
Первая функция, которую я сделал — выделение памяти по запросу от программы. Чтобы не возиться со сложными алгоритмами, я выбрал самую простую систему аллокации: слаб-аллокатор. Изначально, вся память всего компьютера размещается в одном слаб-блоке. Когда пользователь запрашивает кусок, то первый найденный свободный блок делится на два до тех пор, пока такие деления можно производить. Затем один из полученных блоков возвращается пользователю. При освобождении памяти, смежные пары слаб-блоков объединяются в более крупные, если оказываются свободными.
Всё использованное — это, разумеется, неидеальные решения, но проблема в том, чтобы вырваться из замкнутого круга написания программ в кодах, мне нужно набрать некую критическую массу решённых задач. Приходится пока приносить жертвы в угоду простоте реализации.
Со всей этой вознёй я составляю список аппаратных доработок, который я планирую доделать в первую очередь: аппаратная поддержка примитивов синхронизации, аппаратная поддержка системы выделения памяти без блокировок и так далее.
В результате, к десятому дню от запуска программы репликации, когда компьютер построил уже около семидесяти слоёв CPU, я доделал наконец функции управления памятью и реализовал простейшую базу данных: ключ-значение. Ключ — это имя файла или каталога, а значение — это его содержимое. Если в записи хранится каталог, то содержимое это такая же база данных.
В таком, радикально упрощённом, виде у меня появилась файловая система. Производительность её крайне мала, поскольку и для выделения памяти и для работы с именами используются блокировки, но пользователей пока очень мало и для старта нас всё это устроит.
В ходе всех этих работ, а так же наших с ним занятий, у Косма
К пятнадцатому дню от запуска проекта мы занимались созданием интерактивного терминала, показывающего текстовые файлы на виртуальном экране. Находясь в состоянии глубокого погружения в Суть и астрал, мы мало обращали внимание на то, что происходит вокруг и, возможно, если бы мой Драко не пожаловался на происходящее, так бы и погибли.
— Драко говорит, что ему не хватает энергии. — сообщил я Эт, глядя в терминал.
— Ну и что? Возьми из Сути! — буркнула она, пытаясь наладить обратную связь между положением виртуального курсора на экране и мысленным управляющим воздействием.
— Кажись мы вляпались. — пожаловался я. — Не получается остановить процесс!
— Что-о? — воскликнула Эт и тоже выскочила в обычную реальность.
Мы валялись на нашей кровати, а рядом с нами висело Оно. Чёрное, втягивающее в себя всё вокруг, нечто. Это нечто пожирало энергию из окружающей среды, висело почти рядом с нами и, кстати, оно уже сожрало крышу нашего импровизированного домика.
— Не останавливается! — сокрушённо повторил я ещё раз.
— Это что, врата? Как они здесь оказались? — спросила Эт.
— Нет, это наш компьютер. — ответил я, продолжая попытки остановить процесс репликации.
— А что с ним происходит?
— Он растёт, но ему не хватает энергии Сути. Получается, что он начал забирать её из окружающего пространства. Похоже, эльфы не смогут уничтожить Рею! — мрачно пошутил я.
— Почему?
— Потому, что её уничтожим мы. 2 в 92 степени ядер делают новые ядра. Через три с половиной часа их количество удвоится. Через семь часов — учетверится. Думаю, что если процесс не остановить, то планета ухнет в эту чёрную дыру уже к сегодняшнему вечеру.
Я считал, что в Сути бесконечное количество энергии, а оказалось это не так. Когда мы исчерпали энергию Сути поблизости от Орион-128, то он стал забирать её и из нашего пространства.
Вот так вот могло бы выглядеть уничтожение Реи эльфами.
— Что делать?
— Пытаться остановить его!
Я написал программу, проходящую по списку занятых процессоров, останавливающую их работу и перезапускающую себя. Таким образом, программа размножения сигнала “стоп” стала распространяться по ядрам.
— Почему ты такой спокойный?
— Драко удаляет адреналин. Без этого у меня не получалось даже вздохнуть, так страшно стало! — ответил я. — Так! Получается, агрессивность распространения программы репликации значительно выше, чем программы “стоп”, ещё бы: репликацией занимается два в девяносто второй степени процессоров!
Эт, — попросил я, продолжая попытки обуздать происходящее, — погода теперь позволяет, ты пока наведи телескоп на острова Косма, здесь уже скоро всё будет в чёрной дыре. Прыгнем и будем пытаться остановить это оттуда.