Jump to content

Языковая компьютерная архитектура высокого уровня

Компьютерная архитектура языка высокого уровня ( HLLCA ) — это компьютерная архитектура, предназначенная для конкретного языка программирования высокого уровня (HLL), а не архитектура, продиктованная аппаратными соображениями. Соответственно, его также называют компьютерным дизайном, управляемым языком , который был придуман Маккиманом (1967) и в основном использовался в 1960-х и 1970-х годах. HLLCA были популярны в 1960-х и 1970-х годах, но практически исчезли в 1980-х годах. Это последовало за драматическим провалом Intel 432 (1981 г.), появлением оптимизирующих компиляторов и архитектур компьютеров с сокращенным набором команд (RISC) и RISC-подобных архитектур компьютеров со сложным набором команд (CISC), а также более поздней разработкой системы « точно в срок». компиляция (JIT) для HLL. Подробный обзор и критику можно найти у Дитцеля и Паттерсона (1980) .

HLLCA восходят почти к началу HLL в больших системах Берроуза (1961), которые были разработаны для АЛГОЛА 60 (1960), одного из первых HLL. Самыми известными HLLCA, возможно, являются Lisp-машины 1970-х и 1980-х годов для языка Lisp (1959). В настоящее время наиболее популярными HLLCA являются процессоры Java для языка Java (1995 г.), и они имеют определенный успех и используются для определенных приложений. Недавней архитектурой в этом направлении является архитектура гетерогенной системы (2012 г.), в которой промежуточный уровень HSA (HSAIL) обеспечивает поддержку набора команд для функций HLL, таких как исключения и виртуальные функции; для обеспечения производительности используется JIT.

Определение

[ редактировать ]

В этом разделе представлено большое разнообразие систем. Самым крайним примером является язык прямого выполнения (DEL), где архитектура набора команд (ISA) компьютера равна инструкциям HLL, а исходный код исполняется напрямую с минимальной обработкой. В крайних случаях единственная необходимая компиляция — это токенизация исходного кода и подача токенов непосредственно в процессор; это встречается в стековых языках программирования, работающих на стековой машине . В более традиционных языках операторы HLL группируются в инструкции + аргументы , а инфиксный порядок преобразуется в префиксный или постфиксный порядок. DEL обычно являются лишь гипотетическими, хотя их пропагандировали в 1970-х годах. [1]

В менее крайних примерах исходный код сначала анализируется до байт-кода , который затем является машинным кодом , передаваемым процессору. В этих случаях в системе обычно отсутствует ассемблер , поскольку компилятор считается достаточным, хотя в некоторых случаях (например, в Java) ассемблеры используются для создания допустимого байт-кода, который не будет выводиться компилятором. Этот подход был найден в Pascal MicroEngine (1979) и в настоящее время используется процессорами Java.

В более широком смысле, HLLCA может быть просто компьютерной архитектурой общего назначения с некоторыми функциями, специально предназначенными для поддержки данного HLL или нескольких HLL. Это было обнаружено в машинах Lisp, начиная с 1970-х годов, которые дополняли процессоры общего назначения операциями, специально разработанными для поддержки Lisp.

( Большие системы Берроуза 1961 г.) были первыми HLLCA, разработанными для поддержки АЛГОЛА (1959 г.), одного из первых HLL. В то время это называлось «дизайн, ориентированный на язык». Средние системы Берроуза (1966 г.) были разработаны для поддержки COBOL для бизнес-приложений. ( Малые системы Burroughs середина 1970-х годов, разработанные в конце 1960-х годов) были разработаны для поддержки нескольких HLL с помощью записываемого хранилища управления . Все это были мейнфреймы.

Серия Wang 2200 (1973) была разработана с использованием интерпретатора BASIC в микрокоде.

Pascal MicroEngine (1979) был разработан для UCSD версии Pascal Pascal и использовал p-код (байт-код компилятора Pascal) в качестве машинного кода. Это оказало влияние на дальнейшее развитие Java и Java-машин.

Lisp-машины (1970-е и 1980-е годы) были известной и влиятельной группой HLLCA.

Intel iAPX 432 (1981 г.) был разработан для поддержки Ada. Это был первый 32-битный процессор Intel, который должен был стать основным семейством процессоров Intel в 1980-х годах, но потерпел неудачу с коммерческой точки зрения.

Rekursiv (середина 1980-х годов) представляла собой второстепенную систему, предназначенную для поддержки объектно-ориентированного программирования и языка программирования Lingo на аппаратном уровне, а также поддерживающую рекурсию на уровне набора команд (отсюда и название).

