ОРГАНИЗАЦИЯ ПАМЯТИ В ВЫЧИСЛИТЕЛЬНЫХ МАШИНАХ

Назначение, основные параметры и

Классификация видов памяти

Устройства памяти (запоминающие устройства) ВМ предназначены для записи, хранения и считывания информации, представленной в цифровой форме /2,3/. Устройства памяти, как и процессоры, оперируют с двумя видами информации – программами и данными, поэтому характеристики памяти во многом определяют производительность и функциональные возможности ВМ.

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

Основными параметрами, характеризующими устройства памяти, являются информационная емкость (объем), быстродействие, энергопотребление и стоимость /2,5,8/.

Информационная емкость (объем) устройства памяти определяется максимальным количеством хранимой информации и измеряется в байтах, Кбайтах, Мбайтах, Гбайтах и Тбайтах.

1 Кбайт = 2 10 байт; 1Мбайт = 2 20 байт; 1Гбайт = 2 30 байт и 1Тбайт = 2 40 байт.

Быстродействие памяти характеризуется следующими основными параметрами:

временем выборки (доступа) t В, определяемым временным интервалом между моментами подачи сигнала выборки (начала цикла чтения) и получением считанных данных на выходе памяти;

длительностью цикла обращения t Ц , который определяется минимально допустимым временным интервалом между следующими друг за другом обращениями к памяти. Учитывая, что под обращением к памяти понимается запись или чтение, иногда разделяют длительность цикла чтения t Ц.ЧТ . и длительность цикла записи t Ц.ЗП. для видов памяти, у которых эти длительности циклов различны, т.е. t Ц.ЧТ. ≠ t Ц.ЗП .

В общем случае цикл обращения состоит из фазы выборки (доступа) и фазы регенерации (восстановления) памяти, поэтому t Ц > t В.

Быстродействие памяти можно также характеризовать скоростью передачи записываемых или считываемых данных и измерять в Мбайтах/сек.

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

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

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

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

По физическому принципу работы память классифицируется на электронную, магнитную, оптическую, магнитно – оптическую.

Электронная память выполняется на полупроводниковых элементах и реализуется в виде БИС. Электронная память разделяется на статическую и динамическую.

В БИС статической памяти в качестве элементарных ячеек памяти применяются статические триггеры на биполярных или полевых транзисторах. Как известно, число устойчивых состояний триггера равно двум, что позволяет использовать его для хранения единицы информации – бита. Ячейки памяти для хранения байт и слов используют соответственно 8 и 16 триггеров.

В БИС динамической памяти в качестве элементарных ячеек памяти применяются электрические конденсаторы. Наличие заряда соответствует хранению логической «1», отсутствие заряда – хранению логического «0». В качестве запоминающих конденсаторов используются либо межэлектродные емкости МОП транзисторов, либо специально созданные в кристалле БИС МОП конденсаторы. Фрагмент структурной схемы динамической памяти, содержащий две ячейки 1 и 2, изображен на рис.6.1.

Каждая элементарная ячейка памяти содержит запоминающий МОП конденсатор С (десятые доли пФ) и транзисторный ключ Т, подключающий этот конденсатор к шине данных. Затвор транзисторного МОП – ключа соединен с соответствующим выходом дешифратора адреса. При выборе ячейки ключ Т открывается и подключает конденсатор С к шине данных. Далее, в зависимости от вида команды: запись (WR) или чтение (RD) - через соответствующий усилитель производится запись входных данных (DI) или чтение выходных данных (DO).

Динамическая память по сравнению со статической существенно проще, дешевле и обеспечивает очень высокую степень интеграции, т.е. более высокую удельную емкость. Но по сравнению со статической динамическая память обладает меньшим быстродействием и требует периодической регенерации (восстановления) информации в элементарных ячейках. Другими словами, необходимо периодически восстанавливать заряд на запоминающих конденсаторах С, которые с течением времени саморазряжаются, т.е. «теряют» информацию. Для этого через каждые несколько миллисекунд (mсек) производятчтение информации из ячеек памяти и затем повторную запись информации, что позволяет восстанавливать заряд на запоминающих конденсаторах C. Необходимость организации периодических циклов регенерации (Refresh Cycles) несколько усложняет управление динамической памятью.

Для типовых модулей электронной памяти время выборки t В составляет единицы – десятки наносекунд (nсек ), а информационная емкость – десятки – сотни Мбайт.

Статическая и динамическая электронная память является энергозависимой , т.е. при отключении электропитания информация в ячейках не сохраняется. Существует также энергонезависимая электронная память – постоянные запоминающие устройства (ПЗУ), информация из которых в процессе работы ВМ может только считываться. Ячейки памяти ПЗУ будут рассмотрены ниже.

