Это связано с физическим размером на кристалле. Каждый бит в кеше удерживается одним или несколькими транзисторами, поэтому, если вы хотите много кеша, вам нужно много транзисторов. Скорость кэш-памяти по существу обратно пропорциональна местоположению устройства, которое хочет получить к нему доступ - в крошечных устройствах, таких как это, связь замедляется, когда ваш путь прохождения сигнала становится длиннее. Это частично связано с импедансом субстрата, но на этом уровне существуют некоторые более сложные физические явления.
Если мы хотим включить большой кеш в единственном числе, он должен находиться на очень коротком расстоянии от MMU, ALU и т. Д. Одновременно. Это делает физическое проектирование процессора довольно сложным, так как большой кэш занимает много места. Чтобы сделать кэш «локальным» для этих подразделений, вы должны пожертвовать местоположением подразделений друг для друга.
Используя небольшой быстрый локальный кэш (L1), мы можем максимизировать локальность и скорость, но мы теряем размер. Таким образом, мы затем используем вторичный кеш (L2) для хранения больших объемов данных с небольшим ущербом для локальности (и, следовательно, скорости). Это дает нам лучшее из обоих миров - мы можем хранить много данных, но при этом иметь очень быстрый локальный кэш для использования процессорами.
В многоядерных процессорах кэш L3 обычно распределяется между ядрами. В этом типе конструкции кэши L1 и L2 встроены в кристалл каждого ядра, а кэш L3 расположен между ядрами. Это дает разумную локализацию каждому ядру, но также допускает очень большой кеш.
Функциональность кэшей в современных процессорах очень сложна, поэтому я даже не буду пытаться дать правильное описание, но очень упрощенный процесс заключается в том, что целевые адреса ищутся в L1, затем в L2, затем в L3, прежде чем прибегнуть к выборка системной памяти. Как только эта выборка завершена, она возвращается через тайники.