Ряд процессоров и сопроцессоров, предназначенных для более непосредственной реализации Пролога, были разработаны в конце 1980-х и начале 1990-х годов, в том числе Berkeley VLSI-PLM , его преемник ( PLUM ) и связанная с ним реализация микрокода . Также существовал ряд смоделированных проектов, которые не были созданы в виде аппаратного обеспечения. Методика проектирования процессора Prolog на основе VHDL , Сопроцессор Prolog для сверхпроводников . Как и Лисп, базовая модель вычислений Пролога радикально отличается от стандартных императивных проектов, и ученые-компьютерщики и инженеры-электрики стремились избежать узких мест, вызванных эмуляцией лежащих в их основе моделей.

Никлауса Вирта включал Проект Лилит в себя специальный процессор, ориентированный на язык Modula-2 . [2]

INMOS Transputer был разработан для поддержки параллельного программирования с использованием occam .

Процессор AT&T Hobbit , созданный на основе конструкции под названием CRISP (процессор с сокращенным набором команд языка C), был оптимизирован для выполнения C. кода

и другие компании планировали В конце 1990-х годов Sun Microsystems создать процессоры, которые напрямую (или близко) реализовали бы Java виртуальную машину на основе стека . В результате несколько процессоров Java было создано и использовано .

Эрикссон разработал ECOMP, процессор, предназначенный для работы с Erlang . [3] Он никогда не производился в коммерческих целях.

Промежуточный уровень HSA (HSAIL) архитектуры гетерогенной системы (2012 г.) предоставляет набор виртуальных инструкций для абстрагирования от базовых ISA и поддерживает функции HLL, такие как исключения и виртуальные функции, а также включает поддержку отладки.

Выполнение

[ редактировать ]

HLLCA часто реализуется через стековую машину (как в Burroughs Large Systems и Intel 432), а HLL реализуется через микрокод в процессоре (как в Burroughs Small Systems и Pascal MicroEngine). Архитектуры с тегами часто используются для поддержки типов (как в больших системах Burroughs и машинах Lisp). В более радикальных примерах используется архитектура, отличная от фон Неймана , хотя обычно это лишь гипотетические предложения, а не реальные реализации.

Приложение

[ редактировать ]

Некоторые HLLC были особенно популярны в качестве машин для разработчиков (рабочих станций) из-за быстрой компиляции и низкоуровневого управления системой с помощью языка высокого уровня. Машины Pascal MicroEngine и Lisp являются хорошими примерами этого.

HLLCA часто защищают, когда HLL имеет радикально другую модель вычислений, чем императивное программирование (которое относительно хорошо подходит для типичных процессоров), особенно для функционального программирования (Lisp) и логического программирования (Prolog).

Мотивация

[ редактировать ]

Подробный список предполагаемых преимуществ дан у Дитцеля и Паттерсона (1980) .

HLLCA интуитивно привлекательны, поскольку компьютер в принципе можно настроить для конкретного языка, что обеспечивает оптимальную поддержку языка и упрощает написание компилятора. Кроме того, он может поддерживать несколько языков, просто изменив микрокод. Ключевые преимущества для разработчиков: быстрая компиляция и детальная символьная отладка с машины.

Еще одним преимуществом является то, что реализацию языка можно обновить путем обновления микрокода ( прошивки ) без необходимости перекомпиляции всей системы. Это аналогично обновлению интерпретатора для интерпретируемого языка.

Преимущество, которое снова появляется после 2000 года, — это безопасность. Основные ИТ-специалисты в значительной степени перешли на языки с безопасностью типа и/или памяти для большинства приложений. [ нужна ссылка ] Программное обеспечение, от которого они зависят, от ОС до виртуальных машин, использует собственный код без какой-либо защиты. В таком коде обнаружено множество уязвимостей. Одним из решений является использование специально созданного процессора для выполнения безопасного языка высокого уровня или, по крайней мере, для понимания типов. Защита на уровне слов процессора усложняет работу злоумышленников по сравнению с машинами низкого уровня, которые не видят различия между скалярными данными, массивами, указателями или кодом. Ученые также разрабатывают языки с аналогичными свойствами, которые в будущем могут интегрироваться с процессорами высокого уровня. Примером обеих этих тенденций является SAFE. [4] проект. Сравните языковые системы , в которых программное обеспечение (особенно операционная система) основано на безопасном языке высокого уровня, хотя аппаратное обеспечение не обязательно: «доверенная база» все равно может быть на языке более низкого уровня.

Недостатки

[ редактировать ]

Подробная критика дана в Ditzel & Patterson (1980) .

Самая простая причина отсутствия успеха HLLCA заключается в том, что с 1980 года оптимизация компиляторов приводила к гораздо более быстрому коду, и его было легче разрабатывать, чем реализацию языка в микрокоде. Многие оптимизации компилятора требуют сложного анализа и перестановки кода, поэтому машинный код сильно отличается от исходного исходного кода. Эти оптимизации либо невозможно, либо непрактично реализовать в микрокоде из-за сложности и накладных расходов. Аналогичные проблемы с производительностью имеют долгую историю в интерпретируемых языках (начиная с Lisp (1958)), и их можно адекватно решить для практического использования только с помощью JIT-компиляции , впервые впервые реализованной в Self и коммерциализированной в виртуальной машине HotSpot Java (1999).

