Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учеб Пособ_Гончаровский.doc
Скачиваний:
1317
Добавлен:
29.03.2015
Размер:
3.65 Mб
Скачать

1.2.3.1. Адресное пространство

Процессор взаимодействует с памятью, разделенной на ячейки с последовательными адресами. Наиболее распространенный размер ячейки 8 бит или байт.

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

1.2.3.2. Порядок байт

Порядок байт важен для размещения в памяти числовых типов данных. Порядок, называемый обратным (big-endian), подразумевает, что старший значащий байт числа размещается по младшему адресу памяти. Порядок, называемый прямым (little-endian), подразумевает, что старший значащий байт числа размещается по старшему адресу памяти. В качестве примера рассмотрим отображение структуры данных S, представленной на Си для 32-разрядного процессора:

struct {

int a; /* 0x1112_1314 слово */

double b; /* 0x2122_2324_2526_2728 двойное слово */

char * c; /* 0x3132_3334 слово */

char d[7]; /* 'L','M','N','O','P','Q','R' массив байт */

short e; /* 0x5152 полслова */

int f; /* 0x6162_6364 слово */

} S;

В случае порядка big-endian в памяти будут следующие значения:

содержимое 11 12 13 14 (x) (x) (x) (x)

адрес 00 01 02 03 04 05 06 07

содержимое 21 22 23 24 25 26 27 28

адрес 08 09 0A 0B 0C 0D 0E 0F

содержимое 31 32 33 34 ‘L’ ‘M’ ‘N’ ‘O’

адрес 10 11 12 13 14 15 16 17

содержимое ‘P’ ‘Q’ ‘R’ (x) 51 52 (x) (x)

адрес 18 19 1A 1B 1C 1D 1E 1F

содержимое 61 62 63 64 (x) (x) (x) (x)

адрес 20 21 22 23 24 25 26 27

В случае порядка little-endian в памяти будут следующие значения:

содержимое 14 13 12 11 (x) (x) (x) (x)

адрес 00 01 02 03 04 05 06 07

содержимое 28 27 26 25 24 23 22 21

адрес 08 09 0A 0B 0C 0D 0E 0F

содержимое 34 33 32 31 ‘L’ ‘M’ ‘N’ ‘O’

адрес 10 11 12 13 14 15 16 17

содержимое ‘P’ ‘Q’ ‘R’ (x) 52 51 (x) (x)

адрес 18 19 1A 1B 1C 1D 1E 1F

содержимое 64 63 62 61 (x) (x) (x) (x)

адрес 20 21 22 23 24 25 26 27

1. 2.3.3. Когерентность памяти

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

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

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

Концепция выполнение инструкций по порядку.

1. Считывание инструкции.

2. Если все операнды инструкции доступны, то она передаётся на выполнение соответствующему исполнительному модулю, иначе процессор останавливается, ожидая готовности операндов.

3. Инструкция выполняется в соответствующем модуле.

4. Модуль записывает результат обратно в регистровый файл.

Концепция выполнение не по порядку.

1. Считывание инструкции.

2. Помещение инструкции в очередь.

3. Инструкция находится в очереди до тех пор, пока её операнды не станут доступны. Таким образом, инструкция может покинуть очередь прежде, чем инструкция попавшая туда раньше.

4. Выбранная из очереди инструкция выполняется в соответствующем модуле.

5. Результат помещается в очередь.

6. Только после того, как все инструкции, которые были в очереди впереди данной, выполнятся, её результат помещается в регистровый файл.

Данная парадигма применяется при разработке суперскалярных процессоров, позволяя повысить процент загрузки исполнительных модулей, а, следовательно, и их производительность.