Магнитная память основана на наличии у ряда магнитных материалов (например, окиси железа) двух устойчивых состояний остаточного намагничивания противоположного знака. Такие магнитные материалы характеризуются прямоугольной петлей гистерезиса B = f(H) , и из них выполняется рабочий магнитный слой, наносимый на поверхность различных подвижных носителей – магнитных дисков. Для записи и чтения информации используются магнитные головки, представляющие собой миниатюрные катушки индуктивности, намотанные на магнитном сердечнике с зазором. При записи магнитная головка намагничивает участок магнитного слоя, проходящий под рабочим зазором, в направлении, определяемом направлением протекающего тока. При считывании намагниченные участки поверхности проходят около индуктивной головки считывания и наводят в ней импульсы э.д.с. Устройства памяти, использующие этот принцип, имеют очень низкую удельную стоимость хранения информации, являются энергонезависимыми, но, являясь электромеханическими, по быстродействию, надежности и энергопотреблению существенно уступают электронной памяти. Для НЖМД скорость передачи данных достигает десятков Мбайт/сек, а информационная емкость – сотен Гбайт.



В оптической памяти для хранения информации используется изменение оптических свойств (в основном, степени отражения) поверхности носителя. Оптический носитель выполняется в виде диска (Compact Disk - CD), отражающий слой (металлическое напыление) которого покрыт слоем органического красителя. При записи луч лазера модулируется потоком записываемых бит и в определенных местах дорожки выжигает ямки в слое красителя. За счет разницы коэффициента отражения ямок и невыжженных участков поверхности при считывании возникает модуляция яркости отраженного луча, которая кодирует считываемую с CD информацию. Производятся различные типы оптических CD дисков: CD-ROM (Read Only Memory) – позволяющие только считывать записанную матричным способом информацию, CD-R (Recordable) – допускающие хотя бы однократную запись на диск и многократное считывание, CD-RW (ReWritable) – позволяющие многократную перезапись на диск (и конечно же, считывание). Оптические диски дешевы и имеют значительную (до одного Гбайта) информационную емкость, являются энергонезависимыми и легко сменяемыми, но по быстродействию, надежности и энергопотреблению, как и магнитные диски, существенно уступают электронной памяти.

По функциональному назначению устройства памяти можно классифицировать на сверхоперативные запоминающие устройства (СОЗУ), оперативные запоминающие устройства (ОЗУ), постоянные запоминающие устройства (ПЗУ) и внешние запоминающие устройства (ВЗУ).

ОЗУ предназначено для хранения программ (системных, прикладных) и данных, непосредственно используемых ЦП в текущее время. Длительности циклов чтения и записи для оперативной памяти, как правило, одинаковы. Обычно в качестве ОЗУ применяется динамическая память объемом до единиц Гбайт в зависимости от назначения и области применения МС.

СОЗУ или кэш-память (Cache Memory) – это небольшого объема быстродействующая память, у которой длительность цикла обращения t Ц. меньше длительности машинного цикла процессора. Поэтому при обращении к кэш-памяти не требуется вводить такты ожидания процессора в машинные циклы обращения к памяти. Кэш-память является буферной памятью между ОЗУ и ЦП и выполняется на базе статической памяти. Кэш хранит копии блоков (страниц) программ и данных тех областей ОЗУ, к которым происходили последние обращения, а также каталог – список их текущего соответствия областям ОЗУ. При каждом обращении к оперативной памяти контроллер кэш-памяти по каталогу проверяет, есть ли действительная копия затребованного блока (страницы) в кэш. Если копия там есть, то это случай кэш-попадания , и обращение за данными или кодом происходит только к кэш-памяти. Если действительной копии там нет, то это случай кэш-промаха , и в кэш записывается требуемый блок (страница) из ОЗУ, причем запись производится на место предварительно удаленного из кэш в ОЗУ наименее актуального блока (страницы), т.е. блока информации, число обращений к которому было наименьшим. За счет присущих программам и данным таких фундаментальных свойств, как пространственная и временная локальности /2,7,13/ число кэш-попаданий во много раз превышает число кэш-промахов даже при небольших (единицы – десятки Кбайт) объемах кэш памяти. Поэтому использование кэш-памяти значительно повышает производительность ВМ. Обычно кэш реализуется по трехуровневой схеме: первичный кэш (L1 Cache), объемом десятки Кбайт, и вторичный кэш (L2 Cache), объемом сотни Кбайт, размещается в кристалле МП, кэш третьего уровня (L3 Cache), единицы Мбайт устанавливают на системной плате или в корпусе МП.

