Микропроцессор AT&T Hobbit: Архитектура, ориентированная на C
AT&T Hobbit
Микропроцессор AT&T Hobbit 1990-х: RISC-архитектура, оптимизация под C. Разработка Bell Labs, быстрая обработка данных, но не получила коммерческого успеха.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Введение
Дизайн микропроцессора 1990-х годов
1990s microprocessor design
AT&T Hobbit — это микропроцессор, разработанный корпорацией AT&T в начале 1990-х годов. Он был основан на архитектуре CRISP (C language Reduced Instruction Set Processor), напоминающей классический RISC-конвейер, которая, в свою очередь, произошла от разработки C Machine, выполненной в Bell Labs в конце 1980-х годов. Все они были оптимизированы для выполнения кода, скомпилированного из языка программирования C. Конструкция акцентирует внимание на быстром декодировании инструкций, индексированном доступе к массивам и вызовах процедур. Проект был закрыт в марте 1994 года из-за того, что микропроцессору Hobbit не удалось достичь коммерческой успешности.
The AT&T Hobbit is a microprocessor design developed by AT&T Corporation in the early 1990s. It was based on the company's CRISP (C language Reduced Instruction Set Processor) design resembling the classic RISC pipeline, and which in turn grew out of the C Machine design by Bell Labs of the late 1980s. All were optimized for running code compiled from the C programming language. The design concentrates on fast instruction decoding, indexed array access, and procedure calls. The project was ended in March 1994 because the Hobbit failed to achieve commercially viable sales.
Дизайн
В традиционной RISC-конструкции, реализующей архитектуру load-store, доступ к памяти осуществляется посредством инструкций, которые явно загружают данные в регистры и сохраняют данные обратно в память, при этом инструкции, выполняющие операции над данными, работают исключительно с регистрами. Стремясь ограничить операции обработки данных одним тактовым циклом, можно использовать более простой механизм управления для выдачи инструкций, что упрощает настройку конвейера инструкций и добавление поддержки суперскалярности. Однако языки программирования фактически не работают таким образом. Обычно они используют стек, содержащий локальные переменные и другую информацию для подпрограмм, известный как фрейм стека или запись активации. Компилятор генерирует код для создания записей активации, используя архитектуру load-store базового процессора. Машины C в реализации CRISP и последовательно разработанная Hobbit, обе направлены на поддержку типов доступа к памяти, используемых языками программирования, при этом особое внимание уделяется языку программирования C. Они отображаются в адресное пространство, соответствующее вершине стека программы, и к ним осуществляется доступ исключительно с использованием режима адресации относительно стека. Архитектура CRISP описывалась как "машина с 2½ адресами, работающая с памятью", где инструкции могут использовать ноль, один или два адреса памяти и могут использовать элемент стека, называемый аккумулятором, для хранения результатов вычислений. Подобно архитектуре Bellmac 32, архитектура CRISP предоставляет различные инструкции, предназначенные для поддержки вызова процедур: call сохраняет адрес возврата и переходит к подпрограмме; enter выделяет фрейм стека для подпрограммы, при необходимости очищая записи кэша стека; return освобождает фрейм стека и переходит к адресу возврата вызывающей стороны; catch восстанавливает записи стека из памяти. Виртуальные машины для Android (Dalvik), Parrot и Lua также основаны на регистрах.
In a traditional RISC design implementing a load–store architecture, memory is accessed through instructions that explicitly load data into registers and store data back to memory, with instructions that manipulate data working solely on the registers. By seeking to limit the data processing operations to a single clock cycle, a simpler control mechanism can be employed to dispatch instructions, making it easier to tune the instruction pipelines, and add superscalar support. However, programming languages do not actually operate in this fashion. Generally they use a stack containing local variables and other information for subroutines known as a stack frame or activation record. The compiler writes code to create activation records using the underlying processor's load store design. The C Machine in its CRISP implementation, and the Hobbit that followed directly, both aim to support the types of memory access that programming languages use, with the C programming language being a particular consideration. mapped to the address space corresponding to the top of the program stack, these being purely accessible using a stack relative addressing mode. The CRISP architecture was described as a "2½ address memory to memory machine", where instructions can employ zero, one, or two memory addresses and can employ a stack entry called the accumulator for computation results. Reminiscent of the Bellmac 32 architecture, various instructions designed to support procedure calling are provided by the CRISP architecture: call saves the return address and branches to a routine; enter allocates a stack frame for a routine, flushing stack cache entries if necessary; return deallocates the stack frame and branches to the caller's return address; catch restores stack entries from memory. The VMs for Android (Dalvik), Parrot, and Lua are also register based.