Реклама:

В принципе уровень архитектуры набора команд - это тот уровень, на котором компьютер представляется программисту, пишущему программы на машинном языке. Поскольку сейчас ни один нормальный программист таких программ не пишет, мы слегка переделали это определение: программа уровня архитектуры набора команд - это то, что получается в результате работы компилятора (в данный момент мы будем касаться системных вызовов и символического языка ассемблера). Чтобы получить программу уровня архитектуры набора команд, создатель компилятора должен знать, какая модель памяти используется в машине, какие регистры, типы данных и команды имеются в наличии, и т. д. Вся эта информация в совокупности и определяет уровень архитектуры набора команд.

В соответствии с этим определением вопросы о том, доступна ли микроархитектура программно, конвейеризирован ли компьютер, является ли он суперскалярным и т. д., не относятся к уровню архитектуры набора команд, поскольку разработчик компилятора всего этого не видит. Однако это замечание не совсем справедливо, поскольку некоторые из этих характеристик влияют на производительность, а производительность, в свою очередь, - вполне доступный для разработчика компилятора показатель. Рассмотрим, например, суперскалярную машину, которая в одном цикле может обрабатывать сдвоенные команды, причем такие, что одна команда целочисленная, а вторая с плавающей точкой. Если в коде, полученном в результате работы компилятора, целочисленные команды и команды с плавающей точкой будут чередоваться, то производительность заметно повысится. Таким образом, детали суперскалярной операции доступны на уровне архитектуры набора команд, то есть границы между разными уровнями размыты.

Для одних архитектур уровень команд определяется формальным документом, который обычно выпускается промышленным консорциумом, для других - нет. Например, системы V9 SPARC (Version 9 SPARC) и JVM имеют официальные определения [216]. Цель такого официального документа - дать возможность различным производителям выпускать машины данного типа, чтобы эти машины могли выполнять одни и те же программы и получать при этом одни и те же результаты.

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

В таких документах содержатся нормативные разделы, в которых излагаются требования, и информативные разделы, призванные помочь читателю, но не являющиеся частью формального определения. В нормативных разделах постоянно встречаются такие слова, как должно быть, нельзя, следует, означающие, соответственно, требование, запрет и рекомендацию. Например, следующее предложение означает, что если программа выполняет код операции, который не определен, он должен вызывать системное прерывание, а не просто игнорироваться:

Выполнение зарезервированного кода операции должно вызывать системное прерывание.

Может быть и альтернативный подход:

Результат выполнения зарезервированного кода операции определяется реализацией.

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

Совершенно ясно, почему система V9 SPARC поставляется с документом, в котором определяется уровень архитектуры набора команд, - это нужно для того, чтобы все микросхемы V9 SPARC могли выполнять одни и те же программы. Для уровня архитектуры набора команд процессора Pentium 4 такого документа нет, поскольку компания Intel не хочет, чтобы другие производители могли выпускать микросхемы Pentium 4. Компания Intel даже обращалась в суд, чтобы запретить производство своих микросхем другим производителям, но проиграла процесс.

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

Общий обзор уровня архитектуры набора команд5 || Оглавление || Модели памяти5