ПЗУ – это электронная энергонезависимая память, которая применяется для хранения неизменяемой или редко изменяемой в течении времени эксплуатации ВМ информации: системного ПО (BIOS), прикладного ПО для встраиваемых и бортовых ВМ, наборов таблиц, параметров конфигурации различных систем и т.п. Основным режимом работы ПЗУ является чтение, что и обуславливает другое общее название такой памяти ROM (Read Only Memory). Запись информации в ПЗУ, называемая программированием, обычно существенно сложнее, требует больших затрат времени и энергии, чем чтение.

ВЗУ предназначены для энергонезависимого хранения больших объемов определенным образом структурированной информации: файлов, баз данных, архивов. Характерной особенностью внешней памяти является то, что ее устройства оперируют блоками информации, а не байтами или словами, как это позволяет оперативная память. Кроме того, процессор может осуществлять доступ к ВЗУ только через оперативную память. В качестве ВЗУ обычно используется дисковые (НЖМД, CD) накопители, позволяющие хранить сотни Гбайт информации.

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

Способ организации памяти определяется методом размещения и поиска информации в ЗУ. По этому признаку различают адресную, ассоциативную и стековую организацию памяти.

В адресной памяти для обращения к ячейкам памяти используются их адреса , под которыми понимаются коды номеров ячеек памяти. Адресная организация памяти позволяет обращаться к ячейкам памяти по их адресам в произвольном порядке, причем длительность цикла обращения является одинаковой для всех ячеек независимо от адреса. Поэтому для названия такой память также используется термин «запоминающие устройства с произвольной выборкой (ЗУПВ)» или RAM (Random Access Memory). Адресную организацию памяти имеют, например, ОЗУ и ПЗУ.

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

Если ячейка с заданной комбинацией нулей и единиц находится, АЗУ формирует положительный ответ с указанием адреса найденной ячейки. Далее адрес передается в дешифратор адреса, и все содержимое такой ячейки можно считать или записать в нее новое содержимое. В противном случае АЗУ формирует отрицательный ответ на запрос.

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

Стековая память (Stack), так же как и ассоциативная является безадресной. Стек можно рассматривать как совокупность ячеек, образующих одномерный массив, в котором соседние ячейки связаны друг с другом разрядными цепями передачи слов. В этой памяти запись и чтение производятся по правилу «последнее записанное считывается первым» или «Last Input First Output (LIFO)». Поэтому стек называют «магазинной» памятью с обратным порядком считывания. Обычно стек организуют в оперативной памяти. Количество слов в стеке определяется регистром-указателем стека SP, а запись в стек и чтение из него производится соответственно командами PUSH и POP. Широкое применение стековая память находит, как уже было рассмотрено выше, при обработке прерываний и вызове подпрограмм.

Наряду со стековой памятью большое распространение получила «магазинная» память с прямым порядком считывания, т.е. «первое записанное считывается первым» или «First Input First Output (FIFO)». Эта память называется буферной и, как и стек, организуется в ОЗУ.

Классификация МКМД-систем

В МКМД-системе каждый процессорный элемент (ПЭ) выполняет свою про­грамму достаточно независимо от других ПЭ. В то же время процессорные элементы должны как-то взаимодействовать друг с другом. Различие в способе такого взаимодействия оп­ределяет условное деление МКМД-систем на ВС с общей памятью и системы с распределенной памятью (рис. 5.7).

В системах с общей памятью, которые характеризуют как сильно связанные, имеется общая память данных и команд, доступная всем процессорным элементам с помощью общей шины или сети соеди­нений. Такие системы называются мультипроцессорами. К этому типу относятся симметричные мультипроцессоры (UMA (SMP), Symmetric Multiprocessor), системы с неоднородным доступом к памяти (NUMA, Non-Uniform Memory Access) и системы, с так называемой, локальной памятью вместо кэш-памяти (COMA, Cache Only Memory Access).

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

SMP-системы относятся к архитектуре UMA. Вычислительные системы с общей памятью, где доступ любого процессора к памяти производится единообразно и занимает одинаковое время, называют системами с однородным доступом к памяти UMA (Uniform Memory Access).

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

Классическая (только с общей основной памятью);

С дополнительным локальным кэшем у каждого процессора;

С дополнительной локальной буферной памятью у каждого процессора (рис. 5.8).

С точки зрения способа взаимодействия процессоров с общими ресурсами (памятью и СВВ) в общем случае выделяют следующие виды архитектур UMA:

С общей шиной и временным разделением (7.9);

С координатным коммутатором;

На основе многоступенчатых сетей.

