Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учеб Пособ_Гончаровский.doc
Скачиваний:
1316
Добавлен:
29.03.2015
Размер:
3.65 Mб
Скачать

1.6.2.4. Протокол когерентности кэширования с обратной записью

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

Один из популярных протоколов с обратной записью MESI. MESI – аббревиатура состояния кэш-памяти:

Invalid – блок кэш-памяти содержит недействительные данные.

Shared - в нескольких кэшах содержаться одинаковые блоки, основная память обновлена.

Exclusive – блок только в этой кэш-памяти, основная память обновлена.

Modified - блок действителен, основная память недействительна, копий блока не существует.

При загрузке процессора все элементы кэш памяти помечаются как недействительные I. При первом считывании из MM нужная строка вызывается в кэш-память и помечается как Е. Другой процессор (процессор 2) может вызвать ту же строку и поместить ее в кэш, но при отслеживании исходный держатель строки (процессор 1) узнает, что он уже не единственный, и объявляет, что у него есть копия. Обе копии помечаются состоянием S.

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

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

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

1.6.2.5. Команды поддержки когерентности памяти

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

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

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