Фундаментальная проблема заключается в том, что HLLCA только упрощают этап генерации кода компиляторами, который обычно составляет относительно небольшую часть компиляции, и сомнительное использование вычислительной мощности (транзисторов и микрокода). Как минимум необходима токенизация, и, как правило, синтаксический анализ и базовые семантические проверки (несвязанные переменные) все равно будут выполняться – поэтому для внешнего интерфейса нет никакой пользы – а оптимизация требует предварительного анализа – поэтому нет никакой пользы от средний конец.

Более глубокая проблема, которая по состоянию на 2014 год все еще находится в активной области разработки. , [5] заключается в том, что предоставление отладочной информации HLL из машинного кода довольно сложно, в основном из-за накладных расходов на отладочную информацию, и, что более тонко, потому, что компиляция (особенно оптимизация) делает определение исходного источника машинной инструкции весьма сложным. Таким образом, отладочная информация, предоставляемая как неотъемлемая часть HLLCA, либо серьезно ограничивает реализацию, либо добавляет значительные накладные расходы при обычном использовании.

Кроме того, HLLCA обычно оптимизированы для одного языка и хуже поддерживают другие языки. Аналогичные проблемы возникают в многоязычных виртуальных машинах, особенно в виртуальной машине Java (разработанной для Java) и среде общего языка .NET (разработанной для C# ), где другие языки являются гражданами второго сорта и часто должны быть тесно связаны с основным. язык в семантике. По этой причине ISA более низкого уровня позволяют хорошо поддерживать несколько языков при условии поддержки компилятора. Однако аналогичная проблема возникает даже для многих, казалось бы, нейтральных к языку процессоров, которые хорошо поддерживаются языком C и где транспиляция на C (вместо прямой ориентации на аппаратное обеспечение) дает эффективные программы и простые компиляторы.

Преимущества HLLCA могут быть альтернативно достигнуты в компьютерных системах HLL ( языковых системах ) альтернативными способами, в первую очередь с помощью компиляторов или интерпретаторов: система по-прежнему написана на HLL, но существует надежная база в программном обеспечении, работающем на более низком уровне. уровень архитектуры. Этот подход применяется примерно с 1980 года: например, система Java, в которой сама среда выполнения написана на C, а операционная система и приложения написаны на Java.

Альтернативы

[ редактировать ]

С 1980-х годов основное внимание в исследованиях и реализации компьютерных архитектур общего назначения уделялось в первую очередь RISC-подобным архитектурам, как правило, архитектурам загрузки-сохранения с большим количеством внутренних регистров , с довольно стабильными, не зависящими от языка ISA, имеющими несколько регистров, конвейерную обработку. , а в последнее время и многоядерные системы, а не ISA, зависящие от языка. Языковая поддержка сосредоточена на компиляторах и их средах выполнения, а также интерпретаторах и их виртуальных машинах (особенно JIT-компиляторах) с небольшой прямой аппаратной поддержкой. Например, текущая среда выполнения Objective-C для iOS реализует тегированные указатели , которые используются для проверки типов и сборки мусора, несмотря на то, что оборудование не является архитектурой с тегами.

В компьютерной архитектуре подход RISC оказался очень популярным и успешным и противоположен подходу HLLCA, подчеркивая очень простую архитектуру набора команд. Однако преимущества RISC-компьютеров в 1980-х годах в скорости были обусловлены прежде всего ранним внедрением встроенной кэш-памяти и места для больших регистров, а не внутренними преимуществами RISC. [ нужна ссылка ] .

См. также

[ редактировать ]
  1. ^ См. ссылки на Яохан Чу.
  2. ^ «Паскаль для малых машин – История Лилит» . Паскаль.hansotten.com. 28 сентября 2010 г. Архивировано из оригинала 20 марта 2012 г. Проверено 12 ноября 2011 г.
  3. ^ «ECOMP — процессор Erlang» . Архивировано из оригинала 24 апреля 2021 г. Проверено 1 декабря 2022 г.
  4. ^ «Проект БЕЗОПАСНОСТЬ» . Архивировано из оригинала 22 октября 2019 г. Проверено 9 июля 2022 г.
  5. ^ См. LLVM и компилятор Clang.

Дальнейшее чтение

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: a129c542abcff0f22dd2202b277b737b__1722386760
URL1:https://arc.ask3.ru/arc/aa/a1/7b/a129c542abcff0f22dd2202b277b737b.html
Заголовок, (Title) документа по адресу, URL1:
High-level language computer architecture - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)