Полная версия

Главная arrow Информатика arrow Архитектура ЭВМ и вычислительных систем

  • Увеличить шрифт
  • Уменьшить шрифт


<<   СОДЕРЖАНИЕ   >>

АРХИТЕКТУРЫ ОБРАМЛЕНИЯ. ИНТЕРФЕЙСЫ ОПЕРАТИВНАЯ ПАМЯТЬ

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

Организация оперативной памяти

Запоминающие устройства (ЗУ), именуемые также устройствами памяти, предназначены для хранения данных. Основными характеристиками ЗУ являются:

  • • емкость памяти, измеряемая в битах либо байтах;
  • • методы доступа к данным;
  • • быстродействие ( время обращения к устройству).

Основные принципы построения ОП

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

Адресация данных. Команды, исполняемые ЭВМ при выполнении программы, равно как и числовые и символьные операнды, хранятся в памяти компьютера. Память состоит из миллионов ячеек, в каждой из которых содержится один бит информации (значения 0 или 1). Биты редко обрабатываются поодиночке, а, как правило, группами фиксированного размера. Для этого память организуется таким образом, что группы по п бит могут записываться и считываться за одну операцию. Группа п бит называется словом, а значение п — длиной слова. Схематически память компьютера можно представить в виде массива слов (рис. 4.1).

?-

- 32 разряда -

-?

*3.

ho

Ь

*0

Знаковый разряд: Ь^ =0 для положительных чисел;

/>31 = 1 для отрицательных чисел

а

8 разрядов

8 разрядов

8 разрядов

8 разрядов

W __'

v у

Символ

ASCII

Символ

ASCII

Символ

ASCII

б

Символ

ASCII

Рис. 4.1. Размещение числовой (а) и символьной (б) информации в слове

Обычно длина машинного слова компьютеров составляет от 16 до 64 бит. Если длина слова равна 32 битам, в одном слове может храниться 32-разрядное число в дополнительном коде или четыре символа ASCII, занимающих 8 бит каждый. Восемь идущих подряд битов являются байтом. Для представления машинной команды требуется одно или несколько слов.

Основная память соединяется с процессором посредством адресной шины и шины данных. Каждая шина состоит из совокупности электрических цепей (линий или бит). Ширина (разрядность) адресной шины определяет, сколько адресов может быть в ОП (адресное пространство), а шины данных — сколько данных может быть передано за один цикл. Например, в 1985 г. процессор Intel 386 имел 32-разрядную адресную шину, что давало возможность поддерживать адресное пространство в 4 Гбайт. В процессоре Pentium (1993 г.) ширина шины данных была увеличена до 64 бит, что позволяет передавать 8 байт информации одновременно.

Байтовая адресация. Отдельные биты, как правило, не адресуются и чаще всего адреса назначаются байтам памяти. Память, в которой каждый байт имеет отдельный адрес, называется памятью с байтовой адресацией. Последовательные байты имеют адреса 0, 1, 2 и т. д. Таким образом, при использовании слов длиной 32 бита последовательные слова имеют адреса 1,4, 8, ..., и каждое слово состоит из 4 байт.

Пр ямой и обратный порядок байтов. Существует два способа адресации байтов в словах:

  • • в прямом порядке (рис. 4.2, а);
  • • обратном порядке (рис. 4.2, б).

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

Прямым порядком байтов (little-endian) называется противоположная система адресации, при которой байты адресуются справа налево, так что наименьший адрес имеет самый младший байт слова (расположенный с правого края). Слова «старший» и «младший» определяют вес бита, т. е. степень двойки, соответствующей данному биту, когда слово представляет число. В ПЭВМ на основе 80x86 используется прямой порядок, а в ПЭВМ на основе Motorola 68000 — обратный. В обеих этих системах адреса байтов 0, 4, 8 и т. д. применяются в качестве адресов последовательных слов памяти в операциях чтения и записи слов.

Адрес байта

Адрес

слова

Адрес байта

