7.4.4.3. Кэш-память в МП 80386
Кэш-память располагают между основной памятью и
процессором для улучшения эффективной скорости взаимодействия с памятью и увеличения
быстродействия процессора. Название «кэш» (в переводе с английского - тайник)
говорит о том, что данный
механизм прозрачен для пользователя. Обычно кэш-память реализуют на полупроводниковых устройствах,
быстродействие которых сравнимо с быстродействием процессора, тогда как основная память
использует более дешевые и медленно действующие устройства.
Концепция кэш-памяти основана на предвосхищении наиболее
вероятного использования
процессором данных из основного устройства памяти путем копирования их в кэш-памяти. Эта
концепция распространяется на данные, соседние с текущими данными. Для этого обычно осуществляется
передача из основной памяти в кэш-память блока из нескольких слов, даже если в
данный момент требуется
только одно слово. Если требуемое слово является частью потока последовательных команд, то
выборка последующих команд производится на этом первом этапе работы, поскольку благодаря этому
отпадает необходимость повторных обращений к основной памяти (рис. 4.5).
Все данные хранятся в основной памяти. С помощью системы
с кэш-памятью некоторые из этих данных
копируются в кэш-память. Когда процессору нужно считать или записать данные в
память, то сначала он проверяет их наличие в кэш-памяти.
Если необходимые ему данные находятся там (кэш-попадание), то МП 80386 может легко и быстро их использовать,
так как кэш-память реализуется на
самых быстродействующих элементах. В противном случае (кэш-промах) эти данные извлекаются из основной памяти и переписываются
в кэш-память.

Рис. 4.5. Использование кэш-памяти для
просмотра вперед.
Эффективность кэш-попаданий выражается отношением
успешных обращений к общему количеству обращений к кэш-памяти. На это отношение
влияют размер, физическая организация и алгоритм кэш-памяти, а также
выполняемая программа. Эффективной кэш-память считается в том случае, если ее организация
увеличивает процент кэш-попаданий.
Если
кэш-память организована так, что часто необходимые процессору команды и данные уже находятся в ней, то это
значительно уменьшает среднее время доступа
к памяти. Программы выполняются быстрее, если большинство операций - это передачи в наиболее быструю кэш-память и
из нее.
Большие компьютеры используют кэш-память уже давно.
Появление быстрых 32-разрядных
процессоров вызвало необходимость в таком средстве и в области малых машин. Микропроцессор
80386 работает с внешней кэш-памятью. Описываемая здесь кэш-память состоит из
10 микросхем. Кэш-память физического адреса не требует накладных расходов в
отличие от кэширования логического адреса, реализованного процессором с расположенной на его
плате кэш-памятью. Целью применения кэш-памяти является поддержка быстродействия от 3,5 до 4
миллионов команд в
секунду, обеспечиваемого следующим: 32-Мбайт шина, двухтактовые циклы магистрали, МП 80386 с тактовой частотой 16
МГц, арифметический сопроцессор 80387 и
32-Кбайт кэш-память физического адреса для команд и данных (рис. 4.6).

Рис. 4.6. Структурная схема МП 80386 и
кэш-памяти.
Предсказание адреса следующего обращения в память было бы
почти невозможно,
если бы программы обращались к памяти абсолютно произвольным образом. На самом же деле
программы имеют тенденцию обращаться к памяти по адресу, близкому к адресу предыдущего обращения.
Этот принцип называется локальностью программы или локальностью ссылок. Локальность программы и есть то, что делает систему с
кэш-памятью эффективной. Например, загрузка и выгрузка стека осуществляется с одного конца, так
что несколько соседних обращений
делаются в окрестностях вершины стека.
Для увеличения процента кэш-попаданий процессор
использует блочную выборку.
Кэш-контроллер разбивает основную память на блоки (известные также как длина
строки) длиной обычно в 2, 4, 8 или 16 байт. Размер блока является одним из наиболее важных параметров при
проектировании системы с кэш-памятью. Если блок слишком мал, то уменьшается эффективность
выборки из основной памяти и процент кэш-попаданий. Слишком большой блок уменьшает количество
блоков, помещающихся
в кэш-памяти. При таком подходе требуется более широкая разрядность шины между
основной и кэш-памятью, а также больший объем статической и динамической памяти, что приводит к увеличению стоимости.
Обычно 32-разрядный процессор использует два или четыре
слова на блок. В случае
кэш-промаха кэш-контроллер пересылает весь содержащий нужное слово блок из основной памяти в
кэш-память. Блочная выборка может принести данные, расположенные перед требуемым
байтом (просмотр назад), данные, расположенные после него (просмотр вперед), или же как те, так и
другие. Когда к адресам обращаются в возрастающем порядке (например, при выборке команд), то
доступ к первому
байту блока приводит к выборке с просмотром вперед. Когда к адресам обращаются
в убывающем порядке (подобно загрузке в стек), то осуществляется просмотр назад.