7.4.4.3.2. Обновление кэш-памяти

 

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

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

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

У этого метода есть один существенный недостаток. Так как обычно буферизуется только одиночная запись, то две последовательные записи в основную

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

Рис. 4.8. Пример сквозной записи.

Рис. 4.9. Пример буферизованной сквозной записи.

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

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

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

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

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

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

Аппаратная прозрачность. Аппаратное решение проблемы устаревших данных дает уверенность, что все обращения к основной памяти (т.е. к той ее части, что отображается в кэш-память) проводятся через кэш-память. Это может быть сделано либо (1) путем копирования всех кэш-записей, как в основную память, так и во все другие кэш-памяти, либо (2) пересылкой всех кэш-записей через единственную кэш-память. На рис. 4.10 показаны различные аппаратные подходы.

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

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

 

 

HotLog

Заказчику web дизайна и программирования - каталог сайтов, обзор дизайн студий