Реализация. Рассмотрим типовую реализацию

Рассмотрим типовую реализацию:

КК
КП
П
ШОЗУ
КПП
ОЗУ
1А озу
 
Аозу
3 Ак
Д
Ак
 
 
 
Д


На рисунке:

П- процессор

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

КП – собственно "кэш память"

КПП – "кэш память признаков", вспомогательное запоминающее устройство, в котором контроллер кэш сохраняет информацию о том, какие фрагменты в настоящий момент загружены в КП кода (эти фрагменты принято называть "строками"), и о том на какие именно адреса КП загружены эти фрагменты.

ШОЗУ – шина ОЗУ

Порядок операции при выполнении процессором чтения данных:

1. Процессор обращается за данными, сообщая адрес размещения данных в ОЗУ (на рисунке "Аозу"). Заметим, что процессор обращается именно к ОЗУ, сообщает адрес размещения данных в ОЗУ, а не адрес их размещения в кэш, о наличии кэш процессор может ничего не знать.

2. КК перехватывает запрос и перенаправляет его к КП признаков (кэш память признаков).

3. КП признаков возвращает контроллеру ответ. Ответ содержит информацию о том, содержится ли запрошенный процессором адрес в настоящий момент в кэш памяти, и, если содержится, то выдаёт и адрес кэш памяти, тот по которому запрошенное процессором слово данных в настоящий момент записано в кэш память ("адрес кэш" – на рисунке Ак).

Таким образом, тут возможны две ситуации:

а) Так называемая "ситуация попадания", это когда запрошенный адрес ОЗУ в настоящий момент имеется в кэш.

б) Так называемая "ситуация промаха", это когда запрошенных процессором данных в кэш не оказалось.

Далее, если ситуация "попадания", то:

4. Контроллер кэш, получив адрес кэш (Ак) из кэш памяти признаков, обращается по этому адресу в собственно кэш память (КП).

5. Кэш память находит, и передаёт запрошенные данные контроллеру (на рисунке Д). Соответственно, поскольку кэш память значительно быстрее ОЗУ, считывание данных из кэш занимает много меньше времени, чем если бы приходилось читать из ОЗУ.

6. Данные передаются в ЦП. "Латентность кэш" это число тактов необходимых для осуществления операции чтения/записи данных в/из кэш. Латентность для разных кэш может быть различной, но латентность кэш будет всегда значительно меньше, чем латентность оперативной памяти (ОЗУ). Таким образом, в целом, весь этот процесс и в сумме займёт заметно меньше времени (израсходуется меньшее число тактов), чем, если бы запрошенные данные пришлось бы читать из ОЗУ.

Если ситуация "промаха":

4. Тогда контроллеру кэш приходится обращается к ОЗУ, и тогда уже ОЗУ выдаёт запрошенное слово данных. Но не только его. Современные ОЗУ предназначенные для работы в составе ЭВМ использующих кэш память устроены так, ОЗУ устроены так, что заодно вместе с запрошенным словом выдаю ещё и слова расположенные рядом с запрошенным, выдают целый фрагмент кода. Этот фрагмент кода принято называть "строкой данных" (или просто "строкой"), а размер этого фрагмента называют "размером строки кэш". Размер строки кэш зависит от реализации системы кэширования в той или иной ЭВМ, и для разных современных ЭВМ может составлять от 64 байт до нескольких килобайт (или, правильнее было бы сказать "кибибайт", если использовать терминологию соответствующую новым требованиями от ISO, International Standard Organization). То есть ОЗУ выдаёт не только те данные что были в запрошены центральным процессором, но и слова близко расположенные к запрошенному слову данных, то есть те, к которым с большой вероятностью обращение произойдёт уже в самое ближайшее время (учёт "локальности в пространстве").

5. Контроллер кэш (КК), получив данные, передаёт то слово, что было запрошено центральным процессором – центральному процессору, а весь полученный из ОЗУ фрагмент ("строку данных") помещает на хранение в кэш память (учёт "локальности во времени"), с тем что бы при последующих обращениях к этому фрагменту данные было возможно почитать уже быстро, из кэш. По возможности эта строка размещается на ещё незанятом месте кэш памяти, если же такого нет, то новая строка занимает место на котором на котором хранилась одна из старых, ранее загружавшихся в кэш память строк.

Заметим следующее:

1. Эффективность работы кэш тем выше, чем чаще встречаются попадания (говорят "чем выше процент попадания").

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

3. Процент попадания также будет зависеть и от того, как написана программа, насколько удачно, насколько она совместима с механизмом кэширования. Актуален учёт особенностей работы кэш памяти при написании программ, специальная оптимизация программ и алгоритмов с учётом наличия в составе ЭВМ, и особенностей работы кэш памяти.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: