Машина на основе стека зависит от машины на основе регистра? - PullRequest
3 голосов
/ 24 февраля 2011

Обычные процессоры (например, устройства Android) являются машинами на основе регистров.Виртуальная машина Java - это стековая машина.Но зависит ли машина на основе стека от машины на основе регистров?Не могут ли машины на основе стека работать в одиночестве, потому что это не ОС?Существуют ли примеры машин на основе стека, кроме JVM?Некоторые говорят 1 операнд, 2 операнда;зачем тебе это?

Ответы [ 2 ]

7 голосов
/ 24 февраля 2011

JVM нигде не упоминает о существовании регистров. С ее точки зрения, память существует только в нескольких местах, таких как стек для каждого потока, область метода, пулы постоянных времени выполнения и т. Д. При этом, если вы хотите реализовать физическое устройство, которое подключено к JVM, вы ' Почти наверняка нужны регистры для хранения некоторых временных значений, сгенерированных при выполнении определенных байт-кодов, или для хранения дополнительной дополнительной информации о стороне. Например, попробуйте поискать инструкцию multianewarray и посмотреть, сможете ли вы реализовать ее без регистров. : -)

Одна параллель, которую вы можете найти в настоящих ЦП в эти дни, состоит в том, что, хотя для программистов есть выделенный набор регистров, большинство ЦП имеют существенно больше регистров, которые используются внутри для различных целей. Например, большинство микросхем MIPS имеют огромное количество регистров, используемых для конвейерной обработки. Они содержат такие вещи, как биты управления из предыдущих инструкций. Я бы сдулся, если бы x86 был другим.

Следует помнить, что регистры не определяют, как работает машина, основанная на регистрах, а не машина, основанная на стеке. В большинстве архитектур у вас есть O (1) регистров, которые предназначены для внутреннего использования. Даже у JVM есть такие - у каждого метода есть «массив локальных переменных», который изначально содержит параметры функции, но может также использоваться в качестве промежуточного пространства, если это необходимо. Более важной частью стековых машин, которая отличает их от других машин, является то, как работает расширяемая память. В большинстве компьютеров память имеет произвольный доступ, и вы можете в любое время читать из любого места. То есть с n ячейками памяти вы можете в любой момент прочитать O (n) памяти. На машинах, основанных на стеке, у вас есть доступ только к нескольким верхним точкам стека, поэтому у вас есть только O (1) областей памяти, которые можно прочитать одновременно.

Теоретически, поскольку JVM должна представлять собой полноценную виртуальную машину, у вас может быть компьютер, который загрузился и просто запустил JVM без какой-либо ОС (точнее, JVM будет ОС и вашими «программами»). было бы просто байт-кодами Java и файлами классов).

Есть несколько других стековых языков, из которых первым, что приходит на ум, является Forth . Я упоминаю Forth, потому что это явно язык на основе стека; все, что вы делаете, выражается в терминах манипулирования стеком операндов. Что здорово в этом вопросе относительно вашего первоначального вопроса, так это то, что Форт был чрезвычайно популярен среди любителей, потому что вы могли действительно легко перенести его на встроенные устройства. Чтобы получить полноценный интерпретатор Forth, вам не нужна действительно мощная ОС - вам просто нужен командный интерпретатор. Сегодня Forth не так популярен, но все равно это действительно крутой язык.

Другим широко используемым языком на основе стека является PostScript , который потерял значительную часть работы с PDF, но все еще широко используется в средах, где требуется визуализировать масштабируемую графику на различных платформах. Технически это язык программирования, полный по Тьюрингу, хотя мало кто его использует.

6 голосов
/ 24 февраля 2011

Я знаю, что вы уже выбрали свой ответ, но я бы хотел рассмотреть весь вопрос "стек машина ".

Хотя большинство физических процессоров, на самом деле, регистрируютсямашины, были стеки машины как физические процессоры. Машины Берроуза серий B5000 и B6000 , например, или микросхемы серии RTX2000 , используемые в космическом полете (первоначально реализованные Чаком Муром в логике массива затворов, а затем коммерциализированные). UCSD Pascal p-Machine был реализован на аппаратном уровне и множеством реализаторов.

С точки зрения вычислительной мощности машины регистров и стеков примерноэквивалент.(Конечно, это зависит от того, с какими точными моделями машин с регистрами или стеками вы имеете дело.) Стековые машины обладают преимуществом простоты, небольшого размера и расширяемости.Регистрировать машины, как правило, быстрее.Регистровые машины могут эмулировать стековые машины (для этого, в конце концов, и нужны регистры BP и SP в архитектуре x86!), И стековые машины сами могут имитировать регистрационные машины, если это необходимо.


отредактировано, чтобы добавить

Я почти забыла указать вам на книгу , в которой подробно рассматриваются стековые компьютеры.Купман немного фанат стековых компьютеров, и его предсказание, что они были «новой волной», было ужасно неверным, но это интересное чтение.

...