Knigi-for.me

Проект «Сфера-82»: Цвет и слой - Станислав Миков

Тут можно читать бесплатно Проект «Сфера-82»: Цвет и слой - Станислав Миков. Жанр: Альтернативная история издательство , год . Так же Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте knigi-for.me (knigi for me) или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
лицо его расплылось в широкой, облегченной ухмылке. Модульность спасала его от написания двух разных веток системы.

— Блестяще, — выдохнул программист, возвращаясь к распечаткам. — Пусть городят в своих платах что хотят. Главное, что ядро останется чистым.

Алексей сел на стул. Единого монолита из «Сферы» больше не было, но и распада на несовместимые острова не случилось. Появилась система шлюзов. Тяжелая, бюрократическая, требующая кучи подписей, но она давала гражданской машине законное право на жизнь. Закрытая комната «82В» осталась позади, подчинившись общим правилам.

Глава 27

Кофейная: как написать слой

Громов постучал тупым концом карандаша по колонке цифр. Широкая простыня распечатки с результатами утренней трансляции занимала половину выцветшего канцелярского стола. Рядом с перфолентой лежала распечатка Ланской и набросанная от руки карта адресного пространства «Сферы-82».

В бывшей кладовке, заставленной тяжелыми стеллажами из стального уголка, густо пахло свежемолотым зерном. Ручная мельница примостилась на самом краю столешницы. Морозов налил себе кофе. Громов плеснул в кружку молока — стеклянная бутылка как раз согрелась в эмалированном ковшике с горячей водой.

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

Громов с нажимом обвел итоговую сумму.

— Шесть байт на каждое прямое обращение к массиву. Восемь байт на элементарный сдвиг указателя, — Громов ткнул пальцем в колонку ассемблерного листинга, который компилятор выдал на экран. — Смотри сюда. Транслятор языка Си писался под архитектуры, которые умеют аппаратно работать со структурами. А наш К580 этого не умеет, у него нет базово-индексной адресации. Чтобы сдвинуть указатель на следующий прямоугольник, твой хваленый компилятор не использует простую команду инкремента. Он кидает адреса в стек, делает вызов внешней арифметической подпрограммы, вычисляет смещение, потом вытаскивает результат обратно…

Громов раздраженно отпил молока.

— Программа переводит твой синтаксис, но если я пущу этот сгенерированный код в плотный цикл на проверку десяти тысяч пересечений, процессор просто захлебнется в пересылках стека. Машина встанет колом.

Морозов сделал глоток. Кофе получился отличным — крепким, без малейшей горечи.

— Зато этот текст скомпилировался за две минуты, и логика проверки прозрачна как стекло, — парировал Алексей. — Женя, мы не можем писать весь «СЛОЙ» на чистом ассемблере, мы утонем в отладке. Правило простое: мы пишем общую структуру на Си. Ищем узкое место — ту самую функцию, которая сжирает девяносто процентов времени на пересечениях. И вот ее, одну-единственную, ты переписываешь вручную на идеальном ассемблере, подменяя стандартную библиотеку компилятора.

Громов нахмурился, обдумывая этот подход. Комбинирование языков было не самой привычной практикой, но оно решало проблему сроков.

— Допустим. Вынесем математику пересечений в ассемблерный модуль. Но оперативной памяти он нам не прибавит.

— Значит, новые машины надо собирать сразу с полным адресным полем, — сказал Морозов. — Выжимать все шестьдесят четыре килобайта.

— Текущий живой стенд работает на тридцати двух, — напомнил Громов. — Новая полная карта — это дополнительные банки памяти, старшие адресные линии, усложненная дешифрация и увеличенная нагрузка на шину. Нам нужна абсолютная стабильность и одинаковость всех новых плат. Транслятор генерирует объемный код, а мы еще ни одной координаты с гибкого диска не считали. А дисковод ИЗОТ, между прочим, читает сектора не со скоростью света.

— Файл Каца придется читать порциями, — Алексей поставил кружку на стол.

— Файл Каца — это просто свалка координат, — отрезал Громов. — Чтобы читать его порциями по оси X, как ты хочешь, данные должны быть отсортированы слева направо. А топологи так не рисуют. Значит, до твоей красивой проверки на Си мне придется написать грубый сортировщик. Она будет заглатывать сырой массив с дискеты, сортировать прямоугольники в памяти и писать обратно на диск временные файлы. Мы упремся в физику магнитных головок.

Морозов кивнул, признавая проблему.

— Си удобен для описания структур данных, таблиц и общей логики, Женя. Нам проще оперировать терминами: слой, зазор, контактная площадка. Язык берет на себя рутину: мы видим размер записи и обращаемся по указателям, не высчитывая физическое смещение адреса в уме.

Громов скрестил руки на груди.

— Критичные участки, буферы, побайтовый ввод-вывод — это ассемблер, — подтвердил Морозов. — Куски, где важен каждый байт. Но общая структура «СЛОЯ» и форматы обмена остаются на Си.

— На бумаге всё выглядит красиво: общая логика на Си, узкие места на ассемблере, — протянул Громов. — А неприятности начнутся на стыке. Там, где пойдут вызовы функций, работа с памятью и соглашения о передаче параметров.

Морозов придвинул к себе распечатку Ланской. Страница пестрела карандашными эскизами печатных проводников. На мелкой сетке миллиметровки пересекались два прямоугольника.

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

Он вывел на полях цифры «0,20».

— Плюс технологический запас на боковое подтравливание меди в ванне, — добавил он. — Три сотых. Итого — ноль двадцать три.

Морозов записал сумму рядом с эскизом.

— Нам нужно превратить это правило в числовую таблицу, — Морозов перевернул страницу. Ручка заскользила по бумаге, выстраивая колонки. — Первый байт — номер слоя. Второй байт — код проводимой проверки: замыкание, обрыв или нарушение зазора.

Громов наклонился ближе к столу.

— Дальше переводим миллиметры в целые единицы координатной сетки, — диктовал Морозов. — Дробная арифметика здесь не нужна. Это еще два байта.

— Четыре, — подсчитал Громов.

— Один байт на запас по травлению. Один байт — битовая маска свойств: флаг метки совмещения, признак контакта, маркер цепи питания.

— Шесть.

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

— Восемь байт на запись, — прикинул в уме Громов. — Тысяча правил уложится в восемь килобайт ОЗУ.

— Именно.

— Вполне приемлемо, — кивнул Громов. — Но это статический справочник. В реальной работе мы получим стопку гибких дисков с десятками тысяч координат. Причем мы понятия не имеем, в каком порядке зеленоградские операторы вбивали эти отрезки.

Он придвинул к себе чистый лист.

— Потребуется первый проход. Считываем текстовый файл построчно. Номер слоя, координаты, контрольное число. Мой модуль сверяет арифметическую сумму кодов с числом Каца. Это гарантирует только то,


Станислав Миков читать все книги автора по порядку

Станислав Миков - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-for.me.

Все материалы на сайте размещаются его пользователями.
Администратор сайта не несёт ответственности за действия пользователей сайта..
Вы можете направить вашу жалобу на почту knigi.for.me@yandex.ru или заполнить форму обратной связи.