Использование только одной шины ограничивает размер мультипроцессора UMA до 16 или 32 процессоров. Чтобы получить больший размер, требуется другой тип коммуникационной сети. Самая простая схема соединения – координатный коммутатор (рис. 5.10). Координатные коммутаторы используются на протяжении многих десятилетий для соединения группы входящих линий с рядом выходящих линий произвольным образом.

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


Координатные коммутаторы вполне применимы для систем средних размеров (рис. 5.11).


На основе коммутаторов 2x2 можно построить многоступенчатые сети. Один из возможных вариантов – сеть omega (рис. 5.12). Для n процессоров и n модулей памяти тредуется log 2 n ступеней, n/2 коммутаторов на каждую ступень, то есть всего (n/2)log 2 n коммутаторов на каждую ступень. Это намного лучше, чем n 2 узлов (точек пересечения), особенно для больших n.

Размер мультипроцессоров UMA с одной шиной обычно ограничивается до нескольких десятков процессоров, а для координатных мультипроцессоров или мультипроцессоров с коммутаторами требуется дорогое аппаратное обеспечение, и они ненамного больше по размеру. Чтобы получить более 100 процессоров, необходим иной доступ к памяти.

Для большей масштабируемости мультипроцессоров приспособлена архитектура с неоднородным доступом к памяти NUMA (NonUniform Memory Access). Как и мультипроцессоры UMA, они обеспечивают единое адресное пространство для всех процессоров, но, в отличие от машин UMA, доступ к локальным модулям памяти происходит быстрее, чем к удаленным.

В рамках концепции NUMA реализуется подходы, обозначаемые аббревиатурами NC-NUMA и CC-NUMA.

Если время доступа к удаленной памяти не скрыто (т.к. кэш-память отсутствует), то такая система называется NC-NUMA (No Caching NUMA – NUMA без кэширования) (рис. 5.13).

Если присутствуют согласованные КЭШи, то система называется CC-NUMA (Coherent Cache Non-Uniform Memory Architecture – NUMA с согласованной кэш-памятью) (7.14).

Организация памяти МПС. Сегментация памяти. Вычисление адреса. Внутренняя КЭШ память .

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

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

Рисунок 7.4.1. Схема подключения модуля памяти.

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

– память программы начального запуска, выполненная на ПЗУ или флэш-памяти;

– память для стека или стек (Stack) – это часть оперативной памяти, пред­назначенная для временного хранения данных;

– таблица векторов прерываний, содержащая адреса начала программ обработки прерываний;

– память устройств, подключенных к системной шине.

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

Часто простран­ство памяти делится на сегменты с программно изменяемым адресом начала сегмента и с установленным размером сегмента. Например, в процессоре Intel 8086 сегментирование памяти организовано следующим образом.

Вся память системы представляется не в виде непрерывного пространства, а в виде нескольких кусков – сегментов заданного размера (по 64 Кбайта), положение которых в пространстве памяти можно изменять программным путем.

Для хранения кодов адресов памяти используются не отдельные регистры, а пары регистров:

Сегментный регистр определяет адрес начала сегмента (то есть положение сегмента в памяти);

Регистр указателя (регистр смещения) определяет положение рабочего адреса внутри сегмента.

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

Рисунок 7.4.2. Формирование физического адреса памяти из адреса сегмента и смещения.

Положение этого адреса в памяти показано на рисунке7.4.3.

Рисунок 7.4.3. Положение физического адреса в памяти

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

Отметим, что введение сегментирования, прежде всего, связано с тем, что внутренние регистры процессора 16-разрядные, а физический адрес памяти 20-разрядный (16-разрядный адрес позволяет использовать память только в 64 Кбайт, что явно недостаточно).

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

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

Основная память

Основная память - это запоминающее устройство, напрямую связанное с процессором и предназначенное для хранения выполняемых программ и данных непосредственно участвующих в операциях. Она имеет достаточное быстродействие, но ограниченный объем. Основная память делится на различные виды, основными из которых являются оперативная память (ОЗУ) и постоянное запоминающее устройство (ПЗУ) (рис.1).

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

ОЗУ служит для приема, хранения и выдачи информации. Именно в нем процессор «берет» программы и исходные данные для обработки, в нее он записывает полученные результаты. Название «оперативная» это память получила потому, что она работает очень быстро, так что процессору практически не приходится ждать при чтении данных из памяти и записи в память. Однако содержащие в ней данные сохраняются только пока компьютер включен. При выключении компьютера содержимое оперативной памяти стирается. Таким образом ОЗУ - энергозависимая память.

Рис. 1. Основные виды основной памяти

Часто для оперативной памяти используют обозначение RAM (random access memory, т.е. память с произвольным доступом). Под произвольным доступом понимают возможность непосредственного доступа к любой (произвольной) заданной ячейки памяти, причем время доступа для любой ячейки одинаково.

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

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

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

Стоимость оперативной памяти в последнее время резко упала (с лета 1995 до лета 1996 г. - более чем в 4 раза), поэтому большие запросы многих программ и операционных систем к оперативной памяти с финансовой точки зрения стали менее обременительны.

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

Для компьютеров на основе Intel-386DX или 80386SX размер КЭШ-памяти в 64 Кбайт является удовлетворительным, а 128 Кбайт вполне достаточным. Компьютеры на основе Intel-80486DX, DX2, DX4 и Pentium обычно оснащаются КЭШ-памятью емкостью 256 Кбайт.

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

В микропроцессоре Pentium Pro КЭШ-память второго уровня содержится в едином корпусе с самим процессором (можно сказать она встроена в микропроцессор).

Не обязательно иметь всю память, информация в которой должна меняться. Часть наиболее важной информации лучше постоянно хранить в памяти компьютера. Эту память называют постоянной. Данные в постоянную память занесены при ее изготовлении. Как правило, эти данные не могут быть изменены, выполняемые на компьютере программы могут только их считывать. Такой вид памяти обычно называют ROM (read only mеmory, или память только для чтения), или ПЗУ (постоянное запоминающее устройство).

В IBM PC - совместимом компьютере в постоянное памяти хранятся программы для проверки оборудования, компьютера, инициирования загрузки операционной системы (ОС) и выполнения базовых функций по обслуживанию устройств компьютера. Поскольку большая часть этих программ связана с обслуживанием ввода-вывода, часто содержимое постоянной памяти называется BIOS (Basic Input - output System, или базовая система ввода -вывода).

Во многих компьютерах устанавливается BIOS на основе ФЛЕШ-памяти. Такая память может быть изменена программами, что позволяет обновлять BIOS с помощью специальных программ, без замены материнской платы или микросхемы BIOS.

Во всех компьютерах, кроме очень старых, в BIOS содержится также программа настройки конфигурации компьютера (SETUP). Она позволяет установить некоторые характеристики устройств компьютера (типы видеоконтроллера, жестких дисков и дисководов для дискет, часть также режимы работы с оперативной памятью, запрос пароля при начальной загрузке и т.д.). Как правило, программа настройки конфигурации вызывается, если пользователь во время начальной загрузки нажмет определенную клавишу или комбинацию клавиш (чаще всего клавишу Del).

Емкость ФЛЕШ-памяти от 32 Кбайт до 2 Мбайт, время доступа по считыванию 0,06 мкс, время записи одного байта примерно 10 мкс; ФЛЕШ-память - энергонезависимое ЗУ.

Кроме обычной оперативной памяти и постоянной памяти, в компьютере имеется небольшой участок памяти для хранения параметров конфигурации компьютера. Его часто называют CMOS-памятью, поскольку эта память обычно выполняется по технологии CMOS (complementary metal-oxide semiconductor), обладающей низким энергопотреблением. Содержимое CMOS-памяти не изменяется при выключении электропитания компьютера, поскольку для ее электропитания используется специальный аккумулятор.

Таким образом, емкость основной памяти состоит из миллионов отдельных ячеек памяти емкостью 1 байт каждая. Общая емкость основной памяти современных ПК обычно лежит в пределах от 1 до 4 Гбайт. Емкость ОЗУ на один два порядка превышает емкость ПЗУ: ПЗУ занимает на новых системных платах до 2 Мбайт), остальное объем ОЗУ.

Глава 11

Организация памяти вычислительных систем

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

В зависимости от того, каким образом организована память многопроцессорных (многомашинных) систем, различают вычислительные системы с общей памятью (shared memory) и ВС с распределенной памятью (distributed memory). В системах с общей памятью (ее часто называют также совместно используемой или разделяемой памятью) намять ВС рассматривается как общин ресурс, и каждый из процессоров имеет полный доступ ко всему адресному пространству. Системы с обшей памятью называют сильно связанными (closely coupled systems). Подобное построение вычислительных систем имеет место как в классе SIMD, так и в классе MIMD. Иногда, чтобы подчеркнуть это обстоятельство, вводят специальные подклассы, используя для их обозначения аббревиатуры SM-SIMD (Shared Memory SIMD) и SM-MIMD (Shared Memory MIMD).

