iAPX 432 ( Intel Advanced Performance Architecture ) — это снятая с производства компьютерная архитектура, представленная в 1981 году. [1] [NB 1] Это был первый 32-разрядный процессор Intel . Основной процессор архитектуры, общий процессор данных , реализован в виде набора из двух отдельных интегральных схем из-за технических ограничений того времени. Хотя некоторые ранние системы и руководства на базе 8086, 80186 и 80286 также использовали префикс iAPX в маркетинговых целях, линейки процессоров iAPX 432 и 8086 представляют собой совершенно отдельные конструкции с совершенно разными наборами инструкций.
Проект стартовал в 1975 году как 8800 (после 8008 и 8080 ) и должен был стать основным проектом Intel в 1980-х годах. В отличие от 8086 , который был разработан в следующем году как преемник 8080, iAPX 432 был радикальным отходом от предыдущих проектов Intel, предназначенных для другой рыночной ниши и совершенно не связанных с линейками продуктов 8080 или x86 .
Проект iAPX 432 считается коммерческим провалом для Intel и был прекращен в 1986 году. [1] [3]
iAPX 432 назывался «микромэйнфреймом», разработанным для программирования полностью на языках высокого уровня. [4] [5] Архитектура набора инструкций также была совершенно новой и существенно отличалась от предыдущих процессоров Intel 8008 и 8080, поскольку модель программирования iAPX 432 представляет собой стековую машину без видимых регистров общего назначения. Он поддерживает объектно-ориентированное программирование, [5] сборку мусора и многозадачность , а также более традиционное управление памятью непосредственно в оборудовании и микрокоде . Прямая поддержка различных структур данных также предназначена для того, чтобы позволить современным операционным системам быть реализованными с использованием гораздо меньшего количества программного кода , чем для обычных процессоров. Intel iMAX 432 — это прекращенная операционная система для 432, [6] полностью написанная на языке Ada , а Ada также был предполагаемым основным языком для программирования приложений. В некоторых аспектах его можно рассматривать как архитектуру компьютера на языке высокого уровня .
Эти свойства и особенности привели к аппаратному и микрокодовому дизайну, который был сложнее, чем у большинства процессоров той эпохи, особенно микропроцессоров. Однако внутренние и внешние шины (в основном) не шире 16 бит , и, как и в других 32-битных микропроцессорах той эпохи (таких как 68000 или 32016 ), 32-битные арифметические инструкции реализуются 16-битным АЛУ с помощью случайной логики и микрокода или других видов последовательной логики . Увеличенное адресное пространство iAPX 432 по сравнению с 8080 также было ограничено тем фактом, что линейная адресация данных все еще могла использовать только 16-битные смещения, что несколько похоже на первые разработки Intel на основе 8086 , включая современный 80286 (новые 32-битные смещения сегментов архитектуры 80386 были подробно описаны публично в 1984 году). [NB 2]
Используя полупроводниковую технологию своего времени, инженеры Intel не смогли перевести проект в очень эффективную первую реализацию. Наряду с отсутствием оптимизации в преждевременном компиляторе Ada , это способствовало довольно медленным, но дорогим компьютерным системам, выполняющим типичные тесты примерно на 1/4 скорости нового чипа 80286 при той же тактовой частоте (в начале 1982 года). [7] Этот первоначальный разрыв в производительности с довольно низкопрофильной и дешевой линейкой 8086 , вероятно, был главной причиной того, что план Intel заменить последнюю (позже известную как x86 ) на iAPX 432 провалился. Хотя инженеры видели способы улучшить проект следующего поколения, архитектура возможностей iAPX 432 теперь стала рассматриваться скорее как накладные расходы на реализацию, а не как упрощающая поддержка, которой она должна была быть. [7]
Первоначально разработанные для тактовых частот до 10 МГц, фактически продаваемые устройства были рассчитаны на максимальную тактовую частоту 4 МГц, 5 МГц, 7 МГц и 8 МГц с пиковой производительностью 2 миллиона инструкций в секунду на частоте 8 МГц. [8] [9]
Проект Intel 432 начался в 1976 году, через год после завершения 8-битного Intel 8080 и за год до начала их 16-битного проекта 8086. Проект 432 изначально назывался 8800 [5] как их следующий шаг за пределами существующих микропроцессоров Intel 8008 и 8080. Это стало очень большим шагом. Наборы инструкций этих 8-битных процессоров не очень хорошо подходили для типичных компилируемых языков типа Algol . Однако главной проблемой были их небольшие собственные диапазоны адресации, всего 16 КБ для 8008 и 64 КБ для 8080, слишком малые для многих сложных программных систем без использования какого-либо переключения банков , сегментации памяти или аналогичного механизма (который был встроен в 8086 несколько лет спустя). Intel теперь стремилась построить сложную полную систему в нескольких чипах LSI, которая была бы функционально равна или лучше лучших 32-битных мини-компьютеров и мэйнфреймов, требующих целых шкафов старых чипов. Эта система поддерживала бы мультипроцессоры, модульное расширение, отказоустойчивость, передовые операционные системы, передовые языки программирования, очень большие приложения, сверхнадежность и сверхбезопасность. Ее архитектура удовлетворяла бы потребности клиентов Intel в течение десятилетия. [10]
Команду разработчиков iAPX 432 возглавлял Билл Латтин, а Джастин Раттнер (который позже стал техническим директором Intel) был ведущим инженером [11] [12] [13] (хотя один источник [1] утверждает, что ведущим инженером был Фред Поллак ). Первоначально команда работала из Санта-Клары, но в марте 1977 года Латтин и его команда из 17 инженеров переехали на новый объект Intel в Портленде. [12] Позже Поллак специализировался на суперскалярности и стал ведущим архитектором чипа i686 Intel Pentium Pro . [1]
Вскоре стало ясно, что для разработки всего этого потребуются несколько лет и множество инженеров. И точно так же потребовалось бы несколько лет дальнейшего прогресса в законе Мура , прежде чем улучшенное производство чипов смогло бы вместить все это в несколько плотных чипов. Тем временем Intel срочно требовался более простой промежуточный продукт, чтобы соответствовать немедленной конкуренции со стороны Motorola , Zilog и National Semiconductor . Поэтому Intel начала спешно проектировать 8086 как малорискованную инкрементную эволюцию 8080, используя отдельную команду разработчиков. Массовый 8086 был отправлен в 1978 году.
8086 был разработан с учетом обратной совместимости с 8080 в том смысле, что язык ассемблера 8080 мог быть отображен на архитектуру 8086 с помощью специального ассемблера . Существующий исходный код ассемблера 8080 (хотя и не исполняемый код ) таким образом был в некоторой степени сделан совместимым снизу вверх с новым 8086. Напротив, 432 не имел никаких требований к совместимости программного обеспечения или миграции. Архитекторы имели полную свободу делать новый дизайн с нуля, используя любые методы, которые, по их мнению, были бы лучшими для крупномасштабных систем и программного обеспечения. Они применили модные концепции компьютерной науки из университетов, в частности, машины возможностей , объектно-ориентированное программирование, высокоуровневые машины CISC, Ada и плотно закодированные инструкции. Это амбициозное сочетание новых функций сделало чип больше и сложнее. Сложность чипа ограничивала тактовую частоту и удлиняла график проектирования.
Ядро конструкции — главный процессор — было названо Общим процессором данных ( GDP ) и построено как две интегральные схемы : одна ( 43201 ) для извлечения и декодирования инструкций, другая ( 43202 ) для их выполнения. Большинство систем также включали Интерфейсный процессор 43203 ( IP ), который работал как контроллер канала для ввода-вывода , и Присоединённый процессор ( AP ), обычный Intel 8086 , который обеспечивал «вычислительную мощность в подсистеме ввода-вывода». [4]
Это были некоторые из крупнейших [ требуется разъяснение ] проектов той эпохи. Двухчиповый GDP имел общее количество транзисторов около 97 000 [ требуется цитата ] , в то время как одночиповый IP имел около 49 000. Для сравнения, Motorola 68000 (представленный в 1979 году) имел около 40 000 транзисторов. [ требуется цитата ]
В 1983 году Intel выпустила две дополнительные интегральные схемы для архитектуры межсоединений iAPX 432: 43204 Bus Interface Unit ( BIU ) и 43205 Memory Control Unit ( MCU ). Эти чипы позволили создавать практически бессвязные многопроцессорные системы с числом узлов до 63.
Некоторые из инновационных функций iAPX 432 были вредны для хорошей производительности. Во многих случаях iAPX 432 имел значительно более медленную пропускную способность инструкций, чем обычные микропроцессоры той эпохи, такие как National Semiconductor 32016 , Motorola 68010 и Intel 80286. Одна из проблем заключалась в том, что двухчиповая реализация GDP ограничивала его скоростью электропроводки материнской платы. Более серьезной проблемой была архитектура возможностей, требующая больших ассоциативных кэшей для эффективной работы, но в чипах не было места для этого. Набор инструкций также использовал выровненные по битам инструкции переменной длины вместо обычных полуфиксированных байтовых или выровненных по словам форматов, используемых в большинстве компьютерных конструкций. Поэтому декодирование инструкций было более сложным, чем в других конструкциях. Хотя это не мешало производительности само по себе, оно использовало дополнительные транзисторы (в основном для большого барабанного сдвигателя ) в конструкции, в которой уже не хватало места и транзисторов для кэшей, более широких шин и других ориентированных на производительность функций. Кроме того, BIU был разработан для поддержки отказоустойчивых систем, и при этом до 40% времени шины приходилось задерживаться в состояниях ожидания .
Другой серьезной проблемой был его незрелый и ненастроенный компилятор Ada . Он использовал дорогостоящие объектно-ориентированные инструкции в каждом случае вместо более быстрых скалярных инструкций, где это имело бы смысл. Например, iAPX 432 включал очень дорогую инструкцию вызова межмодульной процедуры , которую компилятор использовал для всех вызовов, несмотря на существование гораздо более быстрых инструкций ветвления и ссылки. Другим очень медленным вызовом был enter_environment, который устанавливал защиту памяти. Компилятор запускал его для каждой отдельной переменной в системе, даже когда переменные использовались внутри существующей среды и не нуждались в проверке. Что еще хуже, данные, передаваемые в процедуры и из них, всегда передавались по значению-возврату, а не по ссылке. При запуске теста Dhrystone передача параметров занимала в десять раз больше времени, чем все остальные вычисления вместе взятые. [14]
По данным New York Times , «i432 работал в 5–10 раз медленнее своего конкурента Motorola 68000». [15]
iAPX 432 была одной из первых систем, реализовавших новый стандарт IEEE-754 для арифметики с плавающей точкой. [16]
Результатом неудачи 432 стало то, что разработчики микропроцессоров пришли к выводу, что поддержка объектов в чипе приводит к сложной конструкции, которая неизменно будет работать медленно, и 432 часто приводился в качестве контрпримера сторонниками RISC- дизайна. Однако некоторые считают, что поддержка OO не была основной проблемой 432, и что недостатки реализации (особенно в компиляторе), упомянутые выше, сделали бы любую конструкцию ЦП медленной. После iAPX 432 была только одна попытка создания аналогичной конструкции — процессор Rekursiv , хотя поддержка процесса INMOS Transputer была похожей — и очень быстрой. [ необходима цитата ]
Intel потратила значительное время, деньги и внимание на 432, имела квалифицированную команду, преданную ему, и не хотела полностью отказываться от него после его провала на рынке. Новый архитектор — Гленфорд Майерс — был привлечен для создания совершенно новой архитектуры и реализации для основного процессора, который будет построен в совместном проекте Intel / Siemens (позже BiiN ), что привело к появлению процессоров серии i960 . Подмножество i960 RISC стало популярным на некоторое время на рынке встраиваемых процессоров, но высокопроизводительные 960MC и 960MX с тегированной памятью были проданы только для военных приложений.
По данным New York Times , сотрудничество Intel с HP по процессору Merced (позже известному как Itanium) было попыткой компании вернуться на рынок высокопроизводительных компьютеров. [15]
Инструкции iAPX 432 имеют переменную длину, от 6 до 321 бита. [17] Необычно то, что они не выровнены по байтам, то есть могут содержать нечетное количество битов и следовать друг за другом напрямую, без учета границ байтов. [5]
iAPX 432 имеет аппаратную и микрокодовую поддержку объектно-ориентированного программирования и адресации на основе возможностей . [18] [19] Система использует сегментированную память , с 2 24 сегментами по 64 КБ каждый, обеспечивая общее виртуальное адресное пространство 2 40 байт. Физическое адресное пространство составляет 2 24 байта (16 МБ ).
Программы не могут ссылаться на данные или инструкции по адресу; вместо этого они должны указывать сегмент и смещение внутри сегмента. Сегменты ссылаются на дескрипторы доступа (AD) , которые предоставляют индекс в таблице системных объектов и набор прав ( возможностей ), управляющих доступом к этому сегменту. Сегменты могут быть «сегментами доступа», которые могут содержать только дескрипторы доступа, или «сегментами данных», которые не могут содержать AD. Аппаратное обеспечение и микрокод жестко обеспечивают различие между сегментами данных и доступа и не позволяют программному обеспечению обрабатывать данные как дескрипторы доступа или наоборот.
Системно-определенные объекты состоят либо из одного сегмента доступа, либо из сегмента доступа и сегмента данных. Системно-определенные сегменты содержат данные или дескрипторы доступа для системно-определенных данных с назначенными смещениями, хотя операционная система или пользовательское программное обеспечение могут расширять их дополнительными данными. Каждый системный объект имеет поле типа, которое проверяется микрокодом, так что объект порта не может использоваться там, где необходим объект носителя. Пользовательские программы могут определять новые типы объектов, которые получат все преимущества проверки типа оборудования, посредством использования объектов управления типами (TCO) .
В версии 1 архитектуры iAPX 432 системно определяемый объект обычно состоял из сегмента доступа и, опционально (в зависимости от типа объекта), сегмента данных, указанного дескриптором доступа с фиксированным смещением внутри сегмента доступа.
В релизе 3 архитектуры, для повышения производительности, сегменты доступа и сегменты данных были объединены в один сегмент размером до 128 КБ, разделенный на часть доступа и часть данных размером 0–64 КБ каждый. Это значительно сократило количество поисков в таблице объектов и удвоило максимальное виртуальное адресное пространство. [20]
iAPX432 распознает четырнадцать типов предопределенных системных объектов : [21] : стр.1-11–1-12
Программное обеспечение, работающее на 432, не нуждается в явном освобождении объектов, которые больше не нужны. Вместо этого микрокод реализует часть маркирующей части параллельного алгоритма сбора мусора Эдсгера Дейкстры на лету ( сборщик мусора в стиле «отметить и очистить» ). [22] Записи в таблице системных объектов содержат биты, используемые для маркировки каждого объекта как белого, черного или серого в зависимости от потребностей сборщика. Операционная система iMAX 432 включает программную часть сборщика мусора. [23]
Исполняемые инструкции содержатся в системном «объекте инструкций». [21] : стр. 7-3 Благодаря тому, что инструкции выровнены по битам, 16-битное смещение битов в объекте инструкций позволяет объекту содержать до 65 536 бит (8 192 байт) инструкций.
Инструкции состоят из оператора , состоящего из класса и кода операции , и от нуля до трех ссылок на операнды . «Поля организованы для представления информации процессору в последовательности, необходимой для декодирования». Более часто используемые операторы кодируются с использованием меньшего количества бит. [21] : стр. 7-6 Инструкция начинается с 4- или 6-битного поля класса, которое указывает количество операндов, называемое порядком инструкции , и длину каждого операнда. За ним необязательно следует поле формата от 0 до 4 бит , которое описывает операнды (если операндов нет, формат отсутствует). Затем идут от нуля до трех операндов, как описано в формате. Инструкция завершается 0-5-битным кодом операции, если таковой имеется (некоторые классы содержат только одну инструкцию и, следовательно, не имеют кода операции). «Поле формата позволяет GDP отображаться программисту как архитектура с нулевым, одним, двумя или тремя адресами». Поле формата указывает, что операнд является ссылкой на данные или верхним или следующим за верхним элементом стека операндов. [21] : стр.7-3–7-5