Кто автор первой полностью электромеханической программируемой цифровой машины z1
Компьютер “Z1” Конрада Цузе
Транзисторов или даже электронных ламп в Z1 найти не удастся: эта вычислительная машина была создана за 6 лет до начала использования ламп в вычислительной технике. Z1 — компьютер полностью механический, разве что привод электрический.
Тем не менее, эта вычислительная машина содержала практически все элементы современных компьютеров, была программируемой, работала с двоичным кодом и оперировала 22-битными числами с плавающей запятой — что давало возможность проводить вычисления как с очень большими, так и с очень маленькими величинами.
Процессор Z1 работал на частоте 1 Гц, машина была способна выполнять одну операцию сложения в секунду (умножение происходило значительно дольше, поскольку было реализовано как последовательное сложение), объем памяти составлял 0,17 Кбайт.
Программы — у компьютера была система из 9 команд — вводились с помощью перфоленты. В модели Z1 использовалась бумажная лента, однако при разработке Z2 в качестве основы выступала уже 35-миллиметровая кинопленка. Пленка была выбрана Цузе по той простой причине, что его дядя (иные источники говорят о дедушке, но на сопроводительной табличке в музее указан именно дядя) работал на крупнейшей германской киностудии того времени — Universum Film AG — и мог поставлять племяннику отработанную пленку в достаточных для его целей количествах. Поскольку Цузе создавал свою машину без участия государства или крупных компаний, в основном на деньги друзей и родственников, экономия была более чем уместна.
В 1945 году компьютер был уничтожен во время бомбардировок вместе со зданием, где находилась компания Цузе.
Ответ на пост «Повар-расист в действии»
Конрад Цузе: мечтатель, создавший первый компьютер
Вторая мировая война дала мощный толчок развитию техники и науки. Военно-промышленный комплекс всегда собирал огромные человеческие, денежные и другие ресурсы. И нацисты в своей одержимости к мировому господству, особенно рьяно трудились над изобретениями и научно-техническими инновациями. Тем ни менее история создания первого программирующего компьютера началась еще до войны, с обычного желания одного немецкого архитектора упростить себе жизнь.
Конрад Цузе (1910-1995 г.г.)
Немецкий инженер и изобретатель первого в мире работающего программируемого компьютера Конрад Цузе попал в мир информационных технологий практически случайно. Будущий изобретатель был наделен неплохими способностями к изобразительному искусству, а также любил строительство и конструирование. Поэтому он поступил в Берлинский Технический Университет на факультет архитектуры и гражданского строительства (1930-1935), где увлекся математикой и физикой. Во время обучения, изучая строительство зданий и дорог, Цузе столкнулся с серьезной проблемой. Этот тип конструкций требовал решения огромных систем линейных уравнений, которые было очень трудно просчитать с помощью логарифмической линейки или даже механического калькулятора того времени.
Как вспоминал Цузе: «Я был студентом в гражданской инженерии в Берлине. Берлин — это красивый город, открывающий перед молодым человеком множество возможностей приятно провести время, например, с хорошенькой девушкой. Но вместо этого мы вынуждены были выполнять громадные и ужасные расчеты».
Для подобных просчетов инженеры использовали особые таблицы, куда записывали формулы выполнения основных операций в двоичной системе счисления. Именно тогда у Цузе возникла идея автоматизировать этот процесс применив несложное вычислительное устройство. Говоря иными словами — изобрести первую программируемую двоичную вычислительную машину.
(фото двоичной программируемой вычислительной машины Z1)
Через тернии к звездам
В 1936 году Цузе завершил логический план для своего первого компьютера V1 (от немецкого Versuchsmodell-1, то есть «опытная модель»). На самом деле названия всех машины должны были начинаться с V (от V1 до V4), но после Второй мировой войны он изменил имена на Z1-Z4 (начальная буква фамилии изобретателя), чтобы избежать неприятных ассоциаций с V1-V4 военных ракет.
Цузе не имел опыта в области электроники, не обладал достаточными знаниями в области механики и конечно же, не мог знать принципы работы других вычислительных устройств. Но эти обстоятельства его не смущали. Молодой изобретатель незамедлительно начал реализацию своей идеи. С помощью знакомых он собрали небольшую сумму денег для исследования и вместе с несколькими друзьями приступил к работе. Процесс разработки и сборки происходил в берлинской квартире его родителей — домашняя гостиная превратилась в настоящую мастерскую. Никаких специально оборудованных лабораторий, никакой помощи от правительства, министерств или университетов. Конрад делал все сам, создавая свой компьютер практически из ничего. С другой стороны, возможно именно это обстоятельство дало ему преимущество, так как он смог иначе посмотреть на вопросы машинной арифметики и найти новый подход к решению определенных задач. Позже изобретатель писал, что в силу неосведомленности он не был ограничен в поисках системы, наилучшей для автоматических вычислений. Попробовав десятичную систему, Цузе остановился на двоичной.
(Цузе в процессе работы)
Существовавшие на то время вычислительные механизмы были построены с использованием вращающихся элементов и оперировали значениями в десятичной системе счисления. Особенностью Z1 было то, что она занималась обработкой чисел в двоичной системе и для переключения использовались не реле, а металлические пластины. Надо заметить, что эти пластины вырезались Цузе и его друзьями вручную, обычным лобзиком (2000 штук!). Пластины перемещались в строго определенном направлении. Смещенные пластины, указывающие значения вычисляемых величин и математические операции, перемещали ряд других пластин, изменяющих регистр двоичных чисел и сохраняющих промежуточный результат. Полученные данные позволяли производить другие преобразования. Собственно задаваемый оператором несложный последовательный алгоритм вычислений и был прототипом современной компьютерной программы. Примечательной особенностью первого компьютера была клавиатура для ввода данных с мигающими лампочками для указания результатов.
Работа над изобретением заняла более двух лет. В 1938 году машина Z1 увидела свет. Она была огромной, состояла из 20 000 частей. Электрический двигатель мощностью 1 кВт. обеспечивал тактовую частоту одного Герца (один цикл в секунду).
Основные характеристики Z1
Реализация: тонкие металлические пластины
Частота: 1 Гц
Вычислительный блок: обработка чисел с плавающей запятой
Средняя скорость расчета: умножение — 10 секунд, сложение — 5 секунд
Ввод данных: клавиатура, устройство считывания с перфоленты
Вывод данных: ламповая панель (десятичное представление)
Память: 64 слова по 22 бита
Вес: около 1000 кг
Первое устройство Цузе не имело способности «сохранять программу». Также отсутствовала команда условного перехода. Но стоит ли желать большего от машины, построенной из металлических пластин и имеющей 64 слова памяти? К тому же Цузе сам разрабатывал теоретические основы для своих компьютеров. Он был знаком с двоичной цифровой системой Лейбница. Но не имел понятия о алгебре Джорджа Буля. Он должен был изучать математическую логику многих выдающихся ученых, чтобы разработать свою собственную систему, назвав обозначения «Условные комбинаторные» (Bedingungskombinatorik).
Механическое устройство Цуза имело великую научную ценность, доказывая возможность создания программных вычислительных машин, работающих с двоичным кодом. А вот надежность машины оставляла желать лучшего. Устройство постоянно ломалось из-за плохого качества комплектации. При работе процессора с памятью возникала проблема в синхронизации, требуемой для предотвращения чрезмерной механической нагрузки на подвижные части. Но архитектура изобретения казалась вполне удачной и побудила Цузе рассмотреть другие виды технологий.
На дальнейшую работу над машиной сильно повлиял друг Цузе, инженер-электронщик Гельмут Шреер. Он по достоинству оценил разработку и предложил ее усовершенствовать, заменив пластины на электровакуумные лампы. И при создании новой модели сохранить в ней логические принципы предыдущей, позволяющие операторам производить математические операции с десятичными числами.
В 1938 году Цузе и Шреер выступили с демонстрацией электронных схем в Берлинском Университете, подробно рассказывая про построение электронного компьютера. Но стоило им упомянуть, что такое устройство потребует около 2000 радиоламп и несколько тысяч ламп накаливания, как их едва не высмеяли. Университетские ученые классифицировали затею, как фантазию двух мечтателей. Дело в том, что крупнейшие электронные устройства того времени состояли всего лишь из нескольких сотен электронных ламп.
Но критика профессоров не повлияла на решение друзей выполнить задуманное и собрать новую модель.
(друзья-ученые Цузе и Шреер)
Пытаясь найти финансирование Цузе попытался заключить контракт с бывшим производителем механических калькуляторов Куртом Паннке. На что получил вежливый отказ. Паннке выразил уверенность в том, что в области вычислительных машин уже изобрели все возможное. Тем не менее, бывший производитель калькуляторов согласился посетить мастерскую Цузе и был так впечатлен его работой, что решил дать изобретателю семь тысяч рейхсмарок.
Стремление к совершенству
Начало второй мировой войны положило конец совместным исследованиям, Цузе призвали в нацистскую армию. Там он провел менее полугода. Благодаря ходатайству влиятельных инженеров и ученых в 1940 году Цузе демобилизовался в Берлин, где стал членом гитлеровской научной элиты.
Работа над созданием релейной электронной вычислительной машины возобновилась. Шреер снова предложил свои услуги. Ученые обратились за финансовой поддержкой к военному руководству, предлагая разработать современное устройство для военно-воздушных сил Германии. Такая машина могла быстро обрабатывать сложные расчеты, повышая тем самым эффективность тактической авиации. По предварительной оценке ученых на изобретение подобного аппарата потребовалось бы около двух лет. Но военные ответили отказом. Руководство вермахта было убеждено, что за такой срок нацистская Германия уже достигнет мирового господства.
В том же году Цузе начал разработку Z3 — машины полностью построенной на реле, но с логической структурой от Z1 и Z2. Она была готова к эксплуатации в 1941 г., за 4 года до разработки американских ученых — электронного цифрового компьютера ENIAC.
Программируемая вычислительная машина Z3 и была создана на базе электронных реле (600 для арифметического устройства, 1400 для памяти и 400 для блока управления). Во всех других аспектах она напоминала Z1 и Z2: двоичная система исчисления, числа с плавающей запятой, арифметическое устройство с двумя 22-разрядными регистрами, управление через 8 канальные ленты (т.е. команда состоит из 8 битов). Каждое из слов могло быть помещено в память компьютера за один тактовый цикл. Общий общем памяти достигал 64 слов по 22 бита. Именно этой машиной был впервые применен современный принцип адресного распределения памяти, когда каждое 22-разрядное слово можно поместить в память или извлечь из нее командами PRz и PSz (z — соответствующий регистр оперативного запоминающего устройства с адресами от 1 до 64). Арифметический модуль компьютера составляли параллельные сумматоры, которые применялись для обработки логарифмических выражений и чисел с плавающей запятой.
Цузе разработал свой набор инструкций, который включал около десяти основных и нескольких десятков дополнительных команд. Это был самый настоящий язык программирования использовавшийся для задания сложных алгоритмов вычислений. Так что Цузе приписывают еще и создание первого языка программирования высокого уровня — Планкалкюль (на немецком Plankalkül — «исчисление планов»). Его характерными особенностями были: свободная переносимость (независимость от архитектуры и набора команд машины), операторы условия (кроме ELSE), циклы, подпрограммы, отсутствие рекурсии, работа с массивами и подмассивами, а также сложный синтаксис
В декабре 1941 года Z3 был введен в эксплуатацию и тут же взят на вооружение производителями военных самолетов. Именно с помощью Z3 обсчитывались аэродинамические и баллистические характеристики первых немецких крылатых ракет.
После успешного внедрения в военную промышленность Z3, Цузе заключил контракт с Научно-исследовательским управлением ВВС Германии (DIV) на проектирование электрической вычислительной машины нового поколения.
Новая модель была очень похожа на Z3, включая в себя все усовершенствованные разработки Цузе. Этот компьютер включал элементы: 2500 реле, 21 ступенчатое реле. Он обладал уже 1024 регистрами памяти для хранения 22-битных слов. Благодаря более мощному процессору повысилась скорость выполнения преобразования двоичных чисел. Z4 имел устройство для подготовки программы. Также он умел избегать исчисления неверных результатов. Потребляемая мощность машины составляла 4 кВт.
Создание нового компьютера заняло три года и к декабрю 1944 проект подходил к завершению. Работая над Z4, изобретатель ставил главной целью построить прототип машины, которая в дальнейшем сможет производится тысячами. Но отсутствие нужных материалов и сложная ситуация в стране (разгар военных действий), сделали эту задачу практически невыполнимой. Во время одного из налетов авиации на Берлин первый экземпляр Z3 был полностью разрушен, а когда в мае 1945 года в столицу Германии вошла советская армия, Цузе был вынужден бежать вместе с семьей в Баварию. С собой он конечно же прихватил уже собранный компьютер Z4. В Баварских Альпах он спрятал машину до более спокойных времен.
Основные характеристики Z4
Реализация: Реле, память — металлические пластины
Частота: 30 Гц
Вычислительный блок: обработка чисел с плавающей запятой, длина машинного слова — 32 бита
Средняя скорость расчета: 0,4 секунды для сложения, 0,3 секунды для умножения
Средняя скорость вычислений: 11 операций умножения в секунду
Ввод данных: десятичная клавиатура, устройство считывания с перфоленты
Вывод данных: печатная машинка марки «Mercedes»
Память: 64 слова по 22 бита
Вес: около 1000 кг
В 1948 году Цузе связался с профессором Эдуардом Штифелем, который признал Z4 пригодным для научных расчетов. Несмотря на немного старомодный технологии машины, Штифель был впечатлен простотой программирования и мощностью арифметического устройства с его способностью обработки исключений.
Ободренный успехом, Цузе создал собственную фирму Zuse KG. По сути, это была первая в мире коммерческая компания, занимающаяся исключительно развитием и производством компьютерных технологий для авиации и оптической промышленности, университетских лабораторий. Компания наладила выпуск коммерческих компьютеров, популярных в Германии 50-х годов (Z5, Z11, Z22 и Z23). Фирма Цузе создала первый компьютер с памятью на магнитных носителях Z22.
(компьютер с памятью на магнитных носителях Z22)
Несмотря на инженерный талант и усердие, Цузе отставал от своих американских конкурентов. Послевоенная Германия была не самым подходящим местом для инноваций в электронное будущее. Все средства правительства шли на восстановление страны. Да и у Цузе не было инфраструктуры, необходимой для дальнейших разработок. Он не мог вовремя узнавать о новых приборах и программах.
И уже в 60-х годах рынок Европы активно заполнили американские электронно-вычислительные машины, которые постепенно вытеснили компьютеры Цузе. В 1962 году фирма была продана компании «Brown Boveri and Co», а в последствии вошла в состав корпорации «Siemens».
Конрад Цузе называл себя аполитичным человеком. Делом всей своей жизни он считал развитие компьютерных технологий в Германии и сожалел, что так и не осуществил свою мечту — создать переносной персональный компьютер для деловых людей. В этом его опередили американские разработчики. После продажи компании он занялся своим давним увлечением — живописью. И даже написал несколько портретов известных людей в мире компьютерных технологий. Одним из них был Билл Гейтс, с которым Вузе познакомился на выставке.
(Цузе за вторым своим любимым занятием)
Конрад Цузе умер в 1995 году в городе в Хюхнфельд (Германия), дожив до восьмидесяти пяти лет.
Оригиналы Z1, Z2 и Z3 не сохранились до наших дней, они были разрушены во время бомбардировок Берлина в 1945 году. Зато Цузе удалось спасти компьютер Z4, который находится на родине изобретателя в Техническом музее Берлина.
Калифорнийский Музей истории компьютеров в Маунтин-Вью посмертно включил в свой состав Конрада Цузе, как выдающегося изобретателя первого полностью автоматизированного компьютера с программным управлением.
ЭВМ: ЧТО? ГДЕ? КОГДА? | Z1
Z1 — вычислительное устройство, созданное в 1938 году, стало первой ограниченно программируемой вычислительной машиной немецкого инженера Конрада Цузе. Это двоичная вычислительная машина с вводом данных с помощью клавиатуры, в десятичной системе исчисления в виде чисел с плавающей запятой. Главным отличием от более известной вычислительной машины Z3 (1941 год) было отсутствие вычисления квадратного корня.
В Немецком техническом музее хранится воссозданная модель компьютера, причем эта работа была проведена именно тем человеком, который в свое время сконструировал и собственноручно создал оригинал, — Конрадом Цузе…
Хотя жить и работать Конраду Цузе приходилось и в других местах, родился он в Берлине, в нем же получил образование и здесь же в 1938 году сконструировал и воплотил в железе свой первый компьютер, получивший по первой букве фамилии автора незамысловатое название Z1.
На самом деле изначально первые машины Zuse назывались еще проще: V1, V2 и так далее (от нем. Versuchsmodell — «экспериментальная модель»). Но впоследствии были переименованы, чтобы их не путали с ракетами: V по-немецки читается как «фау».
Транзисторов или даже электронных ламп в Z1 найти не удастся: эта вычислительная машина была создана за 6 лет до начала использования ламп в вычислительной технике. Z1 — компьютер полностью механический, разве что привод электрический.
Тем не менее, эта вычислительная машина содержала практически все элементы современных компьютеров, была программируемой, работала с двоичным кодом и оперировала 22-битными числами с плавающей запятой — что давало возможность проводить вычисления как с очень большими, так и с очень маленькими величинами.
Процессор Z1 работал на частоте 1 Гц, машина была способна выполнять одну операцию сложения в секунду (умножение происходило значительно дольше, поскольку было реализовано как последовательное сложение), объём памяти составлял 0,17 Кбайт.
Программы — у компьютера была система из 9 команд — вводились с помощью перфоленты. В модели Z1 использовалась бумажная лента, однако при разработке Z2 в качестве основы выступала уже 35-миллиметровая киноплёнка.
Пленка была выбрана Цузе по той простой причине, что его дядя (иные источники говорят о дедушке, но на сопроводительной табличке в музее указан именно дядя) работал на крупнейшей германской киностудии того времени — Universum Film AG — и мог поставлять племяннику отработанную пленку в достаточных для его целей количествах. Поскольку Цузе создавал свою машину без участия государства или крупных компаний, в основном на деньги друзей и родственников, экономия была более чем уместна.
Единственным более-менее серьезным спонсором, которого Цузе удалось заполучить на ранней стадии создания своих вычислительных машин, стал Курт Панке, владелец производства калькуляторов.
Забавно, но поначалу Панке несколько раз отказывал инженеру в финансовой помощи со словами: «В вычислительных устройствах, в сущности, все уже изобретено — вплоть до всех возможных подходов и самых замысловатых конструкций. В них просто уже не осталось ничего, что можно было бы изобрести». Вот бы показать этому человеку какой-нибудь, скажем, iPad и посмотреть на выражение его лица…
Но денег Панке в конце концов все-таки дал. Целых 7 000 рейхсмарок — по тому времени примерно треть цены шикарного спортивного купе «Мерседес» (ремарка для заскучавших автолюбителей: с пятилитровым компрессорным двигателем, шик-модерн того времени). Этот достаточно щедрый грант позволил Цузе довести до конца работу над Z1 и начать создание улучшенной версии, Z2.
Наследие Конрада Цузе: Архитектура Z1 и Z3 [Перевод]
Оригинал: Raúl Rojas — «Konrad Zuse’s Legacy: The Architecture of the Z1 and Z3», IEEE Annals of the History of Computing, Vol. 19, No. 2, 1997
Эта статья представляет детальное описание архитектуры вычислительных машин Z1 и Z3, разрабатываемых Конрадом Цузе в Берлине с 1936 по 1941 гг. Информация была в основном получена из детального изучения патента, поданного Цузе в 1941 г. Более глубокая оценка была получена из программной симуляции машинной логики. Z1 была основана исключительно на механических компонентах, а в Z3 использовались электромеханические реле, но обе машины имели общую логическую структуру и программную модель. Z1 и Z3 обладали такими свойствами современных вычислительных машин как: разделение памяти и процессора, способность оперировать числами с плавающей запятой, вычислять 4 основные арифметические операции и квадратный корень. Программы хранились на перфоленте и считывались последовательно. В последующей статье я рассмотрю архитектуру Z1 и Z3 в исторической перспективе, и произведу сравнение с компьютерами построенными в других странах.
Введение
Конрад Цузе признается в Германии как отец компьютера, и его Z1, программируемый автомат, строящийся с 1936 по 1938 гг., считается первым компьютером в мире. В других странах это значение придается другим ученым, и там проходят долгие и острые споры по вопросу, кто является истинным изобретателем компьютера. Иногда споры переходили в глубокие и детальное описание технологических особенностей конкретных машин. К примеру ENIAC ( Electronic Numerical Integrator and Computer ) считается «Первой широкомасштабной, полностью электронной вычислительной машиной в мире». ENIAC строился в Школе Электротехники Мура при Пенсильванском университете (Moore School of Electrical Engineering of the University of Pennsylvania ) с 1943 по 1945 гг. Он решил первую задачу в декабре 1945 и был представлен в феврале 1946. Другим кандидатом на титул первого компьютера считается Mark I, строящийся Говардом Айкеном в Гарвардском университете с 1939 по 1944 гг. Mark I был электромеханической машиной, т.е. построенной не на чисто механических элементах, как в более ранних вычислительных устройствах, и не на электронике, уже доступной в то время. В машине Джона Атанасова (позже названной ABC) из Государственного Колледжа штата Айова, строящейся с 1939 по 1944, использовались вакуумные трубки, но при этом машина имела ограничения на сложение и вычитание векторов, и имеющаяся структура не подходила для универсальных вычислений. Z1 является прямой противоположностью этих машин, более гибкая, построенная для исполнения длинных и модифицируемых последовательностей инструкций, считываемых с перфоленты. Машины Z3 и Z4 не были электронными и обладали меньшими габаритами. Z3 была построена и успешно прошла испытания раньше чем Mark I, и поэтому была названа первой программируемой вычислительной машиной в мире. Конечно давние дискуссии не будут завершены на этой статье, но я хочу показать, насколько передовыми были машины Цузе, с точки зрения современной компьютерной архитектуры и по сравнению с архитектурой того времени.
Цузе, будучи студентом Берлинского политехнического, начал работать над вычислительной машиной в 1930х. Он понял, что может построить автомат способный выполнять последовательность математических операций, которые требуются для построения математических таблиц. Придя из гражданской инженерии, он имел опыт в области электроники, но не был знаком с технологиями, используемыми в обычных механических калькуляторах. Однако эта нехватка знаний дала ему преимущество, т.к. он смог переосмыслить все вопросы машинной арифметики и найти новые оригинальные решения.
Годом ранее Джон фон-Нейманн объяснял преимущество компьютерной архитектуры с процессором, разделяющим память. Цузе пришел к такому же выводу. Надо заметить, что Чарльз Бэббидж пришел к тем же выводам проектируя свою Аналитическую машину в прошлом столетии. В 1936 г. Цузе закончил работу над памятью для своей машины, и назвал ее Speicherwerk (нем. — Запоминающие устройство) — термин Speicher использовался в Германии вместо антропоморфного термина Memory (англ. — Память), который ввел фон-Нейманн, Бэббидж же использовал термин Store (англ. — Хранилище). Память являлась механическим устройством, но не обычного типа. Вместо использования шестеренок (их использовал Бэббидж в прошлом веке), Цузе реализовал логические и арифметические операции на скользящих металлических рейках. Рейки могли перемещаться в одном из двух направлений (прямое и обратное) и следовательно являлись двоичным механизмом. Процессор Z1 был построен спустя 5 месяцев после построения памяти. При работе с памятью он был крайне ненадежным. Главная проблема была в точности синхронизации, которая требуется для предотвращения чрезмерной механической нагрузки на подвижные части. Интересно отметить, что в том же году, когда Цузе закончил работать над памятью, Алан Тьюринг написал свою новаторскую работу On computable numbers (англ. — О вычислимых числах), в которой формализовал интуитивно понятные вычисления.
Машина Z1, несмотря на ненадежность, показала, что Архитектурный дизайн был целесообразным и побудила Цузе изучить другие виды технологий. Следуя совету своего друга Хельмута Шряера, он рассмотрел электромеханические реле. Цузе построил «промежуточную» модель ( Z2 ) на смешанной технологии (процессор строился на реле, а память осталась механической). В 1938 г. Цузе начал разработку Z3, машину полностью построенную на реле, но с логической структурой от Z1. Она была готова к эксплуатации в 1941 г., за 4 года до ENIAC.
Эта работа предполагает детальное рассмотрение архитектуры машин Z1 и Z3. Цузе реконструировал свою машину Z1 в Берлине в 80х годах, и сейчас она выставляется в Берлинском музее транспорта и технологий. Однако доступная информация описывает устройство механической памяти[12]. Цузе документировал Z3 в патентном приложении Z-391 1941г, но его анализ затруднен из-за нестандартной нотации и терминологии[14]. Книга [4] о Z3 является хорошим источником для понимания исторической обстановки, окружающей исследования Цузе, но не описывает Z3 в деталях. Т.к. Z1 и Z3 эквивалентны с логической и функциональной точки зрения, в дальнейшем, я буду ссылаться только на Z3. Основным архитектурным отличием является то, что Z1 нет поддержки операции извлечения квадратного корня. Остальные минимальные отличия сводятся к различаю в количестве бит в арифметических операторах процессора (Z1 использует меньшую разрядность мантиссы в числах с плавающей запятой) и в количестве циклов необходимых для каждой инструкции. С минимальной оговоркой, принимая во внимание только архитектуру, можно считать Z1 и Z3 эквивалентными машинами. Проводились споры, действительно ли реконструированная Z1 соответствует оригинальной Z1, уничтоженной во время второй мировой войны. Цузе реконструировал машину Z1 основываясь исключительно на свои воспоминания, и вполне возможно, что реконструированная машина имеет больше общего с Z3, чем с оригинальной Z1. Так же, Цузе указывает в своих мемуарах на базовое сходство Z1 и Z3 [15], и подтверждает этот аспект своей работы в частном интервью.
Обзор архитектуры Z1 и Z3
Структурная схема
Z3 работала с числами с плавающей запятой, в отличие от других ранних вычислительных автоматов, таких как Mark I, ABC или ENIAC, работающих с числами с фиксированной запятой. Цузе разработал то, что позже назвал «полулогарифмическая запись», которая соответствует современному представлению чисел с плавающей запятой.
На рис. 1 изображены основные составные блоки Z3. Первой особенностью архитектуры является разделение процессора и памяти. Z3 включает двоичную память (способной хранить 64 числа с плавающей запятой), двоичный процессор для чисел с плавающей запятой, устройство управления и устройства ввода/вывода. Память и Арифметический блок соединены шиной данных, передающей экспоненту и мантиссу числа с плавающей запятой. Устройство управления содержит микропрограммы для каждой инструкции. Управляющие сигналы поступают в процессор, память и устройство ввода/вывода для осуществления синхронизации всех блоков. Устройство чтения перфоленты предоставляет код операции для каждой инструкции, а так же адрес для доступа к памяти. Устройство ввода/вывода подключено к процессору шиной данных.
Представление чисел с плавающей запятой
Набор инструкций
Программа Z3 хранится на перфоленте. Одна инструкция использует 8 разрядов из каждого ряда на ленте. Набор инструкций Z3 состоит из 9 инструкций представленных в таблице 1. Они поделены на 3 группы: ввод/вывод, память и арифметические операторы. Код операции имеет переменную длину от 2х до 4х разрядов. Операторы памяти кодируют адрес слова в младших 6 разрядах, которые способны адресовать 64 слова, как упоминалось ранее.
Инструкции на перфоленте могут располагаться в любом порядке. Инструкции Lu и Ld (Чтение с клавиатуры и Отображение на дисплей) останавливают машину, чтобы у оператора было достаточно времени для ввода числа и записи результата.
Z3 не имеет инструкций условных переходов. Циклы реализуются простым скреплением двух концов перфоленты, но это не позволяет реализовывать условные последовательности инструкций. Следовательно Z3 не является универсальным компьютером в описании Тьюринга.
Таблица 1. Множество инструкций и их кодов машины Z3
Тип | Инструкция | Описание | КОП |
В/в | Lu | Ввод с клавиатуры | 01 110000 |
Ld | Вывод результат | 01 111000 | |
Память | Pr z | Загрузить с адреса z | 11 z6z5z4z3z2z1 |
Ps z | Записать по адресу z | 10 z6z5z4z3z2z1 | |
Арифметические | Lm | Умножение | 01 001000 |
Li | Деление | 01 010000 | |
Lw | Квадратный корень | 01 011000 | |
Ls1 | Сложение | 01 100000 | |
Ls2 | Вычитание | 01 101000 |
Число циклов
Z3 является синхронной машиной. Каждый цикл разделен на 5 стадий, называемых I, II, III, IV и V. На стадии I происходит декодирование инструкции с перфоленты. Основными арифметическими операциями являются сложение и вычитание экспоненты и мантиссы. Операции могут исполняться в первых трех стадиях каждого цикла. Стадии IV и V используются для подготовки аргументов к следующим операциям или вывода результата.
Таблица 2. Число циклов, необходимых для выполнения инструкций
Операция | Число циклов |
Умножение | 16 |
Деление | 18 |
Квадратный корень | 20 |
Сложение | 3 |
Вычитание | 4 или 5, зависит от результата |
Ввод с клавиатуры | от 9 до 41, зависит от экспоненты |
Вывод результата | от 9 до 41, зависит от экспоненты |
Загрузка из памяти | 1 |
Запись в память | 0 или 1 |
По словам Цузе, умножение выполняется за 3 секунды. Учитывая то, что операция умножения требует 16 циклов, можно оценить, что рабочая частота Z3 составляет 3/16 = 5,33 Гц. Любопытно то совпадение, что симулятор Z3, который мои студенты реализовали на персональном компьютере, тоже требует около 3х секунд для умножения.
Число циклов необходимых для инструкций Ввода с клавиатуры и Вывода на дисплей переменно, потому что зависит от экспоненты аргументов. Т.к. ввод должен преобразовывать десятичное представление в двоичное, количество умножений на 10 или 0,1 определяется значением десятичной экспоненты (рассмотрим ниже).
Сложение и вычитание требуют больше одного цикла потому, что в случае с числами плавающей запятой, нам необходимо привести экспоненты обоих аргументов к одному значению. Это требует дополнительных сравнений и сдвигов.
Число может быть записано в память за 0 циклов в том случае, когда результат последней арифметической операции может быть перенаправлен на требуемый адрес памяти. В этом случае цикл, необходимый для инструкции записи, совпадает с последним циклом арифметической операции.
Программная модель
Очень важно описать машину Z3 с точки зрения программиста. С точки зрения программного обеспечения, Z3 состоит из 64 слов в памяти, способных загружаться в 2 регистра с плавающей запятой, которые я для простоты назову R1 и R2. Два регистра хранят аргументы для арифметической операции. Программист может писать любые последовательности инструкций, но должен помнить о состоянии регистров.
Важно помнить последовательность: Первая операция загрузки в программе (Pr z) загружает содержимое адреса z в R1. Все последующие операции загрузки загружают слово из памяти в R2. Инструкция Ввода с клавиатуры загружает число в R1 и ОЧИЩАЕТ R2, который используется как временное значение при преобразовании десятичного ввода в двоичное представление.
Арифметические операции не содержать аргументов в коде операции. Всегда используются следующие аргументы:
Умножение | R1 := R1 * R2 |
Деление | R1 := R1 / R2 |
Сложение | R1 := R1 + R2 |
Вычитание | R1 := R1 — R2 |
Квадратный корень | R1 := sqrt(R1) |
R2 сбрасывается в 0 после арифметический инструкций, записывающих результат в R1. Последующие операции загрузки из памяти отсылают значение в R2. Инструкции записи в память и вывода на дисплей всегда берут значение из R1, который содержит результат последней арифметической операции. После операций сохранения или вывода, R1 сбрасывается в 0 (при отключении реле, которые потом будут готовы к принятию нового значения). Следующая загрузка из памяти происходит в R1.
Приведем пример для лучшего понимания программной модели Z3. Предположим, нам требуется рассчитать полином методом Горнера.
Далее будем считать, что аргументы a4, a3, a2 и a1 хранятся в четвертой, третей, второй и первой ячейках памяти соответственно. Значение z хранится в пятой. Программа приведена ниже:
После исполнения последней инструкции процессор сбрасывается с исходное
состояние.
Блочная диаграмма Z3
Процессор
Маленькие блоки обозначенные Ea, Eb, Ec, Ed, Ef, Fa, Fb, Fc, Fd и Ff являются релейными блоками (далее РБ), открывающими и закрывающими шины. К примеру, чтобы предать значение содержимое регистра Af в регистр Aa, необходимо установить РБ Ea в единицу. Как мы можем видеть из рис. 3, содержимое Af может быть перенесено в Aa или Ab, а содержимое Ae может быть перенесено в Aa, Ab или Af, в зависимости от состояния РБ. Часть B арифметического устройства устроена аналогично, но с добавлением мультиплексора управляемого переключателем Bt и сдвигающих устройств между Bа и Ba, и между Bf и Bb. Первое сдвигающее устройство может сдвигать мантиссу в пределах 2 разрядов влево или 1 разряда вправо. Оно осуществляет деление Bf на 4 или умножение на 2. Второе сдвигающее устройство способно сдвинуть Af на одну из 16 позиций влево или одну из 15 позиций вправо. Эти сдвигающие устройство требуется для сложения и вычитания чисел с плавающей запятой. Операции умножения и деления на степени двойки могут осуществляться с последующей арифметической операцией без затрат дополнительного времени.
Таблица 3. Разрядность регистров
Af | 7 разрядов | Bf | 17 разрядов |
Aa | 8 | Ba | 19 |
Ab | 8 | Bb | 18 |
Ae | 8 | Be | 18 |
Простейшей операцией над каналом данных является сложение и вычитание мантиссы и экспоненты. Когда переключатели As или Bs установлены в 1, АЛУ переводит второй аргумент в дополнительный код, т.е. меняет его знак (Ab или Bb). Следовательно, если переключатель As установлен в 1, то АЛУ части A осуществляет вычитание, в противном случае сложение. Часть B и переключатель Bs работают аналогично.
Предположим имеется два числа с равными экспонентами, которые необходимо сложить. Первая экспонента хранится в Af, а вторая в Ab. Поскольку они равны, эта часть машины не должна производить никаких операций. В части B, мантисса первого числа хранится в Bf, а мантисса второго в Bb. Первый этап состоит в переносе числа из Bf в Bf, для чего необходимо установить релейный блок Fa в 1. Далее происходит сложение. Для того чтобы результат Ba+Bb записался в Be, необходимо установить переключатель Bt в 1. РБ Ff в настоящий момент установлен в 1, и результат помещается в Bf. Архитектура должна предоставлять правильную последовательность воздействий на переключатели для исполнения желаемой операции. Z3 осуществляет это благодаря технике, очень похожей на микропрограммирование.
Устройство управления
На рис. 4 изображена детальная схема устройства управления и панелей ввода/вывода. Схема Pa декодирует код операции, считаный с перфоленты. Если это инструкция памяти, то схема Pb посылает на шину адреса младшие 6 бит из кода операции. Устройство управления определяет микропоследовательности инструкций. Для каждого оператора из набора инструкций имеется специальные схемы.
Микроуправление Z3
В основе Устройства управления лежит контроллер микропоследовательностей. Перед рассмотрением принципа его работы, нам необходимо подробно рассмотреть алгоритмы арифметических инструкций Z3. На рис. 5 показана основная идея. Каждый цикл состоит из 5 стадий. На стадиях IV и V осуществляется ввод информации в машину. На стадиях I, II и III происходит сложение/вычитание, в частях A и B. Я назвал эту фазу инструкции — «исполнение». Типичная инструкция осуществляет выборку аргументов, исполнение и запись результата. Цузе удалось сократить время исполнения за счет перекрытия стадий выборки аргументов для следующей инструкции и записи результата текущей. В итоге можно считать, что исполнительный цикл состоит из двух этапов (на рис. 5 обозначены первые два цикла).
Контроллер микропоследовательностей реализован с помощью специального управляющего колеса. Реализованы отдельные колеса для алгоритма умножения, деления и взятия квадратного корня. Подвижный рычаг, изображенный на рис. 6, начинает вращаться по часовой стрелке, как только устройство управления декодирует соответствующую инструкцию. За каждый цикл рычаг перемещается на одну позицию. Рычаг проводит электричество и активирует схемы с которыми приходит в контакт. В примере изображенным на рис. 6, подвижный рычаг устанавливает переключатель Ea в 1 на первом цикле. Это ведет к переносу числа из регистра Af в Aa. На следующем цикле, активизируются переключатели Ec и Fc. В этом случае результаты операции в частях A и B записываются в регистры Aa и Ba, соответственно. Как мы можем видеть, использование таких колес управления предоставляет платформу для легкой модификации микропоследовательностей определенных операторов. Аналогично устроены контроллеры микропоследовательностей в современных микропроцессорах. Я не назвал этот способ микропрограммированием, потому что в нашем случае контроллер микропоследовательностей является аппаратным, но очевидно, что микропоследовательности и микропрограммы тесно связаны.
Использование контроллеров микропоследовательностей позволило Цузе сильно упростить машину. После того, как основные схемы были готовы на их основе совершенствовалось устройство управления, пока не удалось достичь оптимальной последовательности микрокоманд. Инженер, проектируя «микропрограмму», должен учитывать множество деталей, иначе короткое замыкание может уничтожить машину. Механическая Z1 была более чувствительна в этом отношении, чем Z3. По завершению этого этапа был список последовательностей, которые программист должен избегать, что бы не допустить порчу оборудования. Одна из таких последовательностей по неосторожности была запущена в Берлинском музее технологий и транспорта, и привела к небольшим повреждениям реконструкции Z1 в 1994 г.
Сумматоры
Важной особенностью сумматора Z3, является вычисление суммы и разности методом, называемом схемой ускоренного переноса. Если бинарное сложение осуществляется прямым образом, перенос передается от каждого разряда на один бит далее. В случае с мантиссой, требуется 16 циклов для передачи переноса одного разряда. Сложение в реализации Цузе значительно быстрее, где сложение и вычитание осуществляется в течении I, II и III фазах одного цикла. Для вычитания второй аргумент переводится в обратный код с добавлением единицы к младшему разряду (дополнительный код).
Рассмотрим сложение регистров Ba и Bb. Я буду обозначать i-ый разряд регистра Bb как bbi или Bb[i]. В такой нотации будут обозначаться все регистры. Первый промежуточный результат получается поразрядным Исключающим ИЛИ между двумя регистров, т.е. bci=bai XOR bbi. Второй промежуточный результат получается поразрядной конъюнкцией между двумя регистрами, т.е. bai AND bbi. Следующая операция находит разряды, для которых требуется перенос. Промежуточный результат bdi вычисляется по схеме, изображенной на рис. 7. Обратите внимание, что если разряд установлен в единицу, то по соответствующей линии переноса идет ток, в противном случае источник питания отключен (что бы не произошло короткое замыкание). Схема подключения переключателей bc1. bc-16 показана на рис. 7. Если разряд bci установлен в единицу, соответствующий переключатель разомкнут. Итоговый результат равен bei = bdi XOR bci. Подобная схема позволяет переместить перенос на последний разряд значительно быстрее. В случае, если все переключатели активны, перенос перемещается от первого разряда к последнему не затрачивая времени.
Числовые алгоритмы
В этом разделе я опишу алгоритмы над числами с плавающей запятой, используемые в Z3. Все они, без исключения, используются в обычных маленьких последовательных процессорах с плавающей запятой.
Исключения чисел с плавающей запятой
Цузе реализовал обработку исключений используя всего 5 реле. Эта особенность Z3 является одной из самых элегантных во всем дизайне. Большинство ранних микропроцессоров в 1970х не обладали обработкой исключений и реализовывали их программно. Подход Цузе более совершенный, поскольку он освобождает программистов от необходимости все время проверять границы чисел перед каждой операцией.
Сложение и Вычитание
Для сложения или вычитания двух чисел с плавающей запятой x и y, они должны быть представлены с одинаковой экспонентой. После этого сложение и вычитание осуществляется только над мантиссой. Если экспоненты отличаются, мантисса меньшего числа сдвигается вправо на необходимое количество разрядов ( а экспонента соответственно инкремируется так, чтобы операнд сохранял свое значение ), чтобы экспоненты сравнялись. Конечно может случиться так, что меньшее число станет нулем после 17 смещений вправо.
Знаки операндов сравниваются перед принятием решения о типе выполняемой операции. Если запрошено сложение, то выполняется сложение в случае одинаковых знаков и вычитание в случае различных знаков. Если запрошено вычитание и знаки одинаковы, то выполняется вычитание, а если различны то выполняется сложение.
Таблица 4. Циклы алгоритма сложения
Цикл | Стадия | Экспонента | Мантисса |
0 | I, II, III | ||
1 | IV, V | Aa := Af | |
I, II, III | Ae := Aa — Ab | Be := 0 + Bb | |
2 | IV, V | If( Ae >= 0 ) then Ab:=0, Aa:=Af else Aa:=0 | If( Ae >= 0 ) then Ba:=Bf, Bb:=Be(shifted) else Ba:=Be, Bb:=Bf(shifted) |
I, II, III | If( Be>=2 ) then Ae:=Aa+Ab+1 else Ae:=Aa+Ab | Be:=Ba+Bb | |
3 | IV, V | Af:=Ae | if(Be>=2) then Bf:=Be/2 else Bf:=Be |
Таблица 5. Циклы алгоритма вычитания
Цикл | Стадия | Экспонента | Мантисса |
0 | I, II, III | ||
1 | IV, V | Aa := Af | |
I, II, III | Ae := Aa — Ab | Be := 0 + Bb | |
2 | IV, V | If( Ae >= 0 ) then Ab:=0, Aa:=Af else Aa:=0 | If( Ae >= 0 ) then Ba:=Bf, Bb:=Be(shifted) else Ba:=Be, Bb:=Bf(shifted) |
I, II, III | Ae:=Aa+Ab | Be:=Ba-Bb | |
3 | IV, V | Af:=Ae, Ab:=0 | Ba:=0, Bb:=Be |
I, II, III | Ae:=Aa+Ab | Be:=Ba-Bb | |
4 | IV, V | Aa:=Ae Ab:= Число сдвигов | Bb:=Be(shifted) (Be нормализован сдвигами влево) |
I, II, III | Ae:=Aa-Ab | Be:=0+Bb | |
5 | IV, V | Af:=Ae | Bf:=Be |
Умножение
Основной цикл умножения имеет следующий вид:
Ba := Be / 2
Be := Ba + Bb * (i-ый бит Bf)
Результатом умножения мантисс является число 1 = 2. Если условие выполняется, то результат сдвигается на один разряд вправо, а экспонента инкремируется.
Таблица 6. Циклы алгоритма умножения
Цикл | Стадия | Экспонента | Мантисса |
0 | I, II, III | ||
1 | IV, V | Aa := Af | |
I, II, III | Ae := Aa + Ab | If( Bf[-14]=1 ) then Be:=Ba+Bb else Be:=Ba | |
2 | IV, V | Aa:=Ae, Af:=0, Ab:=0 | Ba:=Be/2 |
I, II, III | Ae := Aa + Ab | If( Bf[-13]=1 ) then Be:=Ba+Bb else Be:=Ba | |
3 | IV, V | Aa:=Ae | Ba:=Be/2 |
I, II, III | Ae:=Aa+Ab | If( Bf[-12]=1 ) then Be:=Ba+Bb else Be:=Ba | |
. | . | . | . |
i | IV, V | Ae := Aa + Ab | Ba:=Be/2 |
I, II, III | Aa:=Ae | If( Bf[i-15]=1 ) then Be:=Ba+Bb else Be:=Ba | |
. | . | . | . |
15 | IV, V | Af:=Ae | Ba:=Be/2 |
I, II, III | if(Be>=2) then Ae:=Aa+1 | If( Bf[0]=1 ) then Be:=Ba+Bb else Be:=Ba | |
16 | IV, V | Af:=Ae | If( Be >= 2 ) then Bf:=Be/2 else Bf:=Be Bb:=0 |
Деление
Основная идея алгоритма очень проста. Экспонента результата получается в результате вычитания экспонент делимого и делителя. Теперь о мантиссах: Пусть нам необходимо вычислить x/y для мантисс x и y. Т.к. мы имеем дело с нормализованными числами, то первая цифра результата равна единице, в случае если x >= y, и нулю в случае если x 0) then Be := Ba–Bb, Bf[i] := 1
else Be := Ba
Bf[i] := 0
Извлечение квадратного корня
Это условие истинно, если:
Определим t-i с помощью выражения:
Это может быть записано как:
в которой мы используем рекурсивное определение:
Упростив предыдущее выражение мы получаем:
Ba := 2 x Be
Bb := 2 x Bf
Bb[-i] := 1
if( Ba — Bb >= 0 ) then Be := Ba — Bb, Bf[-i] := 1
else Be := Ba, Bf[-i] := 0
Для вычисления квадратного корня используются все разряды регистра Bf. Если исходное число находится в заданном диапазоне, то результат тоже находится в заданном диапазоне.
Таблица 8. Циклы алгоритма извлечения квадратного корня
Цикл | Стадия | Экспонента | Мантисса |
0 | I, II, III | ||
1 | IV, V | If( Af[0]=1 ) then Ba:=2 * Bf else Ba:=Bf Bb[0]:=1 | |
I, II, III | If( Ba-Bb >= 0 ) then Be:=Ba-Bb, bt:=1 else Be:=Ba, bt:=0 | ||
2 | IV, V | Bf:=0 if(bt=1) then Bb[0]:=1, Ba:=2*Be Bb:=2*Bf, Bb[-1]:=1 | |
I, II, III | If( Ba-Bb >= 0 ) then Be:=Ba-Bb, bt:=1 else Be:=Ba, bt:=0 | ||
3 | IV, V | if(bt=1) then Bb[-1]:=1, Ba:=2*Be Bb:=2*Bf, Bb[-2]:=1 | |
I, II, III | If( Ba-Bb >= 0 ) then Be:=Ba-Bb, bt:=1 else Be:=Ba, bt:=0 | ||
. | . | . | . |
i | IV, V | if(bt=1) then Bb[2-i]:=1, Ba:=2*Be Bb:=2*Bf, Bb[1-i]:=1 | |
I, II, III | If( Ba-Bb >= 0 ) then Be:=Ba-Bb, bt:=1 else Be:=Ba, bt:=0 | ||
. | . | . | . |
18 | IV, V | if(bt=1) then Bb[-16]:=1, Ba:=2*Be Bb:=2*Bf | |
I, II, III | If( Ba-Bb >= 0 ) then Be:=Ba-Bb, bt:=1 else Be:=Ba, bt:=0 | ||
19 | IV, V | Aa:=Af / 2 | Ba:=Bf, Bb:=0 |
I, II, III | Ae:=Aa+0 | Be:=Ba+Bb | |
20 | IV, V | Af:=Ae | Bf:=Be |
Инструкции Ввод с клавиатуры и Вывод результата
Две наиболее сложные инструкции Z3 c вводом и выводом в десятичной системе счисления. Десятичные числа из 4 цифр вводятся через клавиатуру и конвертируются в бинарное представление. Это осуществляется путем чтения каждой цифры последовательно, преобразования ее в двоичное представление и сохранения в разряды Ba[-10], Ba[-11], Ba[-12] и Ba[-13] регистра Ba. Число в регистре умножается на 10 и процедура повторяется с оставшимися цифрами. После 4 итераций десятичный ввод полностью преобразуется в двоичное представление (экспонента двоичного представления формируется косвенно через сдвиги при умножении на 10). Наиболее сложную часть составляет обработка экспоненты. Если экспонента e положительна, мантисса умножаться e раз на 10. Если отрицательная, то |e| раз на 0.1. Умножение на 10 относительно простое: мантисса в Be может быть сдвинута на 1 разряд влево и потом сохраниться в Ba (т.е. Ba := 2 x Be). В тоже время Be может быть сдвинута на 3 разряда влево и потом сохраниться в Bb (т.е. Bb := 8 x Be). Сложение Ba и Bb дает искомый результат: умножение числа из Be на 10. Процесс занимает 4 цикла для каждого умножения, итого 32 цикла для десятичной экспоненты +8. Так как операции чтения требуется минимум девять циклов, то это означает, что десятичное число с экспонентой +8 читается за 41 циклов.
В случае отрицательной экспоненты, умножение на константу 0.1 осуществляется так же с помощью сдвигов и сложения. Это умножение немного сложнее, т. к. число 0.1 в двоичном представлении периодично. Описание микропоследовательности увело бы нас слишком далеко от основной темы, так что мы ее опустим. (Ее можно найти в патентной заявке Цузе. [14]).
Инструкция отображения на дисплеи осуществляется с помощью итеративных умножений или делений на 10. Если бинарная экспонента в регистре R1 положительная, то число умножается на 0.1 столько раз, сколько требуется, что бы сделать двоичную экспоненту равной двум и пока 4 левых разряда регистра Bf содержат число от 0 до 9 (0000 и 1001). Это десятичное число, которое может быть отображено в следующей колонке панели вывода. Число вычитается из мантиссы в Bf и процесс продолжается со следующей цифрой. Если бинарная экспонента в R1 отрицательная, то процесс схож, за тем исключением, что осуществляется умножение на 10.
Общая архитектура Z3
Теперь рассмотрим детальную диаграмму Z3, изображенную на рис. 8. Устройств управления и панели ввода/вывода были рассмотрены ранее. Заметим, что 4 десятичные цифры клавиатуры ввода перемещаются в регистр Ba через блоки переключателей Za, Zb, Zc и Zd, которые активируются друг за другом.
Блок названный «нуль, бесконечность» под Ae представляет собой схемы обработки исключений. Они непрерывно отслеживают шину данных (результаты операций и данных из памяти) и при необходимости устанавливают соответствующие флаги исключений. Сдвигающее устройство под Be используется для сдвига мантиссы на один разряд вправо. Это нужно для нормализации, в случаях когда Be >= 2.
Изобретение компьютера
Основным недостатком Z3 является полное отсутствие условных переходов во множестве инструкций. Когда программа хранится на перфоленте, возможным путем решения этой проблемы является введение нескольких лент и механизма, позволяющего переключаться между лентами (как было с делано в Гарвардской Mark I). Другим путем является использование программного счетчика, чтобы перфолента могла быть перемотана вперед и назад по требованию.
Иногда грань между Вычислительными машинами и Универсальными компьютерами проводится на основе способа хранения программ (внешнего и внутреннего). Я считаю, что этот критерий не является подходящим. Внешняя программа может работать как интерпретатор числовых данных. Внешняя программа становится постоянной частью процессора, а данные становятся программами, таким же образом, каким Универсальная машина Тьюринга работает как интерпретатор. Я считаю, что необходимым условием Универсального компьютера является минимальный набор инструкций и косвенная адресация.[11] Косвенная адресация может симулироваться написанием само-модифицируемой программы, таким образом набор инструкций становится определяющим критерием. Машина с достаточным количеством адресуемой памяти, аккумулятором и способная исполнять инструкции CLR(очистить), INC(инкремент), LOAD, STORE и BZ(ветвление, если нуль) является Универсальным компьютером. В этом случае, машина Z1 не была полноценным компьютером, но такими же было и множество других ранних компьютеров. Машина ABC являлась специализированной машиной, для решения систем линейных уравнений методом Гаусса. Гарвардский Mark I не обладал условным переходом, хотя реализовывал циклы. ENIAC не была программируемой — потоки данных между строительными блоками задавались аппаратно. Условные переходы были доступны с ограничениями, а о само-модифицируемых программах, само собой, и речи быть не могло.
Таблица 9. Сравнение архитектурных особенностей
Машина | Память и ЦП разделены | Условные переходы | Программно или аппаратно программируемые | Самомодифицируемые программы | Косвенная адресация |
Z1 | да | нет | soft | нет | нет |
Машина Атанасова | да | нет | hard | нет | нет |
Гарвардский Mark I | нет | нет | soft | нет | нет |
ENIAC | нет | частично | hard | нет | нет |
Мачестерский Mark I | да | да | soft | нет | нет |
Таблица 10. Некоторые дополнительные архитектурные особенности
Машина | Внутренняя система счисления | С постоянной или плавающей запятой | Поразрядная арифметика | Архитектура | Технология |
Z1 | двоичная | плавающей | нет | последовательная | механическая |
Машина Атанасова | двоичная | постоянная | да | векторная | электронная |
Гарвардский Mark I | десятичная | постоянной | нет | параллельная | электромеханическая |
ENIAC | десятичная | постоянной | нет | поток данный | электронная |
Мачестерский Mark I | двоичная | постоянной | да | последовательная | электронная |
Таблицы 9 и 10 демонстрируют наиболее значимую информацию о ранних вычислительных машинах, упоминаемых выше. Как должно быть ясно из таблиц, ни одна из ранних вычислительных машин не удовлетворяла всем условиям Универсального компьютера. Я так же упомянул Манчестерский Mark I, строившийся с 1946 по 1948 потому, что, насколько я знаю, это первая машина, полностью соответствующая моим условиям Универсального компьютера. Машина Mark I строилась под руководством Фредерика Уильямса( F.C. Williams ) и Тома Килберна (T. Kilburn). Она хранит свою программу в памяти с произвольным доступом реализованной на электронно-лучевой трубке. Все необходимые элементарные инструкции доступны (в модифицированной форме), и несмотря на то, что в ней отсутствует косвенная адресация, в ней может быть реализованы само-модифицируемые программы. Первая программа была запущена в июне 1948, которая рассчитывала наибольший собственный делитель большого числа. В сентябре 1948, Тьюринг получил звание Reader в математическом департаменте Манчестерского университета и написал несколько программ для первого универсального компьютера в мире. Его видение универсального компьютера было опубликовано в 1936, в тот же год, когда было завершено запоминающее устройство Z1. Таблицы 9 и 10 выражают, что изобретение компьютера было коллективным достижением и охватывает 12 лет.
Благодарности
Расшифровка схематической документации была возможна только в сотрудничестве с некоторыми из в моих студентов в университетах в Галле и Берлине. Я благодарю Александра Турма (Alexander Thurm) и Алекса Бауера (Axel Bauer), реализовавших gata-level симулятор процессора Z3. Мы поняли, что такое проблема синхронизации, когда симулятор отказывался запускаться. Так же благодарю Франца Конечного (Franz Konieczny), Реймунда Шпитцера (Reimund Spitzer) и Роланда Шультса (Roland Schultes), написавших часть stand-alone симулятора процессора. Мы начали работать на Z3 с помощью Конрада Цузе, охотно отвечающего на наши вопросы. Мы были поражены, как после более чем 60 лет, вся конструкция Z3 сохраняется у него в голове. С сожалению, Цузе умер в декабре 1995, до того как описание его работы было завершено. Эта работа посвящена его памяти.