В варианте с распределенной памятью каждому из процессоров придается собственная память. Процессоры объединяются в сеть и могут при необходимости обмениваться данными, хранящимися в их памяти, передавая друг другу так называемые сообщения. Такой вид ВС называют слабо связанными (loosely coupled systems). Слабо связанные системы также встречаются как в классе SIMD, так и В классе MIMD, и иной раз, чтобы подчеркнуть данную особенность, вводят подклассы DM-SIMD (Distributed Memory SIMD) и DM-MIMD (Distributed Memory MIMD).

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

Различие между общей и распределенной памятью - это разницу в структуре виртуальной памяти, то есть в том, как память выглядит со стороны процессора. Физически почти каждая система памяти разделена на автономные компоненты доступ к которым может производиться независимо. Общую память от распределенной отлипает то, каким образом подсистема памяти интерпретирует поступивший от процессора адрес ячейки. Для примера положим, что процессор выполняет команду load RO, i, означающую «Загрузить регистр R0 содержимым ячейки i». В случае общей памяти i - это глобальный адрес, и для любого процессора указывает на одну и ту же ячейку. В распределенной системе памяти i - это локальный адрес Если два процессора выполняют команду load RO, i, то каждый из них обращается к i-й ячейке в своем локальной памяти, то есть к разным ячейкам, и в регистры R0 могут быть загружены неодинаковые значения.

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

Память с чередованием адресов

Физически память вычислительной системы состоит из нескольких модулей (банков), при этом существенным вопросом является то, как в этом случае распределено адресное пространство (набор всех адресов, которые может сформировать процессор). Один из способов распределения виртуальных адресов по модулям памяти состоит в разбиении адресного пространства на последовательные блоки. Если память состоит из п банков, то ячейка с адресом i при поблочном разбиении будет находиться в банке с номером i / n . В системе памяти с чередованием адресов (interleaved memory) последовательные адреса располагаются в различных банках: ячейка с адресом i находится в банке с номером i mod п. Пусть, например, память состоит из четырех банков, по 256 байт в каждом. В схеме, ориентированной на блочную адресацию, первому банку будут выделены виртуальные адреса 0-255, второму - 256-511 и т. д. В схеме с чередованием адресов последовательные ячейки в первом банке будут иметь виртуальные адреса 0, 4, 8, .... во втором банке - 1, 5, 9 и т. д. (рис. 11.1, а).

Распределение адресного пространства по модулям дает возможность одновременной обработки запросов на доступ к памяти, если соответствующие адреса относятся к разным банкам, Процессор может в одном из циклов затребовать доступ к ячейке i а в следующем цикле - к ячейке j. Если i и j находятся в разных банках, информация будет передана в последовательных циклах. Здесь под циклом понимается цикл процессора, в то время как полный цикл памяти занимает несколько циклов процессора. Таким образом, в данном случае процессор не должен ждать, пока будет завершен полный цикл обращения к ячейке i . Рассмотренный прием позволяет повысить пропускную способность: если система памяти состоит из

Рис. 11.1- Память с чередованием адресов: а - распределение адресов; б- элементы, извлекаемые с шагом 9 из массива 8 х 8

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

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

Системы памяти зачастую обеспечивают дополнительную гибкость при извлечении элементов векторов. В некоторых системах возможна одновременная загрузка каждого n-го элемента вектора, например, при извлечении элементов вектора V , хранящегося в последовательных ячейках памяти; при п = 4, память возвратит Интервал между элементами называют шагом по индексу или «страйдом» (stride). Одним из интересных применений этого свойства может служить Доступ к матрицам. Если шаг по индексу на единицу больше числа строк в матрице, одиночный запрос на доступ к памяти возвратит все диагональные элементы матрицы (рис. 11.1,б). Ответственность за то, чтобы все извлекаемые элементы матрицы располагались в разных банках, ложится на программиста.

Модели архитектуры памяти вычислительных систем

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

Рис. 11.2. Классификация моделей архитектур памяти вычислительных систем

На рис. 11.2 приведена классификация таких моделей, применяемых в вычислительных системах класса MIMD (верна и для класса S1MD).

Модели архитектур совместно используемой памяти

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

Вычислительные системы с общей памятью, где доступ любого процессора к памяти производится единообразно и занимает одинаковое время, называют системами с однородным доступом к памяти и обозначают аббревиатурой UMA (Uniform Memory Access). Это наиболее распространенная архитектура памяти параллельных ВС с общей памятью .

