Курс лекций - конспект от Томилина в ворде (1156246), страница 3
Текст из файла (страница 3)
Кэш-память
В кэш-памяти могут размещаться команды и обрабатываемые данные. Информация располагается в кэш-памяти блоками одинаковой длины. Этими же блоками происходит перемещение данных между оперативной и кэш-памятью.
В командах, выполняемых процессором, указываются лишь адреса данных по оперативной памяти. Преобразование этих адресов в адреса кэш-памяти происходит аппаратно (определяются номер блока кэш-памяти и место расположения в нем требуемых данных). Основными аспектами организации кэш-памяти являются:
-
способ доступа к кэш-памяти при обращении к находящимся в ней данным из процессора и при перемещении данных в кэш-память из оперативной памяти;
-
способ выполнения записи данных в кэш-память из процессора.
По способу доступа к кэш-памяти различаются следующие организации кэш-памяти:
-
полностью ассоциативная кэш-память;
-
кэш-память с “прямой” адресацией;
-
частично ассоциативная кэш-память.
В случае полностью ассоциативной кэш-памяти требуемые данные могут располагаться в любом ее блоке. Нахождение блока происходит путем сравнения требуемого адреса данных по оперативной памяти с находящимися в специальных регистрах при каждом блоке кэш-памяти начальными адресами групп данных, перемещенных в эти блоки из оперативной памяти, с учетом длины блока кэш-памяти. При нахождении блока кэш-памяти определяется и смещение в нем для выполнения непосредственного обращения к данным.
При не нахождении блока кэш-памяти с нужными данными (“промах” при обращении в кэш-память) эти данные считываются из оперативной памяти в некоторый блок кэш-памяти, определяемый по выполняемому аппаратурой алгоритму замещения данных в кэш-памяти. Если данные в блоке кэш-памяти, выбранном для считывания в него данных из оперативной памяти, изменялись процессором, и это изменение не было отражено в оперативной памяти, то предварительно происходит перепись этих данных из выбранного блока кэш-памяти в оперативную память.
Противоположной по отношению к организации полностью ассоциативной памяти является организация кэш-памяти “с прямой адресацией”. В данном случае заранее определено, из каких диапазонов адресов оперативной памяти (длина диапазонов совпадает с длиной блоков кэш-памяти) данные могут быть помещены в конкретный блок кэш-памяти. Например, при длине блока кэш-памяти 100 (в восьмеричной системе счисления) и количестве блоков 4 в “нулевой” блок кэш-памяти могут быть переданы данные из ячеек оперативной памяти с восьмеричными адресами:
0000 – 0077, 0400 – 0477, 1000 – 1077, 1400 – 1477 и т.д.
В первый блок кэш-памяти могут быть переданы данные из ячеек оперативной памяти с адресами:
0100 – 0177, 0500 – 0577 и т.д.
Для приведенного примера данные с адресом 0432 могут быть найдены лишь в нулевом блоке кэш-памяти при нахождении в указанном специальном регистре при этом блоке адреса 0400, а данные с адресом 0543 могут быть найдены лишь в первом блоке кэш-памяти при нахождении в его специальном регистре адреса 0500.
В случае “промаха” при обращении в определенный блок кэш-памяти выполняется замена информации в нем на требуемую информацию из оперативной памяти (с возможной предварительной записью находившейся в нем информации в оперативную память как и в случае полностью ассоциативной памяти).
Организация частично-ассоциативной памяти обеспечивает разделение блоков кэш-памяти на группы по одинаковому числу блоков по принципу организации кэш-памяти «с прямой адресацией», а поиск данных в выбранной группе блоков кэш-памяти осуществляется по принципу организации полностью ассоциативной памяти. Так для указанного выше примера четырех блоков кэш-памяти возможна организация частично-ассоциативной памяти из двух групп блоков по два блока в каждой. В “нулевую” группу попадают нулевой и первый блоки, а в первую – второй и третий блоки. Данные с адресами 0000 – 0177, 0400 – 0577, 1000 – 1177, 1400-1577 могут находиться лишь в блоках нулевой группы. Данные с указанными выше адресами 0432 и 0543 могут находиться или отсутствовать либо в нулевом, либо в первом блоке кэш-памяти.
Замена информации в частично-ассоциативной кэш-памяти при “промахе” обращения в нее происходит аналогично замене информации в других организациях кэш-памяти.
Естественно, что наиболее высока вероятность нахождения требуемых данных в более сложной по организации полностью ассоциативной кэш-памяти.
Память с прямой адресацией отличается наибольшей простотой нахождения места расположения данных в ней.
Второй основной проблемой использования кэш-памяти является проблема осуществления записи в нее для многопроцессорных вычислительных систем с общей оперативной памятью и отдельными кэш-памятями у каждого процессора (для однопроцессорных ЭВМ с кэш-памятью для выполнения записи производятся уже описанные выше действия).
Поскольку в вычислительных системах с общей памятью данные из некоторой ее области могут находиться в блоках разных кэш-памятей, изменение этих данных при выполнении записи по некоторому адресу оперативной памяти в одной кэш-памяти не должно привести к использованию “старых” значений при обращении за ними по этому же адресу оперативной памяти в другой кэш-памяти. Это реализуется двумя основными способами.
Первый способ заключается в определении нахождения данных с адресами по оперативной памяти, совпадающими с адресом по оперативной памяти записываемых данных в некоторую кэш-память, в блоках других кэш-памятей. В случае нахождения таких данных в блоках других кэш-памятей содержимое этих блоков объявляется недействительным (при каждом блоке кэш-памяти имеется одноразрядный регистр, указывающий действительность или недействительность содержимого блока). Одновременно выполненная запись в кэш-память осуществляется также и в оперативную память (содержимое блока кэш-памяти, в который произведена запись, становится когерентным содержимому соответствующей области оперативной памяти). Если затем для другого процессора потребуются данные по этому же адресу оперативной памяти, они будут прочитаны из оперативной памяти в некоторый блок кэш-памяти процессора, запросившего данные, поскольку непосредственно из этой кэш-памяти в связи с проведением указанной выше блокировки эти данные не смогут быть считаны. Таким образом другие процессоры в случае необходимости смогут использовать лишь “новые” значения данных, записанные в оперативную память каким-либо процессором.
Второй способ обеспечения когерентности кэш-памятей заключается в выполнении требуемой записи данных в те блоки всех кэш-памятей, в которых отображены данные из одной области оперативной памяти.
Естественно, что для осуществления обоих способов обеспечения когерентности требуется весьма сложная аппаратура, с помощью которой выполняются указанные выше действия.
Виртуальная память
В первых ЭВМ программирование велось с использованием физических адресов оперативной памяти. Каждая задача программировалась с использованием одних и тех же адресов, то есть на машине в каждый период времени могла выполняться лишь одна задача (фактически первые ЭВМ были машинами “на одну персону”, имея в виду программиста или оператора, работавшего на машине). Размер задачи (объем ее программ и данных) во многих случаях практически сразу стал существенно превосходить размер оперативной памяти машины. Пришлось программировать отдельные части (блоки, модули) задачи на одни и те же адреса памяти и вызывать их в программе на эти адреса оперативной памяти из внешней памяти (на магнитных барабанах, магнитных лентах).
Такие действия, называемые “перекрытием программных модулей” (и модулей данных) в памяти или “попеременной загрузкой” модулей (overlay) вызывали большие затруднения при программировании.
Шагом вперед в организации оперативной памяти стало введение аппаратуры, обеспечивающей использование информации задачи на любом месте оперативной памяти. Использовался “регистр базы”, на который помещался начальный адрес размещения задачи в оперативной памяти, и регистр длины (размера) информации задачи. Это позволило программировать задачи на одни и те же адреса, называвшиеся “относительными”, “логическими”, “математическими” и, наконец, “виртуальными” адресами, а размещать (с помощью операционной системы) информацию задачи на любом месте оперативной памяти. Тем самым обеспечивалась возможность помещения в память одновременно информации многих задач и выполнения этих задач в многозадачном (многопрограммном) режиме. Эффект использования такого режима достигается за счет более полной загрузки процессора. Когда временно (например, из-за выполнения обмена данными между оперативной и внешней памятью) не может выполняться одна задача, тут же начинает выполняться другая задача. Поскольку информация задачи занимает непрерывный диапазон адресов, использование регистра длины информации задачи позволяет не допускать обращения в задаче в невыделенную для нее область памяти и тем самым обеспечивать защиту памяти других задач.
К сожалению, такая организация памяти (задаче предоставлялся ограниченный “линейный” участок оперативной памяти) не избавляла программиста от заботы об организации упоминавшегося перекрытия программных модулей в его таким образом организованной “виртуальной” памяти. Рассмотренный способ организации использования оперативной памяти (с достаточно простой аппаратной “поддержкой”) имеет обобщающее название – память “односегментного отображения”.
Освободить программиста от организации перекрытия программных модулей в памяти и обеспечить при программировании понимание возможности использования виртуальной памяти задачи практически любого объема позволило введение поддержанной аппаратно структурированной виртуальной памяти задачи.
Видами такой организации памяти стали: “сегментная”, “страничная” и “сегментно-страничная” организации.
Сегментная организация памяти.
Для каждой задачи память сегментной организации предоставляет возможность разместить в ней сегменты разной длины, содержащие информацию задачи. В этих сегментах находятся законченные программные объекты – модули процедур и модули данных. При программировании предполагается, что все эти объекты находятся на одном уровне структурированной виртуальной памяти задачи и в программе решения задачи не требуется осуществлять их перемещение между оперативной и внешней памятью (это перемещение будет выполнять операционная система). То есть виртуальная память задачи структурирована как набор модулей (сегментов).
Сегменты задачи могут располагаться в любом месте физической оперативной памяти, защищены друг от друга и от сегментов других задач и вызываются при необходимости их использования в задаче в оперативную память (на свободное место или вместо каких-либо других сегментов этой или других задач) операционной системой.
Виртуальные адреса, используемые в программе задачи, состоят из виртуального номера сегмента и смещения (номера ячейки) в этом сегменте (рис 13.). Виртуальный сегментный адрес аппаратно преобразуется в физический адрес при непосредственном обращении в оперативную память с использованием таблицы соответствия виртуальных номеров сегментов задачи начальным физическим адресам их расположения в оперативной памяти. К такому физическому адресу, соответствующему номеру сегмента в виртуальном адресе, прибавляется величина смещения, указанная в виртуальном адресе. Полученный физический адрес используется для непосредственного обращения к оперативной памяти.
В указанной таблице соответствия помещено также значение длины сегмента, используемого в виртуальном адресе . Указание смещения в сегменте, большего этого значения не допускается. Таким образом обеспечивается и защита сегментов друг от друга.
Существенным преимуществом сегментной организации виртуальной памяти является возможность уникальной защиты помещаемого в сегмент программного объекта по способу обращения к нему. Так, например, модуль процедуры должен быть защищен от возможности осуществления записи в него; запись в модуль данных может быть либо запрещена, либо разрешена. Информация об уникальной защите сегмента также размещается в таблице соответствия. Там же размещается и признак наличия виртуального сегмента в оперативной памяти.
Линейную таблицу соответствия виртуальных номеров сегментов задачи и их мест расположения в физической оперативной памяти (длина такой таблицы соответствует количеству виртуальных сегментов задачи) создает операционная система ЭВМ, поскольку именно она размещает требуемые сегменты в оперативной памяти, передавая их в нее из внешней памяти (выполняется также обратная перепись во внешнюю память сегментов, содержимое которых изменилось, в случае, если их место расположения отведено для размещения новых сегментов. Размещение таблицы соответствия в оперативной памяти требует при замене виртуального адреса на физический одного дополнительного обращения к оперативной памяти, то есть 100% накладных расходов. Существенно избежать этих накладных расходов удается за счет размещения информации из таблицы соответствия в быстродействующих регистрах, в каждом из которых находится как виртуальный номер сегмента, так и алрес его размещения в оперативной памяти. Ассоциативный поиск адреса размещения виртуального сегмента в оперативной памяти происходит в этих регистрах по его виртуальному номеру практически без задержки. Свойство “локальности” программы позволяет почти всегда успешно выполнять такой поиск и осуществлять автоматическую замену виртуального адреса на физический при относительно небольшом числе регистров, содержащих информацию из таблицы соответствия. Редкий “промах” приводит к переписи нужной строки из таблицы соответствия, находящейся в оперативной памяти, в регистр “быстродействующей” таблицы. Выбор номера регистра производится аппаратно.
Значительным недостатком организации виртуальной памяти, разделяемой на сегменты разной длины, является наличие “внешней фрагментации” оперативной памяти, то есть незанятых участков памяти между сегментами. Этот недостаток проявляется при необходимости расположить в памяти новый сегмент задачи и отсутствии свободного фрагмента оперативной памяти для его размещения. В этом случае приходится принимать меры к освобождению для нового виртуального сегмента участка памяти необходимой длины за счет возможной подвижки в оперативной памяти других виртуальных сегментов или переписи информации (если она изменялась) из освобождаемого участка памяти во внешнюю память.
Страничная организация виртуальной памяти
Страничная организация виртуальной памяти задачи исключает упоминавшийся недостаток сегментной организации – внешнюю фрагментацию. Виртуальная память задачи разделяется на виртуальные “страницы” одинаковой длины, которые могут помещаться на любые физические “страницы” (области оперативной памяти той же длины, что и у виртуальных страниц задачи). Начальные адреса физических страниц имеют значения, кратные длине страницы. Часто используется величина, называемая номером физической страницы и являющаяся значением старших разрядов таких адресов. Количество младших разрядов определяется длиной страницы (младшие разряды, естественно, используются для указания смещения данных в странице).