Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
55
Добавлен:
21.05.2015
Размер:
84.48 Кб
Скачать

6

Лекция 10

5. Уровень системы команд

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

Большое значение имеют также принципы построения системы команд в рамках данной технологии. Это сказывается как на вычислительных возможностях, так и стоимости компьютеров. Производительность эквивалентных машин с различными уровнями команд может различаться на 25%. Поэтому важно понимать принципы разработки этого уровня.

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

5.1. Общий обзор уровня команд

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

5.1.1. Модели памяти

Во всех компьютерах память разделена на ячейки, имеющие последовательные номера (адреса). В настоящее время наиболее распространенной ячейкой является байт - 8 двоичных разрядов (битов). Изначально это можно объяснить тем, что 8 - это минимальная степень двойки, подходящая для хранения общеупотребительных наборов символов (например, ASCII). Вполне возможно, что в связи с доминированием UNICODE в будущем минимальная ячейка станет 16-разрядной.

Байты обычно группируются в 2, 4 или 8 - байтные слова, которыми манипулируют команды. Многие архитектуры требуют, чтобы слова были выровнены на их целочисленную границу. Например, 4-байтовое слово должно начинаться с адреса, кратного 4. Такая память более эффективна как с точки зрения быстродействия, так и сложности и стоимости микросхем.

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

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

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

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

Соседние файлы в папке Архитектура ЭВМ