Недавно мне попался модуль трансформаторного постоянного запоминающего устройства (Transformer Read‑Only Storage, TROS), в котором хранился микрокод мейнфрейма IBM System/360.
Эта необычная система памяти использовала стопку майларовых плёнок, на которых было закодировано 15 360 бит, или 1920 байт. По современным меркам объём просто смехотворный. Но в 1964 году1 полупроводниковых микросхем ПЗУ ещё не существовало, поэтому хранить данные на майларовых плёнках было вполне разумным решением.
В этой статье я расскажу, как работал модуль TROS и какую роль он сыграл в успехе IBM System/360.
Как работала TROS: трансформаторы и импульсы тока
На схеме ниже показан принцип работы TROS на упрощённом примере: два слова по три бита.
У каждого из трёх трансформаторов (квадратных колец на схеме) есть считывающая обмотка, которая формирует сигнал для одного выходного бита.
Каждому слову (A или B) соответствует своя линия возбуждения. Она проходит:
Через трансформатор, если нужно записать бит
1.В обход трансформатора, если бит должен быть равен
0.
На схеме линия возбуждения B (красная) активируется импульсом тока. В результате во втором и третьем трансформаторах возникают импульсы считывания (синие), формируя для слова B битовую последовательность 011. А расположение проводников для слова A позволяет получить последовательность 101.
Чтобы хранить больше слов, достаточно добавить новые линии возбуждения, по одной на каждое слово, пропуская их через трансформаторы или в обход них.
Таким способом можно закодировать любую комбинацию битов: всё зависит от того, как проложена линия возбуждения.

В настоящем модуле TROS было 60 трансформаторов и 256 линий возбуждения, что позволяло хранить 256 слов по 60 бит.
Вручную продевать 256 проводов через трансформаторы было бы непросто, поэтому разработчики TROS придумали изящное решение, которое упрощало сборку и изменение схемы соединений.
Проводящие дорожки наносили на майларовые плёнки (их называли лентами). По сути, получалась гибкая печатная плата.
На каждой плёнке располагались две проводящие петли, называемые линиями выбора слова. В зависимости от того, как они проходили относительно трансформаторов — через них или в обход, — задавались значения битов.
Таким образом, 128 майларовых плёнок обеспечивали соединения для 256 слов.

Майларовые плёнки укладывались стопкой на 60 трансформаторов, как показано ниже.
Каждый трансформатор имел U‑образный сердечник, обе стороны которого проходили через стопку из 128 плёнок. Благодаря такой конструкции проводники можно было легко провести через трансформаторы или в обход них, не продевая каждый провод по отдельности.

После сборки стопки на каждую U‑образную часть сердечника устанавливали I‑образную перемычку, замыкая магнитопровод трансформатора.
Вокруг каждой перемычки многократно наматывали провод считывающей обмотки (красноватые провода на изображении ниже), которая улавливала выходной сигнал. Каждая линия считывания подключалась к усилителю считывания, который обнаруживал сигнал.
В результате на выходе формировалось 60-битное слово.
В моём модуле TROS I‑образные перемычки и линии считывания отсутствуют, но их можно увидеть на фотографии другого модуля ниже.

Данные на майларовых плёнках кодировали, пробивая отверстия в проводящих дорожках и тем самым разрывая ненужные соединения.
На фотографии ниже показан крупный план одной из плёнок. Видны нанесённые на неё проводящие дорожки, большие квадратные отверстия для сердечников трансформаторов и маленькие круглые отверстия, пробитые в линиях выбора слова.
Схема справа показывает, как расположение отверстий определяет путь проводников. На каждой плёнке есть две линии выбора слова (красная и зелёная), которые проходят либо через трансформаторы (серые прямоугольники), либо в обход них.

Чтобы считать одно из 256 слов, на одну из линий выбора слова (проводящую петлю) определённой майларовой плёнки подавали импульс тока.
Самым очевидным решением было бы использовать 256 драйверов токовых импульсов, выбирая нужный по битам адреса. Но такое количество аппаратуры обошлось бы слишком дорого.
Поэтому в TROS применили матричную схему выбора.
Все 256 линий выбора слова логически объединены в матрицу 16 × 16. Адрес делится на две половины, каждая из которых дешифрируется для выбора одной из 16 линий.
В результате импульс тока поступает только на ту линию выбора слова, которая выбрана с обоих концов.2

Каждая майларовая плёнка подключается к одной из двух диодных плат, поэтому общее число соединений исчисляется сотнями (см. выше).
Диоды нужны, чтобы сигналы в матрице не замыкались друг на друга. Они находятся внутри квадратных алюминиевых модулей, показанных ниже.
В IBM System/360 не использовались интегральные микросхемы. Вместо них IBM применяла гибридные модули SLT (Solid Logic Technology), содержащие миниатюрные полупроводниковые элементы и толстоплёночные резисторы.
В каждом из показанных ниже модулей SLT находится по восемь диодов.

Судя по маркировке, мой модуль TROS использовался в младшей модели линейки System/360 — Model 20.
Это был медленный, упрощённый компьютер, который даже не поддерживал полный набор команд System/360. Тем не менее благодаря невысокой стоимости аренды (1280 долларов в месяц) Model 20 стала самой популярной моделью в семействе System/360.
В Model 20 было установлено восемь модулей TROS, в которых хранилось 6144 микроинструкции (по три микроинструкции в каждом 60-битном слове).3
На фотографии ниже эти модули видны в левой части компьютера, где они установлены вертикально. Обратите внимание, сколько места TROS занимали внутри машины.

Если вам интересно, как выглядел микрокод Model 20, ниже приведён небольшой фрагмент.
Сам микрокод в шестнадцатеричном представлении выделен синим, а его мнемоническая расшифровка — зелёным. Справа находятся комментарии.
Микрокод Model 20 был значительно проще горизонтального микрокода, который использовался в старших моделях System/360.4

Зачем нужен микрокод?
Одна из самых сложных задач при проектировании компьютера — разработать управляющую логику, которая будет указывать каждому узлу процессора, что именно нужно делать для выполнения очередной инструкции.
В 1951 году Морис Уилкс (Maurice Wilkes) предложил идею микрокода.
Вместо того чтобы собирать управляющую логику из сложных схем на логических элементах, её можно было реализовать программно — с помощью микрокода, хранящегося в специальной управляющей памяти (control store).
Для выполнения машинной инструкции компьютер последовательно выполняет несколько более простых микроинструкций, заданных микрокодом.
Таким образом, благодаря микрокоду разработка управляющей логики процессора превращается из задачи проектирования логических схем в задачу программирования.
Однако в 1950-х годах технологии памяти ещё не позволяли сделать микрокод практичным решением: память была слишком медленной и дорогой.
Лишь с появлением IBM System/360 в 1964 году микрокод начали широко применять в коммерческих компьютерах.
Микрокод сыграл ключевую роль в успехе System/360. Благодаря ему IBM смогла создать целое семейство компьютеров с общей архитектурой набора команд, но существенно различавшихся внутренней реализацией.
Кроме того, микрокод упростил обеспечение обратной совместимости: System/360 могла поддерживать наборы команд более старых компьютеров IBM.5
Разные технологии ПЗУ в IBM
IBM использовала несколько разных технологий постоянной памяти для хранения микрокода. Причины были не только техническими, но и связаны с внутренней политикой компании.
Технологию TROS разработали в британском подразделении IBM в Хёрсли.
Там начали заниматься микрокодом ещё в 1950-х годах, поскольку транзисторы в Англии тогда стоили очень дорого, а использование микрокода позволяло сократить их количество.
Сначала в Хёрсли разработали TROS для компьютера SCAMP.6 Затем появилась технология TROS, о которой я рассказал выше.
CCROS — ёмкостная память
Конкурирующей технологией была CCROS (Capacitive Coupled Read‑Only Storage) — ёмкостное постоянное запоминающее устройство.
В ней использовались майларовые плёнки, образующие матрицу конденсаторов.
Любопытная особенность CCROS заключалась в том, что плёнки имели те же размеры, что и стандартные перфокарты IBM. Благодаря этому микрокод можно было записывать, пробивая отверстия обычным перфоратором перфокарт.
CCROS разработали в подразделении IBM в Эндикотте. Там же создавали System/360 Model 30, поэтому для этой модели выбрали местную разработку, хотя CCROS уступала TROS по скорости и надёжности.
Каждая карточка CCROS хранила 12 слов по 60 бит. В Model 30 было установлено 42 платы CCROS, по восемь карточек на каждой.
В общей сложности они вмещали 4032 слова по 60 бит.

BCROS — память на балансных конденсаторах
Более производительным моделям 50, 65 и 67 требовалась быстрая управляющая память, поэтому в них применили третью технологию — BCROS (Balanced Capacitor Read‑Only Storage), постоянное запоминающее устройство на балансных конденсаторах.
Как и CCROS, технология BCROS позволяла считывать биты за счёт ёмкостной связи. Но в BCROS для каждого бита использовалась пара конденсаторов (балансных), что помогало снизить уровень помех и повысить скорость работы.
Майларовые плёнки BCROS имели размеры 20 × 8,5 дюйма и были значительно крупнее плёнок TROS и CCROS.
Данные в BCROS кодировались не пробивкой отверстий, а травлением медных проводящих дорожек (см. ниже).
Каждый бит представляли два квадратных участка меди: один соединялся с верхним проводником, другой — с нижним, либо наоборот. Так формировалась пара балансных конденсаторов.
На одном слое плёнки помещалось 176 слов по 100 бит, а вся система состояла из 16 слоёв и хранила 2816 слов.

Управляющая память Model 25
В младшей Model 25 для хранения микрокода вообще не стали разрабатывать специальную технологию.
Вместо этого выделили 16 Кбайт обычной памяти на магнитных сердечниках. Этот участок назывался управляющей памятью (Control Storage).
В этой модели можно было загружать разный микрокод с набора перфокарт или магнитной ленты, переключаясь между режимом System/360 и эмуляцией старых компьютеров серии IBM 1400.
Обновление микрокода
Важным преимуществом всех этих технологий была возможность легко обновлять микрокод прямо у заказчика.
Для этого достаточно было заменить майларовые плёнки с микрокодом (или набор перфокарт). Многие ошибки в работе системы удавалось исправить таким способом быстро и с небольшими затратами.
Для сравнения: в более старом IBM 1401 аппаратная доработка (engineering change) обычно требовала от инженера изменения проводных соединений на объединительной панели. Это занимало гораздо больше времени, к тому же при такой работе легко было допустить ошибку.
Обновлять микрокод можно было и в тех случаях, когда заказчик приобретал дополнительные функции для своего компьютера.
Сравнение с памятью на прошитых сердечниках
TROS имеет немало общего с памятью на прошитых магнитных сердечниках (core rope), которую использовали для хранения программ в бортовом компьютере Apollo Guidance Computer (AGC).
В обоих случаях данные записывались в постоянную память за счёт того, как проводники проходили через сердечники.
Однако у этих технологий были разные преимущества и недостатки.
Память на прошитых сердечниках в AGC обеспечивала гораздо более высокую плотность хранения данных, что было особенно важно для космических полётов.
TROS можно было легко перепрограммировать, просто заменив пластиковые плёнки.
А чтобы изменить данные в памяти на прошитых сердечниках, приходилось изготавливать новый модуль, прокладывая проводники заново. Это был дорогой процесс, занимавший восемь недель.

С точки зрения конструкции TROS и память на прошитых сердечниках устроены практически противоположным образом: линии выбора слова (адресные линии) и линии считывания в них меняются ролями.
В TROS значение битов определялось тем, какие линии выбора слова проходили через трансформатор, а какие обходили его.
В памяти на прошитых сердечниках всё было наоборот: данные зависели от того, какие линии считывания проходили через сердечник, а какие — в обход.
Для считывания слова в AGC активировался один сердечник, тогда как в TROS потенциально могли возбуждаться все трансформаторы.
У каждого трансформатора TROS была одна линия считывания, и каждый трансформатор отвечал за один выходной бит.
В памяти AGC, напротив, через каждый сердечник проходили 192 линии считывания, а сам сердечник был связан с 12 словами.
Заключение
TROS и другие технологии постоянной памяти сыграли важную роль в огромном успехе IBM System/360, поскольку сделали использование микрокода практически осуществимым.
Однако в 1970-х годах появились дешёвые полупроводниковые микросхемы ПЗУ, и сложные технологии хранения данных вроде TROS быстро устарели.
Сегодня большинство микропроцессоров по‑прежнему используют микрокод, но хранится он уже не на майларовых плёнках, а в ПЗУ непосредственно внутри чипа.
И чтобы внести исправления в микрокод, теперь достаточно загрузить файл обновления, а не менять майларовые плёнки внутри компьютера.7