2*-4

0

1

2

3

0

3

2

1

0

4

5

6

7

4

7

6

5

4

2*- 4

2к- 3

2к — 2

2к~ 1

2*-4

2к - 1

2к- 2

2*-3

2*-4

а

б

Рис. 4.2. Способы адресации байтов в ОП

Адрес

слова

4

Наряду с порядком байтов в слове важно также определить порядок битов в байте. Наиболее естественный порядок битов для кодирования числовых данных (непосредственно соответствующий их разрядам) — «слева направо»: Ь32, ..., Ь{, Ь0. Однако существуют компьютеры, для которых характерен обратный порядок битов.

Расположение слов в памяти. В случае 32-разрядных слов их естественные границы располагаются по адресам 0, 4, 8 и т. д. При этом считается, что слова выровнены по адресам в памяти. Если говорить в общем, слова считаются выровненными в памяти в том случае, если адрес начала каждого слова кратен количеству байтов в нем. По практическим причинам, связанным с манипулированием двоично-кодированными адресами, количество байтов в слове обычно является степенью двойки. Поэтому, если длина слова равна 16 бит (2 байтам), выровненные слова начинаются по байтовым адресам 0, 2, 4, ..., а если она равна 64 бит (23, т. е. 8 байтам), то выровненные слова начинаются по байтовым адресам 0, 8, 16, ... .

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

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

Адресное пространство. Для доступа к памяти необходимы имена или адреса, определяющие расположение данных в памяти. В качестве адресов традиционно используются числа из диапазона от 0 до 2к - 1 со значением к, достаточным для адресации всей памяти компьютера. Все 2к адресов составляют адресное пространство компьютера. Следовательно, память состоит из 2к адресуемых элементов. Например, использование 24-разрядных (как в процессоре 80286) адресов позволяет адресовать 224 (16 777 216) элементов памяти. Обычно это количество адресуемых элементов обозначается как 16 Мбайт (1 Мбайт = 220 = = 1 048 576 байт, адресное пространство 8086 и 80186). Поскольку у процессоров 80386, 80486 РеШшт и их аналогов 32-разряд-ные адреса, им соответствует адресное пространство в 232 байт, или 4 Гбайт.

Адресное пространство ЭВМ графически может быть изображено прямоугольником, одна из сторон которого представляет разрядность адресуемой ячейки (слова) процессора, а другая сторона — весь диапазон доступных адресов для этого же процессора. Диапазон доступных адресов процессора определяется разрядностью шины адреса системной шины. При этом минимальный номер ячейки памяти (адрес) будет равен 0, а максимальный определяется из формулы М = 2" -1.

7 6 5 4 3 2 1 0

Номер бита в слове

а

Номер слова

  • 64 К
  • 16К

Порт ввода-вывода

Неиспользуемое

адресное

пространство

ОЗУ

Неиспользуемое

адресное

пространство

ПЗУ

б

Рис. 4.3. Адресное пространство шестнадцатиразрядной шины адреса (а); распределение памяти процессора с 16-разрядной шиной адреса (6)

Для 16-разрядной шины это будет 65 535 (64 К) — рис. 4.3, а. Пример соответствующего распределения памяти приводится на рис. 4.3, б.

Иерархическая организация памяти

Компромиссом между производительностью и объемами памяти является решение использовать иерархию запоминающих устройств, т. е. применять иерархическую модель памяти.

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

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

Успешное или неуспешное обращение к более высокому уровню называют соответственно попаданием (hit) или промахом (miss). Попадание — есть обращение к объекту в памяти, который найден на более высоком уровне, в то время как промах означает, что он не найден на этом уровне.

Доля попаданий (hit гаtе) — доля обращений к данным, найденным на более высоком уровне. Доля промахов (miss rate) — это доля обращений к данным, которые не найдены на более высоком уровне.

Время обращения при попадании (hit time) есть время обращения к более высокому уровню иерархии, которое включает в себя, в частности, и время, необходимое для определения того, является ли обращение попаданием или промахом. Потери на промах (miss penalty) есть время для замещения блока в более высоком уровне на блок из более низкого уровня плюс время для пересылки этого блока в требуемое устройство (обычно в процессор).

Потери на промах далее включают в себя две компоненты:

  • • время доступа (access time) — время обращения к первому слову блока при промахе;
  • • время пересылки (transfer time) — дополнительное время для пересылки оставшихся слов блока. Время доступа связано с задержкой памяти более низкого уровня, а время пересылки — с полосой пропускания канала между устройствами памяти двух смежных уровней.

Кэш-память или cache memory — компонента иерархической памяти — представляет собой буферное ЗУ, работающее со скоростью, обеспечивающей функционирование ЦП без режимов ожидания (рис. 4.4).

Обратная связь

Рис. 4.4. Иерархия оперативной памяти

Необходимость создания кэш-памяти возникла потому, что появились процессоры с высоким быстродействием. Между тем для выполнения сложных прикладных процессов нужна большая память. Использование же большой сверхскоростной памяти экономически невыгодно. Поэтому между ОП и процессором стали устанавливать меньшую по размерам высокоскоростную буферную память, или кэш-память. В дальнейшем она была разделена на два уровня — встроенная в процессор (on-die) и внешняя (on-motherboard).

Кэш 1-го уровня (Level 1 cache, или LI). Кэш 1-го уровня, или первичный кэш, находится на плате центрального процессора и используется для временного хранения команд и данных, организованных в блоки по 32 байта. Первичный кэш — самая быстрая форма памяти. Будучи встроенным в чип, он обеспечивает минимальную задержку интерфейса с АЛУ, однако ограничен в размере. Ll-кэш реализуется, используя принцип статической оперативной памяти (SRAM), и длительное время в среднем имел размер 16 Кбайт.

Процессор Р55 Pentium MMX, выпущенный в начале 1997 г., содержал кэш 1-го уровня размером до 32 Кбайт. Процессоры AMD Кб и Cyrix М2, вышедшие в том же году, уже обеспечивали 64 Кбайт объема кэша 1-го уровня.

Кэш 2-го уровня (Level 2 cache, или L2). Кэш 2-го уровня (вторичный кэш) использует ту же самую логику управления, что и кэш 1-го уровня, и также относится к типу SRAM.

Кэш 2-го уровня обычно имеет два размера — 256 или 512 Кбайт и помещается на системной плате в гнезде типа Card Edge Low Profile (CELP) или в модуле «кэш-на-плате» («cache on a stick» — COAST). Последний напоминает SIMM, но немного короче и включает гнездо COAST, которое обычно расположено близко к процессору и напоминает слот PCI. В процессоре Pentium, однако, кэш 2-го уровня помещался на чипе процессора непосредственно. При этом нередко используются две кэш-па-мяти, одна из которых хранит команды, а другая — данные.

Цель кэша 2-го уровня состоит в том, чтобы поставлять сохраненную информацию на процессор без какой-либо задержки (состояния ожидания). Для этой цели интерфейс шины процессора имеет специальный протокол передачи, названный групповым (или пакетным) режимом (burst mode). При этом обычно используется синхронный тип памяти, управляемой тактовым генератором ЦП. Цикл пакета состоит из четырех передач данных, где на адресную шину выводится адрес только первых 64 бит. Обычно кэш 2-го уровня — это синхронная пакетно-конвейерная память (Pipelined Burst Static RAM — PB SRAM) [16].

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

Инклюзивный кэш — когда любая информация, хранящаяся в кэшах высших уровней, дублируется в кэш-памяти.

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

Стратегии управления иерархической памятью

При построении систем с иерархической памятью целью является получение максимальной производительности подсистемы памяти при ее минимальной стоимости. Эффективность той или иной системы кэш-памяти зависит от стратегии управления памятью. Стратегия управления памятью включает:

  • • метод отображения основной памяти на кэш;
  • • порядок замещения информации в кэше;
  • • алгоритм взаимодействия между основной и кэш-памятью.

Отображение памяти на кэш. Существует три основных способа размещения блоков (строк) основной памяти в кэше:

  • • кэш-память с прямым отображением (direct-mapped cache);
  • • полностью ассоциативная кэш-память (fully associative cache);
  • • частично ассоциативная (или множественно ассоциативная, partial associative, set-associative cache) кэш-па-мять.

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

(Адрес блока кэш-памяти) = (Адрес блока основной памяти) mod (Число блоков в кэш-памяти).

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

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

Частично ассоциативный кэш является наиболее распространенным в данный момент среди процессорных архитектур. Характеризуется тем или иным количеством п «каналов» (степенью ассоциативности, «п-way») и может отображать содержимое данной строки памяти на каждую из п своих строк. Этот вариант является разумным компромиссом между полностью ассоциативным и кэшем «прямого отображения».

В современных процессорах, как правило, используется либо кэш-память с прямым отображением, либо двух- (четырех-) канальная множественно ассоциативная кэш-память. Например, в архитектурах К7 и К8 применяется 16-канальный частично ассоциативный кэш L2.

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

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

  • • случайная (Random) — блоки-кандидаты выбираются случайно (чтобы иметь равномерное распределение). В некоторых системах используют псевдослучайный алгоритм замещения;
  • • замещается тот блок, который не использовался дольше всех (LRU — Least-Recently Used). В этом случае, чтобы уменьшить вероятность удаления информации, которая скоро может потребоваться, все обращения к блокам фиксируются.

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

Алгоритмы обмена с кэш-памятью (свопинга) включают следующие разновидности:

  • • алгоритм сквозной записи (Write Through) или сквозного накопления (Store Through);
  • • алгоритм простого свопинга (Simple Swapping) или обратной записи (Write Back);
  • • алгоритм свопинга с флагами (Flag Swapping) или обратной записи в конфликтных ситуациях с флагами (CUX);
  • • алгоритм регистрового свопинга с флагами (FRS).

Алгоритм сквозной записи — самый простой алгоритм свопинга. Каждый раз при появлении запроса на запись по некоторому адресу обновляется содержимое области по этому адресу как в быстрой, так и в основной памяти, даже если копия содержимого по этому адресу находится в быстром буфере. Такое постоянное обновление содержимого основной памяти, как и буфера, при каждом запросе на запись позволяет постоянно поддерживать информацию, находящуюся в основной памяти, в обновленном состоянии.

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

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

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

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

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

Сохранение когерентности (согласованности) кэш-памяти в многопроцессорных системах. Распространенными протоколами поддержания когерентности кэш-памяти являются следующие.

МESI (Modified, Exclusive, Shared, Invalid) — протокол поддержания когерентности кэш-памяти. Процессор различает кэш-строки, которых нет в кэшах других процессоров (Exclusive) и присутствующие более чем в одном кэше (Shared). Если изменяется Shared-строка, то другим ЦП компьютера передается сигнал проверить свои кэши и сделать напротив своих записей в кэшах пометку «неправильно» (Invalid). Если изменяется Exclusive-строка, то в этом нет необходимости. В любом случае строка помечается как Modified, но попыток немедленно записать в оперативную память эту строку не предпринимается.

М О ESI (Modified, Owner, Exclusive, Shared, Invalid). Здесь Modified, Exclusive, Shared, Invalid соответствуют протоколу MESI. Owner соответствует измененной строке, содержащей данные, которые еще не записаны в оперативную память и которые есть в кэшах других процессоров. В то время как в MESI процессоры почти не используют кэши других ЦП, в протоколе МО ESI любая операция чтения сопровождается проверкой кэшей других ЦП — если нужные данные находятся в одном из них, то читаются прямо оттуда; причем сохранение этих данных в ОП не производится, а в кэш-памяти делается пометка «Owner».

 
<<   СОДЕРЖАНИЕ   >>