В.А. Фисун - Прикладное программирование в задачах математической физики. Архитектурные принципы построения ЭВМ (doc) (1127760), страница 5
Текст из файла (страница 5)
Для ускорения работы микросхемы памяти используются различные системы управления доступа к данным. Основные способы повышения производительности следующие:
-
Многопортовые системы памяти ( multiport memory access).
Многопортовые микросхемы допускают одновременную обработку нескольких запросов к памяти. Так, в двухпортовой памяти дублируются адресные, информационные и управляющие шины. Число возможных параллельных запросов, число портов, определяется коэффициентом размножения шин. Проблемы корректности записи в ячейку памяти одновременно с попыткой прочитать её содержимое решается аппаратной схемой арбитража.
2. Пакетный режим (burst mode) обращения к памяти.
Большинство команд считываются последовательно из соседних ячеек памяти. Последовательная выборка и запись данных является массовой операцией ряда вычислительных алгоритмов. Если обеспечить одновременный доступ к содержимому соседних ячеек памяти и выбор большого кванта памяти целиком в регистры, то команды и данные последовательных запросов можно брать из этого пакета.
3. Конвейерная (pipelining) обработка запросов к памяти.
Архитектура памяти позволяет начать цикл считывания из памяти, не дожидаясь окончания считывания текущего. При этом очередной доступ выполняется, не дожидаясь окончания предыдущего (если запросы независимы).
Так как память разбита на множество банков с независимыми системами управления, то можно управлять очередью запросов к памяти. Если запрашиваются данные из разных банков, то последующий запрос можно делать, не дожидаясь окончания обработки предыдущего запроса.
4. Чередование адресов (расслоение) памяти (interleaved memory).
Расслоение памяти реализуется для памяти, состоящей из банков с независимыми устройствами управления. Адресация байтов в М банках организуется так, что при регулярной выборке данных повторное обращение к одному банку произойдет через М обращений, поэтому возможно совмещение времени выборки. Такая адресация называется иногда карусельной. Для четырех банков одинаковой емкости: Б1, Б2, Б3, Б4 при расслоении распределение адресов памяти по банкам будет таким.
Адреса в банках Б1 Б2 Б3 Б 4
0 0 1 2 3 Распределение первых
1 4 5 6 7 12 адресов памяти
2 8 9 10 11
При такой схеме расслоения два младших бита в адресе байта определяют банк памяти, из которого по старшим битам адреса будет происходить обращение к байту. Расслоение можно использовать как при пакетном, так и конвейерном доступе к памяти. При конвейерном доступе при М-кратном расслоении и регулярной выборке данных доступ к памяти возможен с интервалом, равным 1/М времени цикла памяти. Но возможны конфликты по доступу, если шаг регулярной выборки коррелируется с числом банков памяти. Обычно коэффициент расслоения выбирается кратным двойки. Поэтому выборку данных с шагом, кратным двойке, следует избегать. Механизм расслоения реализуется как для оперативной памяти, так и для кэш -память, причем выбор коэффициента расслоения для банков кэша - не тривиальная задача.
3.2. Адресная и ассоциативная память
Единицей программно адресуемых данных в оперативной памяти – ОЗУ - является байт. Такой вид памяти, при котором необходимая информация определяется номером строки памяти (байта), называется "адресной". При размещении данных в составных элементах: в полуслове (16 бит – 2 байта), в слове (32 бита – 4 байта), в двойном слове (64 бита – 8 байтов), - возникает проблема выбора старшинства байтов в этих элементах. Пусть код 32-битового целого числа без знака, записанного в обычном порядке, при котором бит с наименьшим весом записывается последним, состоит из байтов Б1, Б2, Б3, Б4. Порядок записи этого кода, при которой старший байт (Б1) расположен, начиная с младшего адреса памяти, называется big-endian (тупоконечный). Такой порядок принят в микропроцессорах фирм IBM, HP и еще в некоторых других. Тогда целое число “один” будет храниться в двухбайтовом формате в виде 0000 0001, в четырехбайтовом – 0000 0000 0000 0001.
Альтернативный порядок размещения байтов (Б4, Б3, Б2, Б1) – младшие разряды в младших адресах памяти - называется little-еndian (остроконечный), он принят фирмами Intel (IA32), VAX и др. Здесь единица будет храниться в двухбайтовом формате записи в виде 0001 0000, в четырехбайтовом формате – 0001 0000 0000 0000.
Достоинства каждого порядка размещения байтов преувеличивается разработчиками оборудования, в котором применятся тот или иной порядок старшинства записи байтов в памяти. Некоторые процессоры поддерживают оба порядка записи, а выбором порядка размещения байтов составных элементов можно управлять программно. Экзотические названия порядков размещения байтов в составных элементах взяты у Д. Свифта, Гулливер которого насмехался над расколом в неком обществе, возникшем по поводу выбора конца вареного яйца, с которого следует его разбивать. При побитовом программировании, например, при формировании логических шкал, следует иметь в виду, что выбранный порядок размещения байтов в составных структурах может не совпадать с порядком нумерации битов в байтах. Содержимое этого восьмибитового кода может интерпретироваться как целое число без знака из диапазона 0-256, как логическая шкала или литера алфавита, например, стандарта ANSII. В коммутационных системах уточняется старшинство битов в байте. Так, целое число 7 может быть закодировано байтом 00000111, а также – 11100000, то при побитовых пересылках байта учитывается (задается) порядок пересылки битов. А если учесть существование схем адресации, при которых составной элемент ОЗУ (страница памяти, например) идентифицируется не первым, а последним байтом, разбираться со схемами адресации памяти на уровне битов непросто. Поэтому к приведенным выше терминам о тупо и остроконечности можно добавить сентенцию того же автора: “Все истинные верующие должны разбивать яйца с правильного конца”.
К составным элементам относятся также символьные строки, причем первый символ имеет наибольший вес, выбор порядка последовательности записи символов строки такой же, как и для чисел.
Из составных элементов можно формировать массивы, тогда ОЗУ будет представляться двумерным массивом. Обращение за содержимым строки производится заданием номера (адреса) нужной строки - Ai. При записи, кроме адреса строки, указывается регистр, содержимое которого следует записать в эту строку. Пусть в памяти из трех строк хранятся номера телефонов:
1924021
9448304
3336167
Для получения номера телефона второго абонента следует обратиться: load (А2) и получить в регистре ответа 9448304.
Другой вид оперативной памяти – "ассоциативное запоминающее устройство" (АЗУ) - можно рассматривать также как двумерную таблицу, но у каждой строки таблицы есть дополнительное поле, поле ключа. Например:
Поле ключа Содержимое
Иванов 1924021
Петров 9448304
Сидоров 3336167
После обращение к ассоциативной памяти с запросом: load (Петров) получим ответ: 9448304. Здесь задание координаты строки памяти производится не по адресу, а по ключу - Петров. Но при состоянии ассоциативной памяти:
Ключ Содержимое
А1 1924021
А2 9448304
А3 3336167
можно получить номер телефона из второй строки запросом: load (А2), по ключу А2. Этот пример служит для иллюстрации возможной имитации адресной памяти на ассоциативной памяти.
Ассоциативная память имеет очевидное преимущество по сравнению с адресной памятью. Однако у нее есть большой недостаток - ее аппаратная реализация при современном состоянии техники невозможна для памяти большого объема. Привлекательность ассоциативной схемы хранения и поиска информации вызвала к жизни целый набор механизмов имитации ассоциативной памяти при помощи адресной. В общем случае задача сводятся к нахождению так называемой хэш-функции f. Эта функция отображения ключа K в адрес памяти (адресной) a = f(K).
Пример тривиальной хеш-функции для организации телефонной книги. Адресная память, выделенная для реализации телефонного архива, делится пополам.
В первой части памяти записаны ключи (фамилии), во второй - соответствующие номера телефонов. Алгоритм работы хэш-функции очевиден: сначала перебором содержимого первой части памяти находится индекс, который соответствует заданной фамилии. Затем по этому индексу из второй части памяти выбирается номер телефона. Такая функция непригодна для систем, критичных к времени выборки.
Опуская промежуточные схемы, реализация быстрой схемы выборки данных из адресной памяти по ассоциативному принципу такова. Опять тривиальная хэш-функция: текст ключа – фамилия - рассматривается как двоичное число и используется в качестве адреса в обычной адресной памяти, в которой хранятся номера телефонов. Обеспечивая скорость выборки данных, равной по характеристикам обычной, адресной памяти, такая функция очень расточительно использует память. Поэтому хэш-функции выбирают, используя особенности множеств, из которых формируются ключи. Так, если ключи – тексты фамилии в байтовой кодировке - разрядность кодов ключей может быть сокращена при сжатии текстовой записи.
3.3. Виртуальная память
Виртуальная память – линейная модель памяти, она же сплошная, плоская (flat), позволяет обращаться к памяти ЭВМ единообразно. Механизм виртуальной памяти позволяет: снять ограничения, связанные с объемом памяти, при разработке алгоритмов; предоставлять программисту область памяти в виде логически непрерывного пространства; способствовать более эффективному управлению физической памятью.
По определению, исполнительный адрес, сформированный в процессоре, может указывать на любой элемент памяти виртуального адресного пространства (байта) из диапазона: 0 – (N-1), где N=2n , а n ассоциируется с разрядностью внутрипроцессорных интерфейсов. Современные процессоры имеют 32-разрядные шины, а некоторые - уже 64-разрядные. Так, для i486 процессоров (архитектура IA32) с 32-разрядной шиной объем виртуального адресного пространства равен 4 Гбайт. Программа, выполняемая на процессоре, имеет право использовать для адресации элементов своего объектного кода и данных в общем случае весь объем виртуальной памяти. Обычно виртуальное пространство программ укорачивается на размер общедоступных системных процедур (библиотек, оболочек, пакетов), к которым обращаются программы всех пользователей. Реальное физическое пространство для отображения всего объема виртуального пространства программы может быть обеспечено только на жестких магнитных дисках, физическая память процессора - ОЗУ, которая используется при выполнении программы, имеет гораздо меньший объем (1-32 Мбайт). Однако, согласно принципу существования в вычислительных приложениях точек сгущения, можно предположить, что программы в течение некоторого времени используют локальные фрагменты текста программы и ее данных, возможно, расположенных на различных участках виртуального пространства.
Поэтому можно использовать физическую оперативную память процессора в качестве буфера, куда будут переписываться требуемые фрагменты программного приложения с жесткого диска по мере необходимости. Фрагментация виртуальной памяти программы может производиться путем разделения её на блоки фиксированной длины, называемые страницами, или на блоки переменной длины, на сегменты. Размер сегментов определяется структурой задачи, каждый сегмент представляет собой отдельную логическую единицу информации, содержащую совокупность данных или программ. К сегментам можно обращаться по именам, в каждом из них устанавливается собственная нумерация слов, начиная с нуля. В микропроцессорах архитектуры IA32 используется комбинированная схема фрагментации виртуальной памяти: память разделяется на сегменты, которые, в свою очередь, состоят из страниц.
В современных микропроцессорах чаще всего используется только страничная фрагментация памяти. В каждый момент выполнения программы на физическую память в ОЗУ отображаются только те виртуальные страницы, которые используются программой в текущий момент.
Остальные страницы виртуальной памяти хранятся во внешней памяти в накопителях на жестких магнитных дисках. Управление оперативной памятью реализуется путем разбиения виртуальной и физической памяти на одинаковые страницы размером в 4 Кбайта (здесь и далее используются параметры микропроцессоров архитектуры IA32) и такими квантами производится перепись фрагментов виртуального пространства задачи с диска в оперативную память процессора. Такими же квантами производится перепись на диск результатов счета. После переписи фрагмента программ с магнитного диска в ОЗУ возникает проблема соответствия адресов виртуального пространства задачи - виртуальных адресов - адресам реального физического пространства микропроцессора - физическим адресам ОЗУ.
Необходимое при этом отображение виртуальных адресов в физические адреса оперативной памяти обеспечивается специальным механизмом трансляции адресов. При страничной организации памяти виртуальное пространство 4 Гбайт разделяется на блоки – страницы (page) размером в 4 Кбайт, т.е. на миллион виртуальных страниц. Виртуальный 32-разрядный адрес байта представляется в виде двух полей: 20 старших разрядов определяют номер страницы, а 12 младших разрядов - сдвиг, смещение задают номер байта внутри этой страницы. Трансляция адресов заключается в замене номера виртуальной страницы на соответствующий номер страницы оперативной памяти – физической страницы.