Существенное преимущество данного типа кэш-памяти заключается в необходимости только одного сравнения признака (тэга), выбранного из соответствующей строки кэш-памяти, и старших разрядов физического адреса, выдаваемого CPU. Такое техническое решение может существенно повысить производительность системы, однако, если адреса двух блоков памяти отличаются только полем признака, то они будут отображаться на одну и ту же строку кэш-памяти. В этом случае, если в прежнем блоке памяти, расположенном в данной строке, не происходили какие либо изменения со времени его перемещения из оперативной памяти в данную строку (например, с этой строки в CPU производились только считывания), то тогда новый блок просто помещается в данную строку вместо старого. Старый блок, при этом уничтожается (учитывая, что его копии все равно находятся в оперативной памяти), а признак (тэг) изменяется на новый. Если же в этот прежний блок кэш-памяти данной строки процессором уже производилась запись, т.е. он изменялся (стал dirty), тогда перед тем, как в данную строку запишется новый блок памяти из ОП, старый блок должен быть переписан опять в оперативную память. Необходимость разрешения таких конфликтов приводит к росту числа пересылок между кэш-памятью и оперативной памятью, что в итоге влияет на эффективность работы кэш-памяти не самым благоприятным образом.
Кроме того, если в процессе выполнения программы процессору поочередно будут требоваться блоки памяти, смещенные относительно друг друга на величину, кратную размеру страницы, то кэш будет работать интенсивно, но вхолостую (cachetrashing). Очередное обращение будет замещать данные, считанные в предыдущем и потребующиеся в последующем обращении, - то есть будет сплошная череда кэш-промахов. Переключение страниц в многозадачных ОС также снижает количество кэш-попаданий, что отражается на производительности системы. Увеличение размера кэш-памяти, при сохранении архитектуры прямого отображения, дает не очень существенный эффект, поскольку разные задачи будут претендовать на одни и те же строки кэш-памяти.
В современных микропроцессорах кэш – память с прямым отображением используется редко.
Полностью ассоциативная кэш-память.
Ассоциативная память – это память, элементы которой выбираются не по адресу, а по некоторому признаку, присваиваемому данному элементу.
В полностью ассоциативной кэш-памяти любой блок оперативной памяти может быть отображен на любую строку кэш-памяти. Поскольку между блоками в данном случае, нет каких либо определенных взаимосвязей, то в буфер должны записываться полный адрес каждого блока и непосредственно сам блок. Тогда четыре младших разряда (в примере рис.IV.3) физического адреса определяют номер байта в блоке, а старшие 28 разрядов определяют признак (тэг) данной строки и помещаются в память признаков. Таким образом, в памяти признаков (тэгов) будет храниться полный адрес блока. Этот подход к реализации кэш-памяти позволяет решить проблему конфликтов адресов, свойственную кэш-памяти с прямым отображением, так как каждая строка кэш-памяти будет отображать только один блок оперативной памяти.
Естественно, что при такой организации кэш-памяти возникает вопрос, а в какую именно строку должны быть помещены блок данных и его адрес (признак, тэг)? Первоначально, пока буфер кэш-памяти еще не заполнен, блок помещается в первую свободную строку. Когда же буфер полон, то один из блоков должен быть из него вытеснен и переписан в основную (оперативную) память, а на его место помещен новый.
Ответ на вопрос, какой же из блоков переписать в основную память, вполне очевиден – тот, к которому было наименьшее число обращений. Следовательно, необходим некоторый механизм, позволяющий определить наименее используемый блок. Кроме того, необходим и механизм, позволяющий отличать строки, к которым уже были обращения, от строк, к которым обращений еще не было. Вся эта технология основывается на информации, которая содержится в поле L (LeastRecentlyUsed). Конечно, это потребует дополнительных аппаратных затрат. Принципы функционирования таких механизмов изложим несколько позднее, при рассмотрении структуры множественной ассоциативной кэш-памяти. Кроме того, при каждом обращении к оперативной памяти необходимо сравнивать запрашиваемый адрес со всеми адресами, хранящимися в буфере (памяти признаков), а подобная процедура требует уже немалого времени. Таким образом, полностью ассоциативный кэш разрешает проблему конфликта адресов, но ценой дополнительного оборудования и увеличения времени обработки запроса в память. Поэтому этот тип кэш-памяти используется редко, только при небольших ее объемов в некоторых типах процессоров.
Бит достоверности V (Valid) и бит модифицируемости M (Modified) выполняют ту же роль, что и в кэш-памяти с прямым отображением.
Рис.IV.3 Организация полностью ассоциативной кэш-памяти
объемом 8 Кбайт.
Множественно-ассоциативная кэш-память.
Наборно-ассоциативный или множественный ассоциативный кэш сочетает в себе преимущества кэш-памяти с прямым отображением и полностью ассоциативной кэш-памяти. В этом типе кэш-памяти строки разбиваются на группы (наборы, множества, входы), в которые могут входить две, четыре, восемь и т.д. строк. В соответствии с их количеством различают: двухвходовую (двухканальную) множественную ассоциативную кэш-память, четырехвходовую (четырехканальную) множественную ассоциативную кэш-память, восьмивходовую (восьмиканальную) множественную ассоциативную кэш-память и т.д. Таким образом, во множественной ассоциативной кэш-памяти, в одном множестве (группе) могут находиться строки, которые адресуются одинаковыми индексами, но имеют разные признаки, т.е. блоки памяти в этих строках находятся в разных областях адресного пространства (расположение этих областей и определяется кодом признака).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.