Физическая и виртуальная память
Объем используемой программами памяти можно увеличить путем добавления к физической памяти (модулям оперативной памяти) виртуальной памяти.
Виртуальная память выделяется в форме области жесткого диска. В ОС Windows это файл подкачки.
Размер файла подкачки и его размещение в иерархической файловой системе можно изменить.
Быстродействие жесткого диска и, соответственно, виртуальной памяти существенно меньше быстродействия оперативной памяти.
Замедление быстродействия виртуальной памяти может происходить в результате фрагментации данных в файле. Для того чтобы этого не происходило, рекомендуется произвести дефрагментацию диска и установить для файла подкачки постоянный размер.
3.Системы кэш-памяти, сравнение различных видов памяти.
http://studopedia.org/
Кэш-память представляет собой быстродействующую буферную память, в которую из основной памяти с умеренной скоростью переносятся команды и данные. В вычислительной системе, использующей кэш-память, команды и данные программы хранятся в основной памяти, а некоторые выбранные участки программы копируются в кэш-память. На рис. 13.6 изображена структурная схема кэш-памяти МП 80386.
Кэш-память была предложена, когда появились процессоры, работающие значительно быстрее ОЗУ и вынужденные ожидать, пока из памяти будут введены требуемые элементы данных. В системах с кэш-памятью информация пересылается по цепочке: вторичная память - основная память - кэш-память. Чтобы информация попала в кэш-память, нужно выполнить следующие действия.
Программа, обращаясь к своему адресному пространству, передает аппаратуре или микропрограмме виртуальный адрес. Если страница или сегмент, содержащие этот адрес, находятся в основной памяти, виртуальный адрес преобразуется в адрес основной памяти. В противном случае возникает отказ страницы, и страница или сегмент загружаются в основную память.
После этого аппаратура кэш-памяти проверяет, не находится ли требуемый блок уже в кэш-памяти. Если так и оказалось, содержимое адресуемой ячейки извлекается из кэш-памяти, либо, наоборот, результат вычислений заносится в кэш-память. В противном случае возбуждается отказ кэш-блока (аналогичный отказу страницы), и информация копируется из основной памяти в кэш-память. После загрузки блока в кэш-память команда выполняется повторно. Поскольку все эти процессы должны происходить очень быстро, система загрузки из основной в кэш-память управляется внешней по отношению к ЦП логикой без участия операционной системы.
Выбор информации для кэш-памяти. Процесс выбора является ключевым для эффективного использования процессора. Если бы обращение к памяти осуществлялось случайным образом, предсказание адреса следующей адресуемой ячейки памяти было бы невозможным. Однако обращение к памяти чаще всего не носит случайною характера- Большинство программ обращается к памяти вблизи той ячейки, куда было обращение перед этим. Это явление носит название локальности программы. Именно локальность делает кэш-систему эффективной.
Например, переменные программы обычно организуются в виде некоторой логической последовательности (часто восходящей). В результате следующая считываемая переменная располагается непосредственно за предыдущей. Символьные строки чаще всего просматриваются последовательно. Стек изменяется с одного конца, так что несколько соседних обращений делаются в окрестностях вершины стека.
Когда процессору требуется следующая команда или следующий элемент данных, он сначала обращается к кэш-памяти, перед тем, как затребовать данные из более далекой и медленной памяти. Доступ, при котором данные обнаруживаются в кэш-памяти, называют кэш-попаданием. В противном случае фиксируется кэш-промах.Коэффициент кэш-попаданий - это доля обращений, давших попадания. На величину коэффициента кэш-попаданий влияют размеры и организация кэш-памяти, алгоритмы поиска и характеристики выполняемой программы.
Выборка блока. Кэш-память снабжается контроллером, в функции которого входит достижение максимальной эффективности кэш-памяти и управление ее ресурсами. Контроллер разбивает основную память на блоки с типичным размером 2, 4, 8 или 16 байт. 32-разрядный процессор обычно использует блоки размером 2 или 4 слова. Когда фиксируется кэш-промах, кэш-контроллер перемещает в кэш-память из основной памяти требуемое слово вместе с целым блоком, содержащим это слово. Выборка блока с данными может осуществляться одним из трех способов: 1) с упреждением - когда извлекаются данные, расположенные за требуемым байтом; 2) . с отставанием - когда извлекаются данные, расположенные перед требуемым байтом; 3) и с тем и с другим. Обычно блоки выравниваются на границу двойного слова. Обращение к любому байту блока приводит к копированию в кэш-память всего блока.
Размер блока является важнейшим параметром системы кэш-памяти. Если величины упреждения и отставания невелики, снижается коэффициент кэш-попаданий. Выбор блоков слишком большого размера уменьшает число блоков, хранящихся в кэш-памяти. К тому же по мере увеличения размера блока каждое новое слово становится все дальше от требуемого и вероятность его реального использования падает (из-за локальности программы). Наконец, передача блоков большего размера требует более широкой шины между основной и кэш-памятью, что повышает стоимость системы.
Организация кэш-памяти. Кэш - это быстродействующая память, используемая примерно так же, как мы используем записную книжку-еженедельник. Если нам вскоре понадобится телефонный номер, мы записываем его в еженедельник. Когда необходимость помнить этот номер отпадает, он стирается, а освободившееся место используется для чего-то другого. От способа организации такой «записной книжки» зависит, как система будет ее использовать. Существуют три основных способа организации кэш-памяти: полностью ассоциативный, с прямым отображением и частично ассоциативный.
Полностью ассоциативная кэш-память. В этом случае в кэш-памяти содержатся блоки, наиболее часто используемые процессором. Однако между адресами всех этих блоков нет однозначной зависимости, поэтому в кэш-памяти кроме самих блоков надо хранить еще и их полные адреса.
Когда процессор запрашивает данные, кэш-контроллер сравнивает адрес требуемых данных с каждым адресом в кэш-памяти. Если обнаружено соответствие, данные, расположенные па этому -адресу, направляются в процессор. Каждое сравнение адресов даст либо попадание, либо промах. Поскольку адреса не имеют взаимозависимости, в случае промаха можно поступить двояко: либо продолжать медленный последовательный поиск, либо использовать более дорогую аппаратуру для параллельного поиска, содержащую компараторы и контроллеры.
Кэш-память с прямым отображением. В этом случае каждый блок из основной памяти может занимать в кэш-памяти одно-единственное место. Это уменьшает число шагов поиска и сравнений, необходимых для фиксации попадания или промаха, до одного.
Каждый адрес состоит из двух частей. Первая часть представляет собой поле индекса кэш-памяти. Эта часть должна иметь достаточный размер, чтобы вместить адрес блока в кэш-памяти. Вторая часть, поле признака (тега), содержит биты, позволяющие различать блоки, которые могут быть записаны в конкретную ячейку кэш-памяти.
Основной недостаток способа прямого отображения заключается в том, что контроллер выделяет для конкретного участка основной памяти единственное место в кэш-памяти. Если программа попеременно обращается к двум конфликтующим в кэш-памяти ячейкам, в кэш-памяти каждый раз будет осуществляться подкачка. Однако такая закономерность при выполнении программы встречается редко. поэтому кэш-система с прямым отображением обладает приемлемой производительностью при более низкой по сравнению с полностью ассоциативной системой стоимостью.
Частично ассоциативная кэш-память. Такой способ организации является промежуточным между кэш-памятью с прямым отображением и полностью ассоциативной кэш-памятью. Частично ассоциативная кэш-память характеризуется наличием нескольких наборов блоков с прямым отображением, которые функционируют параллельно. Каждый индекс кэш-памяти указывает на несколько блоков, по одному в каждом наборе. Когда из основной памяти поступает блок данных, он может быть записан на соответствующее этому блоку место любого набора.
Используя память того же объема, частично ассоциативная кэш-память содержит вдвое меньше отображаемых блоков, но каждый блок может соответствовать двум адресам, которые в одновходовой кэш-памяти были бы конфликтующими. Наиболее эффективными в плане достижения компромисса между быстродействием и стоимостью оказываются 2- и 4-входовые кэш-системы.
При выборке нового блока кэш-контроллер должен решить, на место какого блока в кэш-памяти его записать. Здесь есть три возможности, адекватность которых определяется поведением программы: 1) случайный выбор; 2) запись в последовательном порядке; 3) запись на место блока, который не адресовался дольше других. Последний алгоритм требует наличия в контроллере «счетчика возраста», который указывает, на место какого блока можно записывать новый. Этот счетчик должен модифицироваться каждым запросом к кэш-памяти.
Обновление кэш-памяти. Важной особенностью, которую следует иметь в виду при использовании кэш-памяти, является наличие двух копий данных - одной в кэш-памяти, а другой -в основной памяти. Если одна из этих копий модифицирована, а другая - нет, возникают два различных набора данных с одним адресом памяти, что может привести к сохранению ошибочных данных, если сохраняется не тот набор.
Наличие двух копий требует механизма обновления, который предотвращал бы использование устаревших данных. Предложено несколько способов записи только «хороших» данных - со сквозной записью, с буферизованной сквозной записью, с обратной записью и организация согласованной кэш-памяти.
В системе со сквозной записью кэш-контроллер сразу же после записи данных в кэш-память переносит их в основную память, выполняя, таким образом, две операции записи на каждую операцию модификации данных. В результате в основной памяти всегда содержатся правильные данные и любой блок в кэш-памяти может быть стерт (в процессе записи на его место нового блока) без потери данных. Основной недостаток такого способа заключается в потере производительности из-за затрат времени на запись в основную память. Кроме того, возрастает интенсивность использования магистрали, что для мультипроцессорных систем является серьезным недостатком.
В системе с буферизованной сквозной записью запросы на запись в основную память буферизуются. Это позволяет процессору, не дожидаясь завершения цикла записи в основную память, приступить к новому циклу. Увеличение скорости достигается в том случае, когда следующая операция чтения дает кэш-попадание, что позволяет процессору продолжить выполнение операции. В результате запись и чтение выполняются одновременно. В такой системе буферизуется только один запрос на запись в основную память. Поэтому, если возникает необходимость во второй операции записи, процессор переходит в состояние ожидания до завершения первой записи. К тому же, если за записью следует кэш-промах, процессор также должен ожидать поступления из основной памяти новых данных.
Следующий способ носит название обратной записи. Поле признака каждого блока в кэш-памяти включает бит, показывающий, был ли изменен блок. Перед наложением записи на любой блок в кэш-памяти контроллер проверяет состояние бита изменения. Если бит установлен, контроллер перед чтением новых данных в кэш-память записывает измененный блок в основную память. Способ обратной записи быстрее двух предыдущих, потому что число модифицированных блоков, требующих записи в основную память, обычно значительно меньше числа считываний в кэш-память.
Системе обратной записи присуши некоторые недостатки. Если большинство блоков в кэш-памяти оказались модифицированы, перед продолжением вычислений все блоки должны быть записаны в основную память. Далее, логика обратной записи в кэш-контроллере сложнее той, что требуется для реализации первых двух способов. Наконец, в случае неисправимой ошибки, например, отказа питания, содержимое кэш-памяти теряется, и тогда невозможно определить, содержит ли основная память правильные данные.
Описанные выше способы минимизируют объем ошибочных данных в основной памяти, возникающих в результате операций записи в кэш-памяти. Однако они не решают проблему согласованности кэш-памяти с основной памятью, характерной для систем, в которых содержимое основной памяти обновляется более чем одним устройством. Если обновление памяти осуществляется несколькими устройствами, трудно определить, где находятся неправильные данные - в кэш-памяти или в основной памяти. Для решения этой проблемы были предложены три способа.
Первый способ заключается в очистке кэш-памяти. В случае изменения данных они записываются в основную память (чаще всего способом переноса записи), после чего кэш-память очищается. Если все блоки кэш-памяти успевают очищаться перед тем, как устройство выполняет запись в общую область памяти, кэш-память не будет содержать неправильных данных.
Второй подход к обеспечению связности кэш-памяти использует принцип прозрачности аппаратуры. В этом случае аппаратура выполняется так, что все обращения к областям памяти, скопированным в кэш-память, обнаруживаются кэш-памятью. Это достигается одним из двух способов. Первый способ заключается в том, что все записи в кэш-память копируются как в основную память, так и во все области кэш-памяти, отображенные па ту же память; этот способ носит название трансляции. Второй способ обеспечивает правильность данных путем направления запросов к основной памяти от всех устройств через одну в ту же область кэш-памяти.
Наконец, согласованность кэш-памяти может обеспечиваться объявлением обобщенной памяти некэшируемой. Все запросы к обобщенной памяти вызывают кэш-промахи, поскольку обобщенная память не копируется в кэш-память. Программное обеспечение может компенсировать снижение коэффициента кэш-попаданий путем копирования данных из некэшируемой памяти в кэшируемую и отображения запросов к обобщенной памяти на кэшируемые области памяти
Кэш центрального процессора разделён на несколько уровней. Максимальное количество кэшей — четыре. В универсальном процессоре в настоящее время число уровней может достигать трёх. Кэш-память уровня N+1, как правило, больше по размеру и медленнее по скорости доступа и передаче данных, чем кэш-память уровня N.
Самым быстрым является кэш первого уровня — L1 cache (level 1 cache). По сути, она является неотъемлемой частью процессора, поскольку расположена на одном с ним кристалле и входит в состав функциональных блоков. В современных процессорах обычно L1 разделен на два кэша — кэш команд (инструкций) и кэш данных (Гарвардская архитектура). Большинство процессоров без L1 не могут функционировать. L1 работает на частоте процессора, и, в общем случае, обращение к нему может производиться каждый такт. Зачастую является возможным выполнять несколько операций чтения/записи одновременно.
Вторым по быстродействию является кэш второго уровня — L2 cache, который обычно, как и L1, расположен на одном кристалле с процессором. В ранних версиях процессоров L2 реализован в виде отдельного набора микросхем памяти на материнской плате. Объём L2 от 128 кбайт до 1−12 Мбайт. В современных многоядерных процессорах кэш второго уровня, находясь на том же кристалле, является памятью раздельного пользования — при общем объёме кэша в n Мбайт на каждое ядро приходится по n/c Мбайта, где c — количество ядер процессора.
Кэш третьего уровня наименее быстродействующий, но он может быть очень большим — более 24 Мбайт. L3 медленнее предыдущих кэшей, но всё равно значительно быстрее, чем оперативная память. В многопроцессорных системах находится в общем пользовании и предназначен для синхронизации данных различных L2.
Существует четвёртый уровень кэша, применение которого оправдано только для многопроцессорных высокопроизводительных серверов и мейнфреймов. Обычно он реализован отдельной микросхемой.
Дата добавления: 2015-11-26; просмотров: 6313;