6.1 Историческая перспектива
==116
Дебаты между разработчиками машин с аппаратной поддержкой стеков и обычных компьютеров имеют долгую историю. Эти дискуссии можно разделить на две основные группы: споры сторонников регистровых машин со сторонниками других архитектур и полемика между разработчиками RISC машин и компьютеров, оптимизированных для работы под управлением языков высокого уровня. Мы не рассчитываем дать исчерпывающие ответы на поставленные в этих спорах вопросы, но идеи, которые можно найти в предлагаемых ссылках заслуживают внимания читателя.
6.1.1 Регистровые и нерегистровые машины
Дискуссии о необходимости обеспечения прямого доступа к регистрам на языке ассемблера восходят к решениям принятым в конце 50-х годов. Появление стекового компьютера KDF-9 ( Haley 1962 ) свидетельствует о том, что думать об альтернативах стандартной регистровой модели разработчики начали много лет назад.
Споры об использовании или неиспользовании регистровых машин привели к появлению нескольких направлений развития, включающих чисто стековые машины, однооперандные стековые машины ( так называемые стеково-аккумуляторные ) и архитектуры вида память-память .
Чисто стековые компьютеры, попадающие в категории SS0 , MS0 , SL0 и ML0 , чрезвычайно просты. Очевидным аргументом в их пользу является необходимость использования стека или подобной ему структуры при вычислении выражений. В процессе таких вычислений регистровые машины тратят дополнительное время на эмуляцию стековых машин. Но чисто стековым архитектурам может потребоваться больше инструкций, чем стеково-аккумуляторным ( категории SS1 , MS1 , SL1 и ML1 ), так как они не могут одновременно читать значение и выполнять над ним арифметические операции. Внимательный читатель мог заметить, что 32-разрядные стековые машины, обсуждавшиеся в пятой части, компенсируют в значительной степени это ограничение, используя комплексные инструкции, подобные «Variable @ +».
Компьютеры с организацией память-память, в которых все операнды инструкций расположены в памяти, выглядят более приспособленными для высокоуровневых языков, подобных Си и Pascal. Основной причиной этого является тот факт, что правая сторона большинства операторов присваивания в таких языках имеет не более двух переменных. Таким образом, для большинства выражений нужна только одна инструкция, не требующая обмена данными с регистрами. Архитектура CRISP ( Ditzel et al. 1987a , 1987b ) является примером импровизированного процессора с такой организацией.
==117
Самым цитируемым источником в этих спорах является серия статей, появившаяся в Computer Architecture News: Keedy ( 1978a ), Keedy ( 1978b ), Keedy ( 1979 ), Myers ( 1977 ), Schulthess & Mumprecht ( 1977 ) и Sites ( 1978 ). Статьи не дают ответов на все вопросы и кое в чём устарели, но по-прежнему являются хорошей справкой по истории вопроса.
6.1.2 Высокоуровневые языки и RISC машины
К данному направлению относятся дебаты сторонников машин, оптимизированных для исполнения высокоуровневых языков, и сторонников идеологии RISC.
Машины для исполнения высокоуровневых языков могут рассматриваться как путь дальнейшего эволюционного развития CISC машин. Такие компьютеры могут в перспективе иметь очень сложные инструкции, прямо соответствующие функциям одного или нескольких языков. В некоторых случаях компилятор используется для генерации промежуточного кода, который исполняется компьютером непосредственно. Примерами могут служить P-code для Pascal и M-code для Modula-2. Самым бескомпромиссным развитием этого направления разработки является проект SYMBOL ( Ditzel & Kwinn 1980 ), аппаратно воплотивший все системные функции, включая редактирование и компиляцию.
RISC-подход к поддержке языков высокого уровня заключается в предоставлении на уровне компилятора набора простейших «кирпичиков», используемых при синтезе операторов языка. Это подразумевает появление цепочек команд загрузки, вычисления и сохранения для каждой директивы высокого уровня. Сторонники RISC утверждают, что такие последовательности выполняются RISC-компьютерами быстрее, чем соответствующие им сложные инструкции CISC машин.
Стековые архитектуры располагаются где-то между CISC и RISC подходами. Простые инструкции, исполняемые за один такт, соответствуют философии RISC. Наиболее же эффективные программы для стековых машин интенсивно используют очень экономичные в этой архитектуре вызовы подпрограмм для доступа к базовым функциям приложения. Такую коллекцию процедур можно рассматривать как виртуальный набор команд, замещающий сложную аппаратную реализацию.
[* Вообще, в FORTH-машинах, возможно, возможно создание линейки процессоров с единой системой команд, начинающихся от самых примитивных моделей и заканчивая навороченными монстрами. Разница будет заключаться в степени «софтовости» системы команд. В младших моделях аппаратным будет только базовый словарь, а остальной набор пойдёт в виде «разговорника», а в старших моделях весь набор будет аппаратным. А в «непобедимом» набор будет переводиться из программной формы в аппаратную «по запросу». Ну, типа, на N-ном обращении к подпрограмме блок управления решает удалить из аппаратного набора блок вычислений с плавающей запятой, к которому нет обращений, и отрастить аппаратную реализацию запрашиваемой функции. Здорово я придумал? ]
Тема противостояния высокоуровневых и RISC машин имеет хороший набор источников: Cragon ( 1980 ), Ditzel & Patterson ( 1980 ), Kavipurapu & Cragon ( 1980 ), Kavi et al. ( 1982 ), Patterson & Piepho ( 1982 ) и Wirth ( 1987 ).
==117