Friday, May 18th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Управление памятью Дизайн аппаратного кеша

Дизайн аппаратного кеша

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

У большинства машин был кеш прямого отображения (direct-mapped cache). В случае кеша прямого отображения доступ к байту N, за которым следовал доступ к байту N, вызвал бы потерю кешированных данных для байта N. Более новые кеши являются либо 2-канальными наборно-ассоциативными, либо 4-канальными наборно-ассоциативными (2(4)-way set associative). 4-канальный наборно-ассоциативный кеш обеспечивает доступ к четырем различным областям памяти, которые перекрывают ту же самую память кеша без разрушения предварительно кешированных данных. Но при пятом доступе по этому смещению кешированное ранее значение теряется.

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

Дальнейшим усовершенствованием кеша с виртуальной адресацией является добавление к ключевому полю каждой строки кеша тега процесса. При каждом переключении контекста ядро загружает аппаратный регистр контекста тегом, назначенным для процесса. Каждый раз при записи в кеш элемента в ключевое поле строки кеша записываются как виртуальный адрес, так и тег процесса, вызвавшего его отказ. Кеш ищет виртуальный адрес, как прежде, но когда он находит элемент, он сравнивает тег, связанный с этим элементом, с аппаратным регистром контекста. Если они совпадают, возвращается кешированное значение. Если они не совпадают, правильное значение и тег текущего процесса замещают старое кешированное значение. При использовании этой методики кеш не нужно сбрасывать полностью при каждом переключении контекста, поскольку в кеше могут быть элементы нескольких процессов. Недостатком является то, что ядро должно управлять тегами процессов. Обычно тегов меньше (от 8 до 16), чем процессов. Ядро должно назначать теги активному набору процессов. Когда старый процесс выпадает из активного набора, чтобы дать возможность войти туда новому процессу, ядро должно сбросить элементы кеша, связанные с тегом, который собираются использовать повторно.

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


Еще по теме:
Советуем прочитать:

Сейчас 52 гостей онлайн