Кэш-память — это промежуточная буферная память с быстрым доступом к ней, содержащая информацию, которая может быть запрошена с наибольшей вероятностью.
Введение
Кэш-памятью, или просто кэшем, называется организованная в виде ассоциативного запоминающего устройства быстродействующая буферная память, имеющая ограниченный объем, которая может располагаться между регистрами процессора и относительно медленной основной памятью и хранит наиболее часто применяемую информацию вместе с ее признаками (тегами), в качестве которых используется часть адресного кода.
В процессе работы некоторые информационные блоки должны копироваться из главной памяти в кэш-память. Когда центральный процессор обращается за командой или данными, то вначале должно проверяться их наличие в кэш-памяти. Когда требуемая информация расположена в кэше, то она может быть оперативно извлечена, что является кэш-попаданием. А когда требуемой информации нет в кэш-памяти (кэш-промах), то она должна выбираться из основной памяти, передаваться в микропроцессор и одновременно заноситься в кэш-память. Увеличение быстродействия электронной вычислительной машины может быть достигнуто тогда, когда кэш-попадания случаются значительно более часто, чем кэш-промахи.
Кэш-память
Для определения чаще всего используемой информации современные микропроцессоры обладают определенным механизмом, позволяющем в какой-то мере решить эту задачу. Но все же, как правило, кэш-память сама способна отбирать наиболее часто используемую информацию.
При начале работы микропроцессора весь набор информации, находящейся в его кэш-памяти, является недостоверным. При обращении к памяти микропроцессор, как было указано выше, вначале выполняет проверку наличия требуемой информации в кэш-памяти. Для этого подготовленный им физический адрес необходимо сравнить с адресами ячеек памяти, данные из которых были раньше переписаны из оперативного запоминающего устройства (ОЗУ) в кэш-память.
При первоначальном обращении подобной информации в кэш-памяти, конечно, нет, и это означает, что произошел кэш-промах. В таком случае микропроцессор выполняет обращение к оперативной памяти, получает искомые информационные данные, применяет их в своей работе, но в то же время переписывает эти данные в кэш-память.
Если бы в кэш-память вносилась лишь информация, которая была востребована микропроцессором в текущий момент, то, наиболее вероятно, что при последующем обращении снова будет кэш-промах. Поскольку маловероятно, что следующее обращение будет к той же самой команде или к тому же самому операнду. Кэш-попадания могли бы происходить только после того, как в кэш-памяти будет накоплен достаточно большой участок программы, который содержит некоторые циклические участки кода, или фрагмент данных, требующих повторную обработку. Для того чтобы уже следующее обращение к кэш-памяти вело значительно более часто к кэш-попаданиям, пересылка из оперативной памяти в кэш-память должна происходить не теми блоками в виде байтов или слов, которые затребованы микропроцессором в текущем обращении, а специальными строками. Это означает, что кэш-память и оперативная память с позиций кэширования, организованы в виде строк. Размер строки должен превышать максимально допустимую длину затребованных микропроцессором информационных данных. Как правило, она может составлять от 16 до 64 байт и выравнивается в памяти по границе соответствующего раздела, как показано на рисунке ниже.
Рисунок 1. Кэш-память. Автор24 — интернет-биржа студенческих работ
Высокая вероятность кэш-попаданий в таком случае должна обеспечиваться благодаря тому, что практически всегда программы выполняют обращение к ячейкам памяти, которые расположены рядом с ранее использованными. Это свойство, именуемое как принцип локальности ссылок, способно обеспечить высокую эффективность применения кэш-памяти. Оно предполагает, что при выполнении программы в течение определенного сравнительно малого интервала времени может происходить обращение к памяти в границах ограниченного диапазона адресов (причем, как по кодам программы, так и по информационным данным).
К примеру, микропроцессору в процессе своего функционирования стали необходимы два байта информации. Когда строка обладает длиной в 16 байт, то в кэш-память должны переписываться не только необходимые два байта, но и некоторые близь лежащие данные. Если микропроцессор выполняет обращение за новыми данными, то в силу локальности ссылок, как правило, обращение будет направлено на соседний адрес. Далее этот процесс просто повторяется. Таким образом, определенный набор следующих обращений будет выполняться прямо к кэш-памяти, минуя оперативную память, то есть, это будут кэш-попадания. Если очередной запрошенный микропроцессором физический адрес выходит за пределы строки кэш-памяти, то есть, случится кэш-промах, то будет исполнена закачка в кэш-память новой строчки, и следующая совокупность обращений должна привести к кэш-попаданиям.
Чем более длинная применяемая при обменах между оперативной и кэш-памятью строка, тем более вероятен тот факт, что последующее обращение может произойти в границах данной строки. Но при этом чем более длинной является строка, тем более долго она будет пересылаться из оперативной памяти в кэш-память. И когда очередная команда будет командой перехода или считывание данных должно начаться из нового массива, то есть последующее обращение будет не по соседнему адресу, то интервал времени, затраченный на пересылку длинной строки, будет фактически использован напрасно.
По этой причине при определении длины строки необходимо поддерживать разумный компромисс между соотношением времени обращения к оперативной и кэш-памяти и вероятностью достаточно удаленных переходов от текущего адреса при исполнении программы. Как правило, размер строки должен определяться по результатам моделирования аппаратно-программной структуры системы.