¹ IBM System/360 представили в 1964 году. Конкретно этот модуль TROS датирован 27 мая 1970 года.
² На схеме ниже показано, как работают матричная схема выбора и диоды. Для наглядности схема упрощена: здесь всего 2 драйвера, 4 токовых ключа и 8 линий выбора слова. В реальной системе было 16 драйверов, 16 токовых ключей и 256 линий выбора слова. (То, что IBM здесь называет gate, — не логический вентиль, а токовый ключ, выполняющий роль стока тока и замыкающий цепь с противоположной стороны.)
Чтобы выбрать линию слова, достаточно активировать соответствующую пару из драйвера и токового ключа. Например, если активировать драйвер 1 и токовый ключ 3, будет выбрана линия W3, выделенная на схеме красным. Обратите внимание: без диодов ток мог бы пойти в обратном направлении, из‑за чего ошибочно активировались бы сразу несколько линий выбора слова.

³ В Model 20 использовались 22-битные слова микрокода. Как же они помещались в 60-битные слова TROS? Секрет в том, что часть слов микрокода сокращали до 16 бит. Благодаря этому в одном слове TROS помещались сразу три слова микрокода: два по 22 бита и одно 16-битное.
В микрокоде Model 20 каждое слово содержало адрес следующей микроинструкции, которую нужно выполнить. Но сокращённое 16-битное слово позволяло переходить лишь к ограниченному набору микроинструкций. Поэтому при сборке микрокода ассемблер должен был тщательно размещать микроинструкции: те, которым требовался переход на более удалённый адрес, необходимо было помещать в одно из более длинных, 22-битных слов.
⁴ В Model 50 одна 90-битная микроинструкция могла выполнять до шести разных операций параллельно. Например, каждый жёлтый блок на схеме ниже соответствует одной микроинструкции, участвующей в умножении чисел с плавающей запятой. Каждая строка внутри блока описывает отдельное действие. Одна микроинструкция может одновременно управлять формирователем констант, сумматором, блоком сдвига, блоком пересылки данных и локальной памятью.
Суть в том, что Model 50 была быстрее в том числе благодаря нескольким функциональным блокам, способным работать параллельно. Но для управления ими требовался гораздо более сложный микрокод.
Две микроинструкции (выделены жёлтым) из System/360 Model 50. Это фрагмент микрокода, который обрабатывает потерю значимости порядка и переполнение порядка при умножении чисел с плавающей запятой. Чёрные линии показывают переходы между микроинструкциями. Текст за пределами блоков — комментарии. Источник: схема QG702 из документации Model 50.
⁵ В большинстве компьютеров System/360 использовался микрокод: он позволял снизить стоимость, повысить гибкость системы и ускорить разработку. IBM даже установила правило: все компьютеры System/360 должны использовать микрокод, если только нет действительно веских причин отказаться от него. Однако в самых быстрых моделях ради максимальной производительности применялись аппаратные схемы управления.
⁶ Что немного сбивает с толку, IBM выпустила два совершенно разных компьютера под названием SCAMP. Модель, в которой использовалась TROS, называлась Scientific Computer and Modulator Processor. Это был небольшой компьютер для научных вычислений, разработанный в подразделении IBM в Хёрсли. Не стоит путать его с более известным SCAMP — прототипом портативного IBM 5100 (Special Computer APL Machine Portable).
⁷ В современных процессорах x86 микрокод жёстко записан в микросхеме, но также предусмотрена небольшая SRAM‑память для хранения исправлений микрокода, устраняющих ошибки процессора. После каждого включения компьютера BIOS загружает эти исправления в процессор.

В IBM System/360 работа процессора зависела от расположения проводников внутри модуля памяти. Сегодня технологии изменились, но понимание того, как программное обеспечение взаимодействует с аппаратной частью, по‑прежнему необходимо. Без него сложно разобраться, как операционная система управляет устройствами, использует память и выполняет процессы.
Хотите понимать, что происходит внутри компьютера, а не только на уровне программного кода? Приходите на бесплатные открытые уроки:
17 ноября, 20:00. «/proc, /sys, /dev: как Linux превращает железо и процессы в файлы». Записаться
24 ноября, 20:00. «sysfs на практике: как управлять параметрами модулей ядра». Записаться
![[Перевод] TROS: как мейнфреймы IBM хранили микрокод в трансформаторах](https://habrastorage.org/extt/33/8f/74/338f74a91c5f39e44a38ba3bcbae90a5.jpg)
Комментарии 0