Приложение A. Краткий обзор компьютеров с аппаратной поддержкой стеков
==183
Данное приложение представляет собой список стековых компьютеров, попавших в табл. 2.1 из Части _2 . Сюда попала большая часть стековых машин, представлявшихся на конференциях или попавших в журналы. Для каждого экземпляра перечислена классификационная категория, конструктивное исполнение, цель создания, область использования, датировка разработки, ссылка на источник и дано краткое описание.
AADC
Категория: | SL1 | |
Реализация: | 16-разрядный миникомпьютер | |
Назначение: | Непосредственное исполнение APL, военное оборудование | |
Кто и когда: | Raytheon for the US Navy, 1971 | |
Публикация: | Nissen, S. & Wallach, S. ( 1973 ) |
AADC был разработан для непосредственного исполнения языка APL. Основным местом применения был ВМФ, конкретно авиационная техника морского базирования, поэтому малые размеры и вес были критичны. APL был выбран за удобство перевода в машинный код и эффективность исполнения. В частности лаконичность APL позволяла получить меньшие объёмы кода, а значит, он реже бы вызывал исключения в подсистеме виртуальной памяти. AADC преобразовывал выражения из инфиксной [* обычной ] в постфиксную ( обратную польскую ) нотацию «на лету» во время исполнения. Программы интерпретировались в ходе исполнения специальным модулем управления программой, а исполнялись арифметическим процессором, который представлял собой 1-операндную стековую машину.
AAMP
Категория: | SS1 | |
Реализация: | 16-разрядный микрокодовый процессор | |
Назначение: | Радиационно-стойкий, многозадачная среда военного назначения | |
Кто и когда: | Rockwell International, 1981 | |
Публикация: | Best et al. ( 1982 ) |
==184
AAMP проектировался для военного и космического использования. Стековая архитектура выбрана за лёгкость компиляции и хорошую плотность кода, т.к. бОльшая часть инструкций имела длину 1 байт. AAMP использовал один стек и два указателя. Один - указатель на активационную запись, а другой - на область для вычисления выражений, которая просто размещалась в начале стекового кадра. Многие инструкции допускали использование локальных переменных, адресуемых относительно указателя кадра для сохранения 1-операндного формата. Конструкция имела регистры для четырёх верхних элементов стека вычисления выражений с возможностью сброса из/в основную память.
ACTION PROCESSOR
Категория: | MS0 | |
Реализация: | 16-разрядный секционный процессор | |
Назначение: | Прямое исполнение программ на FORTH | |
Кто и когда: | Computer Tools, 1979 | |
Публикация: | Rust ( 1981 ) |
ACTION Processor FORTHRIGHT - FORTH процессор с микрокодовой архитектурой. В типичной конфигурации аппаратной части имеет стек данных для вычисления выражений и передачи параметров и стек для хранения адресов возврата. Верхние элементы обоих стеков располагаются в регистрах. Для снижения стоимости стеки располагаются в программной памяти.
AEROSPACE COMPUTER
Категория: | SS0 | |
Реализация: | 64-разрядный процессор | |
Назначение: | Особо надёжный многопроцессорный компьютер для космических аппаратов | |
Кто и когда: | Intermetrics, 1973 | |
Публикация: | Miller & Vandever ( 1973 ) |
Aerospace Computer использует стековые инструкции, чтобы экономно расходовать программную память, которая сильнее всего влияет на габариты, вес, энергопотребление и стоимость оборудования для применения в космосе. Кроме того, стековые инструкции выбирались для прямой поддержки языков высокого уровня, позволяющих повысить надёжность. Конструкция сильно напоминает архитектуру B6700. Все вычисления АЛУ ведёт в формате с плавающей запятой. Все целые числа конвертируются в формат с плавающей запятой по мере выборки из памяти. Самый старший бит операнда в стеке сообщает ( если установлен ), что содержимое является указателем, заставляя процессор провести прозрачную для прикладного уровня выборку.
==185
ALCOR
Категория: | ML0 | |
Реализация: | Эмулятор, написанный для нескольких европейских компьютеров | |
Назначение: | Эмулировалась концептуальная машина, призванная обеспечить переносимость программ на ALGOL | |
Кто и когда: | ALCOR joint project, 1958-60 | |
Публикация: | Samelson & Bauer ( 1962 ) |
ALCOR - объединённый проект, одна из самых первых концептуальных попыток создать интерпретатор ALGOL-60. Европейская группа разработала архитектуру машины для языка высокого уровня, которую можно было эмулировать на разных компьютерах. Концепт имел два стека, использовавшихся для разбора и вычисления выражений. Один стек накапливал отложенные операции, а другой - промежуточные результаты. Переменные и адреса возврата статически компилировались в программный код.
AN ALGOL MACHINE
Категория: | ML0 | |
Реализация: | Исследовательский прототип | |
Назначение: | Прямое исполнение ALGOL | |
Кто и когда: | Burroughs, 1961 | |
Публикация: | Anderson ( 1961 ) |
Исследование архитектуры для непосредственного исполнения мотивировалось тем фактом, что две трети машинного времени тратилось тогда на компиляцию и отладку. Основной задачей исследований было упрощение использования компьютеров. Было выбрано прямое исполнение программ на языке высокого уровня. Описываемая модель имела три аппаратных стека для исполнения конструкций языка. Два стека образовывали пару для хранения значений и операторов при разборе и вычислении выражений. Третий стек предназначался для адресов возврата из подпрограмм.
AM29000
Категория: | SL2 | |
Реализация: | 32-разрядный микропроцессор | |
Назначение: | RISC процессор общего назначения | |
Кто и когда: | Advanced Micro Devices ( AMD ) 1987 | |
Публикация: | Johnson ( 1987 ) |
AM29000 - RISC процессор. Система команд не являлась стек ориентированной, но обеспечивала хорошую аппаратную поддержку при передаче параметров через стек в языках высокого уровня. Имеет 192 регистра, 64 из которых - регистры общего назначения, а остальные 128 - используются в качестве стекового кэша. Указатель стекового окна в регистровом файле обеспечивает относительную адресацию регистров. При переполнении стекового кэша последний сбрасывался в основную память под управлением программы. Кристалл имеет возможность разделять 256-элементный регистровый файл на 16 банков для многозадачных приложений. Каждая инструкция может обращаться к регистрам как по абсолютному адресу, так и относительно указателя на регистровый стек.
==186
APL LANGUAGE
Категория: | MS0 | |
Реализация: | Микрокодовая эмуляция на IBM 360/25 с WCS | |
Назначение: | Прямое исполнение APL | |
Кто и когда: | International Business Machines, 1973 | |
Публикация: | Hassitt et al. ( 1973 ) |
APL - интерпретируемый язык, поэтому создание машины с непосредственным исполнением была привлекательной альтернативой для интерпретации на компьютерах общего назначения. В проекте для эмуляции APL-машины использовалась IBM 360 «Model 25» с модулем перезаписываемой управляющей памяти ( WCS ). Система имела два стека в программной памяти: один для вычислений выражений, другой для временного хранения переменных.
BUFFALO STACK MACHINE
Категория: | SS1 | |
Реализация: | эмулятор для B1700 с 32-разрядным микрокодом | |
Назначение: | Исполнение программ на языках с блочной структурой | |
Кто и когда: | State University of New York at Buffalo, 1972 | |
Публикация: | Lutz ( 1973 ) |
BSM представляла собой эмулятор для стековой архитектуры, написанный на микрокоде для Burroughs B1700. Эмулятор проектировался под языки, подобные ALGOL-60. Переменные хранились в формате маркированных данных, в котором 32 бита отводилось на данные, а 4 - на маркер. Прерывания рассматривались как аппаратный вызов подпрограммы и автоматически сохраняли состояние в стеке. Особенностью реализации были прерывания по переполнению/ антипереполнению стека, которые активировались, когда в стеке ещё оставалось место/ данные. Это позволяло избежать аварийного останова программы.
BURROUGHS MACHINES
Линейка стековых компьютеров фирмы Burroughs, начавшаяся ALGOL ориентированной моделью B5000 в 1961. Одной из причин их появления явилась сложность компиляторов для обычных машин, которые в итоге оказывались слишком дорогими для запуска ( в 1961 ). [* Это было время, когда компьютеры были большими ( очень ) и время из работы стоило весьма нехилых денег ] .
B5000 был безоперандной машиной со стеком в программной памяти. Под два верхних элемента стека отводились регистры в центральном процессоре. Данные регистры имели биты статуса, которые сообщали в скольких именно регистрах ( 0 , 1 или 2 ) находятся действительные данные. Это позволяло снизить нагрузку на шину за счёт исключения смежных операций чтения и записи в память ( например, команда «POP» и идущая следом «PUSH» не приводили к считыванию из памяти значения с последующей записью его же обратно ). В B7700 данная схема была доработана и использовала стековые буфера глубиной 32 регистра.
==187
Стеки в этом семействе использовались и для вычисления выражений, и для размещения стековых кадров для вызовов процедур ALGOL. В результате адреса возврата перемежались параметрами. Плюсом размещения стека в программной памяти была быстрая реакция на прерывания и небольшие расходы на сброс/ восстановление стека. Стек позволял аппаратуре единообразно реагировать на вызовы процедур, прерывания и смену задачи.
CALTECH CHIP
Категория: | SS0 | |
Реализация: | 8-разрядный кристалл | |
Назначение: | Студенческий проект по курсу проектирования VLSI | |
Кто и когда: | California Institute of Technology, 1979 | |
Публикация: | Efland & Mosteller ( 1979 ) |
Стековая машина, явившаяся результатом практических занятий на курсе проектирования VLSI. Исходным требованием было спроектировать и выполнить разводку кристалла для простейшего вычислительного устройства, уложившись в две с половиной недели [* ! Чтоб я так жил! Что автор, участвовал? ] . Дабы упростить конструкцию, студенты выбрали безоперандную стековую машину. Стеку отводилась часть программной памяти, а два его верхних элемента располагались внутри процессора. Набор команд был сформирован после окончательного выбора базовых примитивов для студенческого [* ! ] же компилятора Pascal.
CRISP
Процессор CRISP - RISC машина, оптимизированная для исполнения программ на языке Си. Проектировалась как безрегистровая машина, все операнды которой размещались в памяти. Но, т.к. Си использует стек для хранения локальных переменных, большая часть операндов группировалась в памяти, адресуемой относительно указателя стека. Аппаратная поддержка стека включала 32-элементный стековый кэш в процессоре. Действия над данными возле вершины стека проходили целиком в кэше. CRISP поддерживал сжатие переходов - технику, позволявшую выполнять некоторые инструкции одновременно с переходом.
==188
DRAGON
Категория: | SL2 | |
Реализация: | Микропроцессорный комплект из двух микросхем | |
Назначение: | Экспериментальная мультипроцессорная разработка | |
Кто и когда: | Xerox Palo Alto Research Center, 1985 | |
Публикация: | Atkinson & McCreight ( 1987 ) |
DRAGON - экспериментальная разработка, ориентированная на компактный машинный код и быстрый вызов подпрограмм. Инструкции переменной длины и адресация относительно указателя стека позволяли сократить длину инструкции, допуская использование 3-операндной адресации. Исполнительный блок включал 128-элементный регистровый стек с поддержкой кадров переменного размера. Последняя опция реализовывалась парой указателей, которые задавали верхнюю и нижнюю границы стекового кадра.
EM-1
Категория: | SS1 | |
Реализация: | Концептуальный проект | |
Назначение: | Структурное программирование | |
Кто и когда: | Vrije University, The Netherlands, 1978 | |
Публикация: | Tanenbaum ( 1978 ) |
Эта часто упоминаемая работа разбирает вопросы направления и степени влияния структурных методов программирования на конструкцию вычислительных машин и предлагает свой вариант - EM-1 . Основная идея концепта - обеспечить удобное рабочее окружение для хорошо структурированных программ. Для достижения заданных целей в конструкции используется один стек в программной памяти, работающий в обычной для структурных языков манере, и 1-операндная адресация локальных переменных относительно начала стекового кадра в вычислениях, использующих верхушку стека. Разработка предполагала разрешать проблему столкновений между элементами стека и инструкциями на шине памяти за счёт подразумевающихся независимых буферных блоков стекового кэша и кэша инструкций.
EULER
Категория: | SS0 | |
Реализация: | Микрокодовый интерпретатор для IBM 360/30 | |
Назначение: | Исследования микрокодовых реализаций для непосредственной интерпретации языков высокого уровня | |
Кто и когда: | IBM Systems Development Division, 1967 | |
Публикация: | Weber ( 1967 ) |
EULER - расширение языка ALGOL. Проект, описанный в публикации, стал одной из самых ранних попыток реализации в машине прямого интерпретатора. Для решения задачи в стандартную машину IBM 360 «Model 30» был прошит специальный микрокод. Программа на EULER компилировалась в промежуточный байт-код. Каждый байт-код вызывал резидентную подпрограмму в микропрограммной памяти. Результат можно с уверенностью назвать первой «P-кодовой» машиной. Выбор микрокодового интерпретатора определялся тем фактом, что EULER поддерживал ряд структурных элементов, таких как динамическая типизация, динамическое распределение памяти и работа со списками, которые плохо ложились на существовавшие компьютеры. В проекте использовался один стек в программной памяти, который использовался для динамического выделения памяти и вычисления выражений. Инструкции для работы с данными имели безоперандный RPN формат.
==189
FORTH ENGINE
Категория: | ML0 | |
Реализация: | Дискретные микросхемы ТТЛ | |
Назначение: | Прямое исполнение языка FORTH | |
Кто и когда: | Execution of Forth programming language | |
Публикация: | Winkel ( 1981 ) |
Стековый процессор для языка FORTH с микрокодовой реализацией на ТТЛ логике. В дополнение к аппаратному стеку для вычисления выражений и аппаратному стеку возврата имел перезаписываемую память для микрокода шириной 60 бит.
FORTRAN MACHINE
Категория: | MS0 | |
Реализация: | Концептуальный проект | |
Назначение: | Непосредственное исполнение языка FORTRAN | |
Кто и когда: | University of Science and Technology of China, PRC, 1980 | |
Публикация: | Chen et al. ( 1980 ) |
Публикация сообщала о концептуальной разработке машины для прямого исполнения языка FORTRAN. Машину предполагалось оснащать несколькими аппаратными стеками, в которых размещались бы адреса возврата, счётчики циклов с адресами переходов и область для вычисления выражений. Пути реализации не раскрывались, но для уменьшения обмена на шине подошли бы стеки в изолированных участках памяти. Как и в случае других вариантов прямого исполнения, для разбора программы стеки были обязательным элементом.
FRISC 3
Категория: | ML0 | |
Реализация: | 32-разрядный микропроцессор | |
Назначение: | Вычислительная и управляющая машина для космических аппаратов, оптимизированная для языка FORTH | |
Кто и когда: | Johns Hopkins University, 1986 | |
Публикация: | Fraeman et al. ( 1986 ), Hayes ( 1986 ), Hayes & Lee ( 1988 ), Hayes et al. ( 1987 ), Williams et al. ( 1986 ) |
==190
Исполнял базовые примитивы FORTH, позволял группировать несколько операций в разных полях инструкции. Хотя FORTH - безоперандный язык, процессор позволял выбирать любой из 4 верхних элементов стека данных в пару к верхнему элементу стека возврата, т.е. превращался в 1-, 2-операндную машину. Внутрипроцессорные стековые буфера невелики - всего по 16 элементов на данные и адреса. Цифра определялась в первую очередь возможностями технологии.
G-MACHINE
Категория: | SL0 | |
Реализация: | Эмулятор 32-разрядного процессора | |
Назначение: | Сокращение графов | |
Кто и когда: | Oregon Graduate Center, 1985 | |
Публикация: | Kieburtz ( 1985 ) |
Построена специально для сокращения графов в качестве поддержки исполнения функциональных языков. Исполняла G-код, представлявший собой язык с безаргументной адресацией, спроектированный для управления одним стеком. Программная память была сильно структурирована, чтобы удовлетворить требованиям основной задачи - сокращения графов. Каждый элемент памяти имел четыре поля для учёта ссылок и два 32-разрядных поля для указателей на граф.
GLOSS
Категория: | SS0 | |
Реализация: | Концептуальный проект | |
Назначение: | Мулитипроцессорная система с межпроцессорным взаимодействием | |
Кто и когда: | University of Washington, 1973 | |
Публикация: | Herriot ( 1973 ) |
Разработка пыталась задать параметры универсальной машины для широкого набора языков высокого уровня, включающих ALGOL-68, LISP 1.5 и SNOBOL 4. Основывалась на передаче данных по запросу, в которой разные процессы запускались в стиле вызова подпрограмм на многих параллельно включённых процессорах. Каждый процессор имел набор вычислительных стеков в программной памяти.
HITAC-10
Категория: | SS0 | |
Реализация: | Аппаратура расширения для миникомпьютера | |
Назначение: | Эксперимент по расширению существующей архитектуры | |
Кто и когда: | Keio University, Japan, 1974 | |
Публикация: | Ohdate et al. ( 1975 ) |
Стековая архитектура была внедрена в уже построенный миникомпьютер HITAC-10. Для упрощения разработки и конструкции стековая аппаратура была добавлена в адресное пространство ввода-вывода на системной шине. Контроллер стека имел регистры для четырёх верхних элементов стека. Остальной стек располагался в отдельной области памяти и использовал для обмена DMA. В контроллере выделялись два регистра для отслеживания границ основной области памяти. Контроллер стека использовался для передачи параметров подпрограммам. Выполнять арифметические операции над элементами стека аппаратура не могла.
==191
HP300 & HP3000
HP3000 - коммерческая линейка миникомпьютеров, имевших 1-операндную архитектуру. Исходную модель HP300 - можно рассматривать как 3-адресную. Она имела регистры для двух верхних элементов стека. Остальной стек располагался в программной памяти. Позднее HP3000 использовала стеково-аккумуляторную адресацию и буферировала в регистрах 4 элемента стека. Стек имел дополнительные элементы, облегчающие реализацию повторной входимости, рекурсии, совместного использования кода, защиты программ и динамического распределения памяти в многопользовательском окружении. Стек использовался для вычисления выражений, передачи параметров и хранения адресов возврата.
HUT
Категория: | MS0 | |
Реализация: | 16-разрядная машина на секционных процессорах AM2903 | |
Назначение: | Экспериментальное управляющее оборудование для космических аппаратов. Оптимизирован для языка FORTH | |
Кто и когда: | Johns Hopkins University, Applied Physics Laboratory 1982 | |
Публикация: | Ballard ( 1984 ) |
Создавался для управления ультрафиолетовым телескопом HUT в эксперименте Space Shuttle. На момент разработки процессоров, подходящих для этой задачи, среди компонентов для космического использования не существовало, поэтому использовался секционный процессор. Язык FORTH был выбран за простоту реализации, расширяемость и универсальность.
ICL2900
Категория: | SS1 | |
Реализация: | Семейство миникомпьютеров | |
Назначение: | Вычисления общего назначения | |
Кто и когда: | ICL, 1975 | |
Публикация: | Keedy ( 1977 ) |
==192
Разработчики семейства ICL обращали первостепенное внимание на защиту и совместное использование кода в мультипрограммном окружении, облегчение компиляции и исполнения, а также компактность кода. ICL часто сравнивают с современными им машинами фирмы Burroughs, но параметры компьютеров различаются. Одним из отличий было использование в ICL стеково-аккумуляторной 1-операндной адресной схемы и нескольких специализированных регистров. Это позволяло использовать регистр или память в паре с верхним элементом стека.
INTEL 80x86
Категория: | SS2 ( в стековом режиме ) | |
Реализация: | Семейство 16- и 32-разрядных микропроцессоров | |
Назначение: | Вычисления общего назначения | |
Кто и когда: | Intel Corporation 1980's | |
Публикация: | Intel ( 1981 ) |
Линейка, включающая 8088, 8086, 80186, 80286 и 80386, является семейством процессоров общего назначения с регистровой организацией. Для работы со стеком имеются команды «PUSH» и «POP». Многие компиляторы языков высокого уровня создают код, который использует регистр BP в качестве указателя на стековый кадр, содержащий параметры и адрес возврата. Этот режим позволяет рассматривать 80x86 в качестве стекового процессора и включить в список, как вычислительное устройство, допускающее использование в качестве SS2 машины.
INTERNAL MACHINE
Категория: | MS0 | |
Реализация: | Концептуальный проект | |
Назначение: | Прямое исполнение интерпретируемых языков | |
Кто и когда: | North Electric Co., 1973 | |
Публикация: | Welin ( 1973 ) |
Имела цель построить машину с прямым исполнением интерпретируемых языков. Для универсализации была выбрана стековая система команд. Проект специфицировал два стека: один для вычисления выражений, второй для адресов возврата из подпрограмм.
IPL-VI
Категория: | SS1 | |
Реализация: | Концептуальный проект микрокодового интерпретатора | |
Назначение: | Вычисления общего назначения | |
Кто и когда: | Rand Corporation, 1958 | |
Публикация: | Shaw et al. ( 1959 ) |
==193
IPL - серия концептуальных разработок языков программирования высокого уровня. IPL-VI разрабатывался с расчётом на последующую реализацию в качестве интерпретируемого языка с микрокодовой поддержкой. IPL-VI делал упор на продвинутые ( для 1959 года ) структуры данных для нецифровых вычислений, в т.ч. работы со списками. Стек использовался для передачи параметров между подпрограммами. Т.к. вся память в IPL-VI имела структуру элементов списка, стек параметров подпрограмм представлял собой список элементов, каждый из которых указывал на следующую позицию в очереди. Инструкции имели 1-операндный формат.
ITS ( Pascal )
Категория: | SS0 | |
Реализация: | 16-разрядный микропроцессор | |
Назначение: | Прямое исполнение P-кода языка Pascal | |
Кто и когда: | Nippon Electric Co., 1980 | |
Публикация: | Tanabe & Yamamoto ( 1980 ) |
Проектировался для исполнения P-кода языка UCSD Pascal. Разработчики заявляли кратное увеличение скорости по сравнению с полностью компилируемыми версиями для современных им микропроцессоров ( видимо, имея в виду 8086 ). Кристалл ITS содержал 256-элементный стек, который предположительно использовался только для вычисления выражений. Два верхних элемента для скорости размещались в регистрах.
KDF-9
Возможно, KDF-9 был первым стековым компьютером. Его создание было вызвано появлением языка ALGOL-60. Именно на этой машине впервые появились элементы конструкции, повторённые на современных компьютерах. KDF-9 имел стек для вычисления выражений, через который можно было передавать параметры при вызове, и отдельный стек для адресов возврата. К сожалению, из-за технологических ограничений стеки имели глубину всего 16 элементов ( собирались на магнитных кольцах ). Проблема заключалась в том, что, хотя 16 элементов вполне хватало для разбора выражений, компилятор языка ALGOL также был ограничен стеком глубиной 16 элементов, что очень сильно замедляло компиляцию.
KOBE UNIVERSITY MACHINE
==194
Проектировался для эффективного исполнения программ на FORTH и Pascal на стековой машине. FORTH исполнялся за счёт реализации примитивов в микрокоде. Pascal работал на эмуляторе UCSD P-кода. Машина имела отдельный блок памяти данных в дополнение к памяти программ.
LAX2
Категория: | SS0 | |
Реализация: | Микрокодовый интерпретатор на Varian V73 | |
Назначение: | Экспериментальный | |
Кто и когда: | Group for Datalogical Research & Royal Institute of Technology, Sweden, 1980 | |
Публикация: | Bage & Thorelli ( 1980 ) |
Архитектура LAX2 реализована как интерпретатор, частично поддержанный микрокодом. Основная цель - удешевление производства программного обеспечения вместе с экономией памяти и времени выполнения при операциях со строками и в интерактивных задачах. Использовались маркированные типы данных. Каждый процесс имел собственную область памяти, в которой размещался стек для вычислений и динамически распределяемая память со сбором мусора для временного хранения строк.
LILITH
Lilith - машина, созданная Никлаусом Виртом для прямого исполнения языка Modula-2. Цель создания - эффективность исполнения Modula-2 и поддержка интерактивного интерфейса пользователя. Для сокращения объёма кода использовалась стековая архитектура. Имела два стека: в программной памяти для передачи параметров и аппаратный для вычисления выражений. Набор инструкций стековый с возможностью чтения любого элемента в стеке параметров в паре с верхним элементом вычислительного стека.
LISP MACHINES
==195
Архитектура LISP-машин - серьёзная тема, заслуживающая отдельного рассмотрения. Здесь просто приводятся некоторые из общих характерных черт таких процессоров. LISP-машины тяготеют к мультистековой конфигурации и 1-адресному ( со смещением от верхнего элемента стека ) формату инструкций. Некоторые модели имеют большие аппаратные стеки ( свыше 1k слов ), которые могут сбрасываться в программную память. Здесь очень важны вызовы процедур, т.к. использование рекурсии при обходе списков - обычное дело. Такие машины сохраняют элементы данных в памяти, имеющей механизм сбора мусора.
MCODE
Проектировалась для исполнения M-кода языка Modula-2, который получался при компиляции диалекта StarMod. Основывалась на конструкции Таненбаума EM-1 , но вводила некоторые улучшения, помогающие решить проблемы, возникающие в реальных компьютерах. Одним из таких изменений было введение инструкции, которая изменяла тип данных ( целое, с плавающей запятой и т.д. ) для всех последующих операций.
MESA
MESA на самом деле модульный язык, расширенный с учётом архитектурных особенностей семейства процессоров. Целями разработки были компактность кода и независимость от реализации. Использовался один стек для вычисления выражений и передачи параметров процедурам и 0-операндный формат инструкций. Подробностей об аппаратной реализации стека нет, но архитектура следовала общим тенденциям в конструкции машин с небольшими стековыми буферами и основным стеком в программной памяти. В наборе команд имелась интересная инструкция «RECOVER», которая сохраняла только что выброшенный из стека элемент, ещё не перезаписанный другой инструкцией, за счёт восстановления указателя стека без реальной операции записи.
==196
MF1600
Категория: | ML0 | |
Реализация: | 16-разрядная машина на дискретной ТТЛ логике | |
Назначение: | Вычисления общего назначения | |
Кто и когда: | Xycom & Advance Processor Designs, 1987 | |
Публикация: | Burnley & Harkaway ( 1987 ) |
Процессор, стоявший в устройстве Xycom XVME-616, представлял собой высокопроизводительную FORTH-машину, собранную на микросхемах быстрой ТТЛ логики. Имела 16-разрядные шины передачи данных и микрокодовое ПЗУ, которое разработчик мог модифицировать под конкретный круг задач.
MICRO-3L
Категория: | SL1 | |
Реализация: | Симулятор | |
Назначение: | Функциональное программирование | |
Кто и когда: | University of Utah, 1982 | |
Публикация: | Castan & Organick ( 1982 ) |
Проект использовал 3L-модель для задания процессора, который бы хорошо подходил для работы со списками. Проект предполагал создание многопроцессорной системы для исполнения функциональных языков. Каждый MICRO-3L процессор использовал 256-элементный регистровый файл. 128 регистров предполагалось использовать под стек адресов возврата. При переполнении он должен был скидываться в основную память. Работа с данными велась с использованием аккумулятора и операнда из нижних 128 элементов регистрового файла.
MICRODATA 32/S
Категория: | SS0 | |
Реализация: | Микрокод для 16-разрядного регистрового миникомпьютера | |
Назначение: | Работа на диалекте PL/I | |
Кто и когда: | Microdata Corporation, 1973 | |
Публикация: | Burns & Savitt ( 1973 ) |
Microdata 32/S была версией Microdata 3200 - миникомпьютера общего назначения с дополнительным микрокодом, реализующим стековые инструкции. Система 3200 представляла собой 16-разрядный миникомпьютер, построенный на дискретной ТТЛ логике. Обоснованием добавления стековых компонентов была невозможность получения эффективного кода от имевшихся компиляторов. Стековая архитектура облегчала кодогенерацию. Причиной важности эффективного кода было стремление избавиться от программирования на ассемблере. Стек в основной памяти использовался для вычисления выражений и передачи параметров. Четыре верхних элемента буферировались в регистрах.
==197
MISC M17
Категория: | MS0 | |
Реализация: | 16-разрядный процессор | |
Назначение: | Недорогая схема для управления в реальном времени | |
Кто и когда: | Minimum Instruction Set Computer, Inc., 1988 | |
Публикация: | MISC ( 1988 ) |
MISC M17 - недорогой микропроцессор для встраиваемых систем. Набор команд базируется на примитивах FORTH. В противоположность большей части прочих FORTH-машин, в M17 стоимость снижалась за счёт компромисса с производительностью. Два стека размещались в программной памяти, а несколько верхних элементов буферировались в регистрах внутри чипа.
MOTOROLA 680x0
Категория: | MS2 ( в стековом режиме ) | |
Реализация: | Семейство 32-разрядных микропроцессоров | |
Назначение: | Вычисления общего назначения | |
Кто и когда: | Motorola Corporation 1980's | |
Публикация: | Kane et al. ( 1981 ) |
Семейство микропроцессоров, включающее 68000, 68010, 68020 и 68030 с регистровой архитектурой общего назначения. Регистры делились на две группы: адресные и регистры данных. Адресные регистры поддерживали постинкрементный и предекрементный режим адресации, что позволяло иметь в системе до 8 стеков, по одному стеку на регистр. По соглашению регистр A7 использовался в качестве указателя на стековый кадр в большинстве компиляторов. Естественно, почти никто не использовал 680x0 как мультистековую машину, но так или иначе такая возможность имеется.
MU5
Категория: | SS1 | |
Реализация: | Миникомпьютер | |
Назначение: | Исследования | |
Кто и когда: | University of Manchester, 1971 | |
Публикация: | Morris & Ibbett ( 1979 ) |
MU5 использовал 1-операндный формат инструкций и один стек в программной памяти. Стековые инструкции использовались для облегчения кодогенерации, уменьшения размеров программ и упрощения аппаратуры. Интересной особенностью были 5 регистров, доступных программисту, причём все они были регистром «вершина стека». Команда, размещающая в регистре данные, автоматически сохраняла предыдущее значение в общем стеке. Такой вариант отличается от пяти верхних элементов стека, доступных в качестве регистров.
==198
NC4016
NC4000, в последствии переименованный в NC4016, был первым микропроцессором, предназначенным для исполнения языка FORTH. Два аппаратных стека располагались снаружи и подключались к NC4016 через специализированные шины. Два верхних элемента стека данных и один стека возврата буферировались во внутренних регистрах. Процессор исполнял большую часть примитивов FORTH, включая вызов подпрограмм, за один машинный цикл и позволял при соблюдении определённых условий собирать в одну инструкцию несколько операций.
NORMA
Категория: | SL0 | |
Реализация: | Экспериментальная машина | |
Назначение: | Функциональное программирование, сокращение графов | |
Кто и когда: | Burroughs Corporation Austin Research Center, 1986 | |
Публикация: | Scheevel ( 1986 ) |
NORMA - исследовательский процессор фирмы Burroughs, предназначенный для скоростного сокращения графов, как составной части работы под управлением функциональных языков. Пять специализированных блоков были подключены к общей шине и занимались арифметикой, памятью для хранения графов, сбором мусора, работой с графами и операциями ввода-вывода. Граф-процессор имел один стек, который использовался при обходе графа в глубину для древовидных графов программ.
OPA ( Pascal )
OPA создавался для эффективного исполнения компилированного кода языка Pascal. Имел три стека: один для вычисления выражений, один для сохранения параметров подпрограмм и один для адресов возврата. Набор инструкций OPA заявлялся как «компактный язык высокого уровня», т.к. некоторое количество команд поддерживало конструкции языка Pascal.
==199
PASCAL MACHINE
Категория: | ML0 | |
Реализация: | Экспериментальный процессор | |
Назначение: | Прямое исполнение исходного текста Tiny-Pascal | |
Кто и когда: | University of Maryland, 1981 | |
Публикация: | Lor & Chu ( 1981 ) |
Интерактивная P-машина для прямого исполнения исходных текстов на языке Pascal. Система включает аппаратную реализацию исполнительного и компилирующего устройства, поэтому аппаратных стеков в системе достаточно. Стеки используются для хранения адресов возврата, последовательности операторов, вычисляемых значений и уровней вложенности программ. Выражения вычисляются по мере интерпретации, поэтому работа исполнительного модуля ничем не отличается от 0-операндной стековой архитектуры.
PDP-11
Категория: | MS1 ( в стековом режиме ) | |
Реализация: | Семейство мини и микрокомпьютеров ( позднее семейство VAX ) | |
Назначение: | Миникомпьютер общего назначения | |
Кто и когда: | Digital Equipment, 1970 | |
Публикация: | Bell et al. ( 1970 ) |
DEC PDP-11 один из первых компьютеров общего назначения с регистровой архитектурой получивший возможность работы со стеком. Хотя машина была чисто регистровой, ей были приданы некоторые возможности, свойственные 1-адресной стековой архитектуре. Благодаря косвенной регистровой адресации с авто постинкрементом и предекрементом, регистр общего назначения легко превращался в указатель стека. В PDP-11 был и настоящий указатель стека, который использовался в прерываниях, исключениях и вызовах подпрограмм. Позднее в линейке VAX появилась аппаратная поддержка динамического управления стековым кадром для одного стека. Опция предназначалась для языков с блочной структурой. PDP-11 - регистровая машина общего назначения, но публикация Белла рассказывает, как её можно использовать в режиме MS1 .
POMP PASCAL
Категория: | SS1 | |
Реализация: | Секционный процессор ( AMD 290x ) | |
Назначение: | Исследования промежуточных представлений для языков с блочной структурой | |
Кто и когда: | Stanford University, 1980 | |
Публикация: | Harris ( 1980 ) |
==200
POMP использовал секционные процессоры для исполнения стекового кода. Такой код был выбран, чтобы сократить размер программ, и позволял получить 3-8 кратный выигрыш по сравнению с традиционными компиляторами. Фактически по заявлениям разработчика он всего в 1.5 раза проигрывал идеальному энкодеру DEL Флинна, но был гораздо удобнее для декодирования, т.к. работал в байтовом формате. Стековая машина могла использовать до 8 локальных переменных, что превращало её в 1-операндную.
PSP
Категория: | ML2 | |
Реализация: | Проект архитектуры | |
Назначение: | Вычисления общего назначения | |
Кто и когда: | University of Illinois, 1985 | |
Публикация: | Eickemeyer & Patel ( 1985 ) |
PSP - попытка совместить функции обычной регистровой машины с преимуществами, которые давали аппаратные стеки, сохраняющие регистры при вызове. Достигается такой результат размещением стека за каждым регистром машины. При вызове каждый регистр кладётся в персональный стек, причём, т.к. проводится эта операция по всем регистрам одновременно, сохранение при вызове занимает всего один машинный цикл. Строго говоря, это не стековая машина, а регистровая с аппаратным сохранением регистров, но сама идея интригует.
PYRAMID 90X
Категория: | SL2 | |
Реализация: | 32-разрядный миникомпьютер | |
Назначение: | RISC процессор общего назначения | |
Кто и когда: | Pyramid Technology, 1983 | |
Публикация: | Ragan-Kelley & Clark ( 1983 ) |
Это первый коммерческий процессор, имевший многие признаки RISC. Он использовал регистровый стек [* наверно, «регистровый файл» ] , организованный в виде 16 не перекрывающихся окон по 32 регистра и 16 глобальных регистра, всего 528 штук. Содержимое регистров скидывалось в память, если глубина вложенности превышала 15 уровней.
QFORTH
Категория: | ML0 | |
Реализация: | Архитектурные изыскания | |
Назначение: | Прямая поддержка языка FORTH | |
Кто и когда: | Queens College of CUNY, 1984 | |
Публикация: | Vickery ( 1984 ) |
==201
Построен для исполнения FORTH в многозадачном однопользовательском режиме. Внутри имел две шины источников, через которые можно было читать два верхних элемента стека, и одну шину приёмника для записи верхнего элемента стека. Схема управления буферировала верхние элементы стека в регистрах и позволяла разделять общую стековую память на несколько независимых стеков.
REDUCTION LANGUAGE MACHINE
Категория: | ML0 | |
Реализация: | Лабораторная модель | |
Назначение: | Исполнение программ на сокращающем языке ( reduction language ) | |
Кто и когда: | GMD Bonn, 1979 | |
Публикация: | Kluge & Schlutter ( 1980 ) |
Сокращающий язык ( Reduction language ) использует структуры вида «применить <функция> к <аргумент>». Такие структуры хорошо ложатся на деревья, в которых функциональные узлы имеют потомков в виде операндов. Т.к. исполнение программы означает обход таких древовидных структур, главная роль отводится трём стекам. Один служит источником данных программы, второй - результатом её работы, а в третьем вычисляются выражения. Интересной особенностью является отсутствие программной памяти, причём функционирование машины не подразумевает понятия «адрес». Все программы занимаются перекидыванием содержимого между стеками исходных и результирующих данных.
REKURSIV
Категория: | ML0 | |
Реализация: | Комплект из 3 микросхем | |
Назначение: | Объектно ориентированное программирование | |
Кто и когда: | Linn Products, 1984-88 | |
Публикация: | Pountain ( 1988 ) |
Создан для быстрого исполнения объектно-ориентированных программ. Поддерживает набор команд очень высокого уровня, который может расширяться внешним микрокодом. Снабжён сложной системой управления памятью. Имеется стек для вычисления выражений и стек адресов возврата для микрокодовых подпрограмм.
RISC I
Категория: | SL2 | |
Реализация: | 32-разрядный микропроцессор | |
Назначение: | Исполнение программ на Си и других языках высокого уровня | |
Кто и когда: | University of California, Berkeley, 1981 | |
Публикация: | Patterson & Piepho ( 1982 ), Patterson & Sequin ( 1982 ), Sequin & Patterson ( 1982 ), Tamir & Sequin ( 1983 ) |
==202
Первый хорошо документированный RISC компьютер. Большая часть его производительности была следствием использования регистрового окна. «Золотой» чип RISC I использовал схему перекрывающихся регистровых окон и 78 регистров. В каждый момент времени было доступно 32 адресуемых регистра, из них: 10 глобальных, 6 общих с вызывающей программой, 10 приватных и 6 для передачи параметров на следующий уровень вложенности. Доступ к регистрам выполняется 2-операндными инструкциями ( регистр-регистр ). RISC I допускает обращение к регистрам как к ячейкам памяти, автоматически отображая адреса памяти на область регистров. Это решает проблемы адресации могущие возникнуть в языках типа Pascal.
ROCKWELL MICROCONTROLLERS
Категория: | MS0 | |
Реализация: | Микропроцессоры 6502 и 68000 с языком FORTH в ПЗУ | |
Назначение: | Встраиваемые системы с управляющим языком FORTH | |
Кто и когда: | Rockwell International, 1983 | |
Публикация: | Dumse ( 1984 ) |
Строго говоря, это не аппаратные стековые машины, а обычные микроконтроллеры, исполняющие эмулятор FORTH как приложение в ПЗУ. R65F11 из семейства 6502 и F68K из семейства 68000 - микропроцессоры с фабричной прошивкой примитивов FORTH. Микросхемы вполне успешно эмулируют двухстековую архитектуру FORTH-машины, используя переменные и программную память. С тех пор появились и другие микропроцессоры/ микроконтроллеры с прошитыми на фабрике примитивами FORTH, но Rockwell был первым.
RTX 2000
Категория: | ML0 | |
Реализация: | 16-разрядный микропроцессор | |
Назначение: | Полузаказной кристалл для специального применения, оптимизированный под исполнение языка FORTH | |
Кто и когда: | Harris Semiconductor, 1987-89 | |
Публикация: | Danile & Malinowski ( 1987 ), Harris Semiconductor ( 1988a ), Harris Semiconductor ( 1988b ), Jones et al. ( 1987 ) |
RTX - макрофункция в библиотеке Harris для технологии стандартных ячеек. Технология позволяет строить отдельный процессор или вариант с периферийными устройствами, аппаратным умножителем или внутренней стековой памятью. Система команд прямо соответствует примитивам FORTH. Используется декодированный формат инструкций, позволяющий собирать в один код несколько операций. Вызов подпрограмм в RTX 2000 занимает один машинный цикл.
==203
RTX 32P
Экспериментальный набор микросхем. Уникальная особенность - комбинация кода команды и адреса следующей инструкции. Такая организация позволяет не тратить машинное время на вызов и возврат из подпрограмм или безусловные переходы просто за счёт нужного сочетания команды и адреса следующей инструкции. Может исполнять один код операции и один вызов подпрограммы в каждом машинном цикле.
RUFOR
Категория: | ML0 | |
Реализация: | 16-разрядная машина на секционном процессоре AM2901 | |
Назначение: | Исследовательская модель для языка FORTH | |
Кто и когда: | Wright State University, 1984 | |
Публикация: | Grewe & Dixon ( 1984 ) |
RUFOR - обычный секционный процессор, оптимизированный под исполнение программ на FORTH. Имеет два аппаратных стека: для данных и для адресов возврата. Вершина каждого стека расположена в одном из внутренних регистров AM2901, поэтому АЛУ требуется только одна входная и одна выходная шина.
SF1
SF1 - экспериментальная мультистековая модель, проектировавшаяся под языки высокого уровня, включая FORTH и Си. Данная реализация имеет 5 стеков, два из которых могут выбираться как источник и приёмник для инструкции. Обеспечивает прямое обращение к верхним элементам стека через 13-разрядный указатель относительно верхнего элемента.
==204
SOAR
Категория: | SL2 | |
Реализация: | Микропроцессор | |
Назначение: | Поддержка языка Smalltalk-80 | |
Кто и когда: | University of California, Berkeley, 1984 | |
Публикация: | Bush et al. ( 1987 ) |
Проект SOAR - модифицированная для поддержки Smalltalk-80 архитектура Berkeley RISC II. Smalltalk-80 - стековый байт-ориентированный язык. Задача заключалась в отображении стекового кода на RISC с перекрывающимся регистровым окном. Окно имело размер всего 16 регистров, что в два раза меньше, чем у RISC II, т.к. методы Smalltalk в среднем имеют меньший размер, чем процедуры в обычных языках.
SOCRATES
Категория: | ML2 | |
Реализация: | Концептуальный проект | |
Назначение: | Использование в качестве основной программной памяти на ЦМД | |
Кто и когда: | University of Massachusetts/Amherst, 1975 | |
Публикация: | Foster ( 1975 ) |
SOCRATES проектировался в расчёте на использование памяти на цилиндрических магнитных доменах в качестве основной. На момент разработки предполагалось, что такая память будет в 100 раз дешевле других технологий в пересчёте на бит. Проблема состояла в последовательном доступе к её элементам. SOCRATES использовал это свойство как преимущество, собрав 64 32-разрядных регистра, где каждый регистр был вершиной блока ЦМД памяти объёмом 32k слов, сконфигурированной как LIFO стек. [* Я не понял описания. То ли речь о 64 стеках по 32k ( вряд ли - слишком много памяти ), то ли об одном стеке на 32k , у верхнего элемента которого 64 синонимичных регистра, как в MU5 , то ли об одном стеке на 32k , 64 верхних элемента которого доступны в качестве регистров, но как тогда с последовательным доступом?
«SOCRATES took advantage of this situation by proposing 64 addressable registers of 32 bits, with each register being the top element of a 32K word bubble memory configured as a LIFO stack» ] .
SOVIET MACHINE
Категория: | ML1 | |
Реализация: | Концептуальный проект | |
Назначение: | Исполнение программ на языках с блочной структурой | |
Кто и когда: | Academy of Sciences of the USSR, 1968 | |
Публикация: | Myamlin & Smirnov ( 1969 ) |
Публикация описывает стековый компьютер для исполнения языков с блочной структурой. Использовалось два стека. Один для хранения арифметических операторов, другой - для операндов. Машина не была прямо интерпретирующей, и, видимо, позволяла иметь исходные тексты с инфиксной нотацией, которая конвертировалась в постфиксную на лету. При необходимости стеки могли адресоваться как часть программной памяти, но были при этом отдельными физическими устройствами.
==205
SYMBOL
Проект представлял собой компьютер, не использующий служебного программного обеспечения. Редактор, компилятор и отладчик были реализованы аппаратно. Программа пользователя вводилась в виде исходного текста, а затем компилировалась и исполнялась под прямым аппаратным управлением. Компилирующий блок преобразовывал код в промежуточную форму в исполнительном стеке. Несколько других стеков использовались, где придётся, по необходимости.
TRANSPUTER
Категория: | SS0 | |
Реализация: | Семейство 16- и 32-разрядных процессоров | |
Назначение: | Параллельные вычисления | |
Кто и когда: | INMOS Limited, 1983 | |
Публикация: | Whitby-Strevens ( 1985 ) |
TRANSPUTER - однокристальный микропроцессор, созданный с расчётом на параллельные вычисления. Клонирование законченных компьютеров с памятью и периферией - затратное дело, поэтому в проекте сделана попытка ужать вычислительную машину до единственного чипа, чтобы понизить стоимость многопроцессорной конфигурации. В такой системе на первое место выходит объём программной памяти, поэтому был выбран стековый набор инструкций. 3 регистра образовывали стек для вычисления выражений.
TM
Категория: | ML0 | |
Реализация: | Симулятор | |
Назначение: | Исследования | |
Кто и когда: | Carnegie Mellon University, 1980 | |
Публикация: | Harbison ( 1982 ) |
TM создавалась с расчётом на упрощение компилятора за счёт возложения задач по оптимизации на кэш значений. Кэш делал сокращение промежуточных выражений и замену идентичных фрагментов кода аппаратно за счёт сохранения результатов уже посчитанных выражений. Стековая архитектура выбрана для упрощения компилятора и за большую эффективность работы с кэширующей аппаратурой. Использовалось два стека: стек данных для вычисления выражений и стек управления для информации о зависимостях и сохранения адресов возврата.
==206
TREE MACHINE
Категория: | MS0 | |
Реализация: | Концептуальный проект | |
Назначение: | Исполнение языков с блочной структурой | |
Кто и когда: | Massey University, New Zealand, 1971 | |
Публикация: | Doran ( 1972 ) |
Доран обнаружил, что правильные программы имеют естественную форму дерева, и вознамерился исполнять такие хорошо структурированные программы. Машина имела три стека в программной памяти: стек управления для адресов возврата, стек значений для промежуточных результатов для узлов, не являющихся листьями, и стек данных универсального назначения. Интересной особенностью архитектуры было отсутствие нужды в условных переходах. Всякое условное исполнение организовывалось в виде условного выхода из подпрограммы в родительский код.
VAUGHAN & SMITH'S MACHINE
Категория: | ML0 | |
Реализация: | Концептуальный проект | |
Назначение: | Поддержка исполнения FORTH | |
Кто и когда: | ||
Публикация: | Vaughan & Smith ( 1984 ) |
Публикация описывает конструкцию FORTH-машины. Выбор основан на хорошем соответствии текста на FORTH древовидной структуре программ. Небольшой размер процедур позволяет сжатие кода за счёт его повторного использования. Разработка предполагает использовать аппаратные стеки. Один верхний элемент в стеке возврата и два в стеке данных размещаются в регистрах.
WD9000 P-ENGINE
Категория: | SS0 | |
Реализация: | Набор из 5 микросхем | |
Назначение: | Прямое исполнение P-кода языка Pascal | |
Кто и когда: | Western Digital, 1979 | |
Публикация: | O'Neill ( 1979 ) |
Чипсет разработан для исполнения P-кода языка Pascal. P-код подразумевает единственный стек, поэтому процессор имеет один стек в программной памяти для вычисления выражений и передачи параметров.
==207
WISC CPU/16
Процессор на основе языка FORTH с микрокодом пользователя. Имел стек данных и стек возврата и, кроме того, 2K 30-битной перезаписываемой памяти для хранения микрокода. Архитектура универсального вида, позволявшая использование языков помимо FORTH. Наличие интерактивного пошагового режима позволяло использовать конструкцию в качестве учебного пособия.
WISC CPU/32
Прототип для Harris RTX 32P . Harris RTX 32P и WISC CPU/32 совместимы по набору инструкций и микрокоду.
Прочие источники
Bulman ( 1977 ):
Общий обзор стековых архитектур с упором на B5500 и HP3000. Рассматриваются также Data General Eclipse и PDP-11 в качестве обычных машин, поддерживающих некоторые стековые возможности.
Carlson ( 1975 ):
Хорошее описание различных компьютерных архитектур для языков высокого уровня, многие из которых стековые.
Doran ( 1975 ):
Обзор стека для разбора инструкций, обхода деревьев и сохранения адресов возврата с упором на архитектуру Burroughs.
McKeeman, W. ( 1975 ):
Подробное рассмотрение работы стековых компьютеров и роли стеков в вычислениях общего вида.
Myers ( 1982 ):
Публикация не о стековых машинах, но об архитектурных идеях, которые созвучны обсуждениям о стековых машинах. Особый интерес представляет рассмотрение вопроса семантического разрыва.
Siewiorek, Bell & Newell ( 1982 ):
Публикация об архитектуре компьютеров. Содержит много материалов по стековым машинам.
==208
Yamamoto, M. ( 1981 ):
Самый большой список машин для языков высокого уровня созданных в Японии. Много стековых.
==208