Технически UМА-системы предполагаю наличие узла, соединяющего каждыйиз п процессоров с каждым из т модулей памяти. Простейший путь построения таких ВС - объединение нескольких процессоров (Р i) с единой памятью (M p) посредством общей шины - показан на рис. 11.3, а. В этом случае, однако, в каждый момент времени обмен по шине может вести только один из процессоров, то есть процессоры должны соперничать за доступ к шипе. Когда процессор Р i выбирает из памяти команду, остальные процессоры должны ожидать, пока шина освободится. Если в систему входят только два процессора, они в состоянии работать с производительностью, близкой к максимальной, поскольку их доступ к шинеможно чередовать: пока один процессор декодирует и выполняет команду, другой вправе использовать шину для выборки из памяти следующей команды. Однако когда добавляется третий процессор, производительность начинает падать. При наличии на шине десяти процессоров кривая быстродействия шины (рис. Н.З, а) становится горизонтальной, так что добавление 11-го процессора уже не дает повышения производительности. Нижняя кривая на этом рисунке иллюстрирует тот факт, что память и шина обладают фиксированной пропускной способностью, определяемой комбинацией длительности цикла памяти и протоколом шины, и в многопроцессорной системе с общей шиной эта пропускная способность распределена между несколькими процессорами. Если длительность цикла процессора больше по сравнению с циклом памяти, к шине можно подключать много процессоров. Однако фактически процессор обычно намного быстрее памяти, поэтому данная схема широкого применения не находит.

Рис. 11.3. Общая память: а - объединение процессоров с помощью шины; б - система с локальными кэшами; в - производительность системы как функция от числа процессоров на шине; г - многопроцессорная ВС с общей памятью, состоящей из отдельных модулей

Альтернативный способ построения многопроцессорной ВС с общей памятью на основе НМЛ показан на рис. 11.3, г. Здесь шипа заменена коммутатором, маршрутизирующим запросы процессора к одному из нескольких модулей памяти. Несмотря на то что имеется несколько модулей памяти, все они входят в единое виртуальное адресное пространство. Преимущество такого подхода в том, что коммутатор и состоянии параллельно обслуживать несколько запросов. Каждый процессор может быть соединен со своим модулем памяти и иметь доступ к нему на максимально допустимой скорости. Соперничество между процессорами может возникнуть при попытке одновременного доступа к одному и тому же модулю памяти. В этом случае доступ получает только один процессор, а прочие - блокируются.

К сожалению, архитектура UMA не очень хорошо масштабируется. Наиболее распространенные системы содержат 4-8 процессоров, значительно реже 32-64 процессора. Кроме того, подобные системы нельзя отнести к отказоустойчивым, так как отказ одного процессора или модуля памяти влечет отказ всей ВС.

Другим подходом к построению ВС с общей памятью является неоднородный доступ к памяти, обозначаемый как NUM A (Non-Uniform Memory Access), Здесь по-прежнему фигурирует единое адресное пространство, но каждый процессор имеет локальную память. Доступ процессора к собственной локальной памяти производится напрямую, что намного быстрее, чем доступ к удаленной памяти через коммутатор или сеть. Такая система может быть дополнена глобальной памятью тогда локальные запоминающие устройства играют роль быстрой кэш-памяти для глобальной памяти. Подобная схема может улучшить производительность ВС, по не в состоянии неограниченно отсрочить выравнивание прямой производительности. При наличии у каждого процессора локальной кэш-памяти (рис. 11.3,6) существует высокая вероятность (р > 0,9) того, что нужные команда или данные уже находятся в локальной памяти. Разумная вероятность попадания в локальную память существенно уменьшает число обращений процессора к глобальной памяти и, таким образом, ведет к повышению эффективности. Место излома кривой производительности (верхняя кривая на рис. 11.3, в), соответствующее точке, в которой добавление процессоров еще остается эффективным, теперь перемещается в область 20 процессоров, а тонка, где кривая становится горизонтальной, - в область 30 процессоров.

В рамках концепции NUMA реализуется несколько различных подходов, обозначаемых аббревиатурами СОМА, CC - NUMA и NCC - NUMA .

В архитектуре только с кэш-памятью (СОМА, Cache Only Memory Architecture) локальная память каждого процессора построена как большая кэш-память для быстрого доступа со стороны «своего» процессора . Кэши всех процессоров в совокупности рассматриваются как глобальная память системы. Собственно глобальная память отсутствует. Принципиальная особенность концепции СОМА выражается в динамике. Здесь данные не привязаны статически к определенному модулю памяти и не имеют уникального адреса, остающегося неизменным в течение всего времени существования переменной. В архитектуре СОМА данные переносятся в кэш-память того процессора, который последним их запросил, при этом переменная не фиксирована уникальным адресом и в каждый момент времени может размещаться в любой физической ячейке. Перенос данных из одного локального кэша в другой не требует участия в этом процессе операционной системы, но подразумевает сложную и дорогостоящую аппаратуру управления памятью. Для организации такого режима используют так называемые каталоги кэшей. Отметим также, что последняя копия элемента данных никогда из кэш-памяти не удаляется.

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

Модель кэш-когерентного доступа к неоднородной памяти (CC-NUMA, Сасhe Coherent Non-Uniform Memory Architecture) принципиально отличается от модели СОМА. В системе CC-NUMA используется не кэш-память, а обычная физически распределенная память. Не происходит никакого копирования страниц или данных между ячейками памяти. Нет никакой программно реализованной передачи сообщений. Существует просто одна карта памяти, с частями, физически связанными медным кабелем, и «умные» аппаратные средства. Аппаратно реализованная кэш-когерентность означает, что не требуется какого-либо программного обеспечения для сохранения множества копий обновленных данных или их передачи. Со всем этим справляется аппаратный уровень. Доступ к локальным модулям памяти в разных узлах системы может производиться одновременно и происходит быстрее, чем к удаленным модулям памяти.

Отличие модели с кэш-некогерентным доступом к неоднородной памяти (NCC-NUMA, Non-Cache Coherent Non-Uniform Memory Architecture) от CC-NUMA очевидно из названия. Архитектура памяти предполагает единое адресное пространство, но не обеспечивает согласованности глобальных данных на аппаратном уровне. Управление использованием таких данных полностью возлагается на программное обеспечение (приложения или компиляторы). Несмотря на это обстоятельство, представляющееся недостатком архитектуры, она оказывается весьма полезной при повышении производительности вычислительных систем с архитектурой памяти типа DSM, рассматриваемой в разделе «Модели архитектур распределенной памяти».

В целом, ВС с общей памятью, построенные по схеме NUMA, называют архитектурами с виртуальной общей памятью (virtual shared memory architectures). Данный вид архитектуры, в частности CC-NUMA, в последнее время рассматривается как самостоятельный и довольно перспективный вид вычислительных систем класса MIMD, поэтому такие ВС ниже будут обсуждены более подробно.

Модели архитектур распределенной памяти

В системе с распределенной памятью каждый процессор обладает собственной памятью и способен адресоваться только к ней. Некоторые авторы называют этот тип систем многомашинными ВС или мультикомпъютерами, подчеркивая тот факт, что блоки, из которых строится система, сами по себе являются небольшими вычислительными системами с процессором и памятью. Модели архитектур с распределенной памятью принято обозначать как архитектуры без прямого доступа к удаленной памяти (NORMA, No Remote Memory Access). Такое название следует из того факта, что каждый процессор имеет доступ только к своей локальной памяти. Доступ к удаленной памяти (локальной памяти другого процессора) возможен только путем обмена сообщениями с процессором, которому принадлежит адресуемая память.

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

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

    требуется время для того, чтобы сформировать и переслать сообщение от одно! процессора к другому;

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

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

Рис. 11.4. Вычислительная система с распределенной памятью: а - процессорный элемент; б - объединение процессорных элементов о

Интересный вариант системы с распределенной памятью представляет собой; модель распределенной совместно используемой памяти (DSM, Distribute Shared Memory), известной также и под другим названием архитектуры с неоднородным доступом к памяти и программным обеспечением когерентности (SC-NUMA, Software-Coherent Non-Uniform Memory Architecture). Идея этой модели состоит в том, что ВС, физически будучи системой с распределенной памятью, благодаря операционной системе представляется пользователю как система с общей памятью. Это означает, что операционная система предлагает пользователю единое адресное пространство, несмотря на то что фактическое обращение к памяти «чужого» компьютера ВС по-прежнему обеспечивается путем обмена сообщениями.

Мультипроцессорная когерентность кэш-памяти

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

В простейшей форме проблему когерентности кэш-памяти можно пояснить следующим образом (рис 11.5). Пусть два процессора Р г и Р г связаны с общей памятью посредством шины. Сначала оба процессора читают переменную х. Копии блоков, содержащих эту переменную, пересылаются из основной памяти в локальные кэши обоих процессоров (рис. 11.5, а). Далее процессор P t выполняет операцию увеличения значения переменной х на единицу. Так как копия переменной уже находится в кэш-памяти данного процессора, произойдет кэш-попадание и значение сбудет изменено только в кэш-памяти 1. Если теперь процессор Р 2 вновь выполнит операцию чтения х, то также произойдет кэш-попадание и Р 2 получит хранящееся в его кэш-памяти «старое» значение х (рис. 11.5, б).

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

В решении проблемы когерентности выделяются два подхода: программный и аппаратный. В некоторых системах применяют стратегии, совмещающие оба подхода.

Программные способы решения проблемы когерентности

Программные приемы решения проблемы когерентности позволяют обойтись без дополнительного оборудования или свести его к минимуму }