Для увеличения скорости некоторые процессоры
(CPU) семейства 68k имеют возможность при доступе к
памяти использовать кэш.
Кэши всегда используют логическую адресацию,
включая функциональный код доступа. Это
означает, что доступ в режиме пользователя (User Mode)
и режиме супервайзера) Supervisor Mode будут создавать
различные входные данные кэша (за дополнительной
информацией обращайтесь к документации по
процессорам фирмы Motorola).
вот краткий обзор особенностей кэшей процессоров семейства 68k:
Первая важная вещь состоит в понимании того,
что кэш процессоров 68030..68060 управляется с помощью
Регистра Контроля Кэша (CACR) и MMU
С помощью CACR кэш может бать включен или выключен.
Используя одну страницу памяти MMU (4 кб с WHDLoad)
можно обозначить каким образом будет
производиться кэширование.
На процессорах 68030 страница памяти может быть
кэшируемой (Cacheable) или некэшируемой (NotCacheable). На
процессорах 68040/68060 - кэшируемой WriteThrough
(сквозное), CopyBack, некэшируемой NonCachable (неточно)
или некэшируемой NonCachable Serialized (точно).
Если WHDLoad не использует MMU, то управление возможно только с помощью CACR.
По умолчанию области WHDLoad, Slave и ExpMem помечены как кэшируемые CopyBack. Область BaseMem помечена как NonCachable, а кэш данных и кэш команд включены через CACR. Таким образом, если программа располагается в области BaseMem, то она запускается с отключенным кэшем, но WHDLoad, Slave и ExpMem используют кэш для максимального быстродействия. Если MMU не используется WHDLoad, в результате этих настроек, оба кэша отключаются т.к. без MMU нельзя сделать отличающиеся настройки для разных участков памяти и, следовательно, если любой диапазон помечен как NonCacheable (некешируемый), отключаются все кэши.
Имеется две функции в WHDLoad для управления кэшами: resload_SetCACR и resload_SetCPU. Resload_SetCACR довольно старая функция и она может быть полностью заменена с помощью resload_SetCPU (WHDLoad сам обрабатывает аргументы функции resload_SetCACR и автоматически вызывает функцию resload_SetCPU). В любом случае рекомендуется использовать функцию resload_SetCACR всем, кто плохо знаком с тем, как работать с кэшами и каково их влияния на систему Амиги. Использование функции resload_SetCACR и кэш данных, можно включать и отключать независимо друг от друга. Resload_SetCACR влияет только на кэширование области основной памяти (BaseMem).
Если программист ответственно подошел к своей
работе, то пользователю вообще не нужно ломать
голову относительно установок кэша, поскольку
все настройки кэша будут выполнены Slave-модулем
самостоятельно.
Однако, может быть две причины для изменения
установок кэша вручную. Первая - это проблемы с
установленной программой, из-за того что она
работает слишком быстро (например, происходит
порча графики), а вторая , чтобы ускорить работу
установленной программы.
Чтобы заставить работать программы, которые приводят к ошибке из-за использования кэша, нужно активизировать опцию NoCache. Эта опция выключает все кэши и помечает всю память как некэшируемую NonCachable Serialized (точно). Если компьютер имеет 32-битную Chip-память то он по прежнему будет работать быстрее чем A500.
Для того чтобы ускорить работу установленной программы, могут быть выставлены некоторые опции для активации кэша. Эти опции будут перезаписывать внутренние установки Slave-модуля. С процессорами 68020 может быть установлена опция Cache . С процессорами 68030 еще может быть использована и опция DCache, которая также включает в себя опцию управления кэшем. Для использования с процессорами 68060 существует еще несколько опций управления кэшами: BranchCache, StoreBuffer и SuperScalar. Опция ChipNoCache/S может увеличить производительность на процессорах 68040 и 68060 (см. ниже).
Кэширование может производиться не только
средствами самого процессора (CACR) и MMU, а так же и
внешними аппаратными средствами. Процессор по
шине передаёт сигнал в случае, если он пытается
кэшировать доступ. И внешние аппаратные средства
могут сигнализировать процессору (после того как
адрес был выставлен на шине адреса во время
доступа к памяти), что доступ не должен
кэшироваться.
На сколько мне известно, на всех Амигах и внешних
акселераторах, содержащих процессор не ниже 68030
(т.к. они имеют кэш данных), аппаратные средства
сообщают процессору, что память не кэшируется
или не используется. Воздействие происходит на
всю Chip-память и область IO (Cia/Custom/RTC) которые не
должны кэшироваться кэшем данных. Это необходимо
для того, чтобы избежать конфликтов, например,
из-за работы DMA.
Реакция процессора на аппаратный отказ
кэширования доступа может отличаться на разных
типах процессоров. На 68030 нет никакого влияния на
скорость доступа, данные просто не будут
кэшироваться. На 68040 доступ на чтение будет
выполняться с максимальной скоростью, но доступ
на запись (CopyBack) будет отменен и начат сначала без
кэширования, что приводит к тому, что доступ
будет примерно в 5 раз (зависит от аппаратных
средств и скорости процессора) медленнее по
сравнению с некэшируемым доступом. На 68060 доступ
как на чтение, так и на запись будет отменен и
перезапущен. Доступ на чтение будет примерно в 3
раза медленнее, а доступ на запись медленнее
примерно в 5 раз.
Упомянутые выше проблемы связаны с доступом к
данным. Доступ к командам обычно не вызывает
проблем и также кэшируется в Chip-памяти. Но
существуют некоторые аппаратные средства
(возможно, просто неисправные), которые не
позволяют кэширование команд в Chip-памяти. На
таких системах должна использоваться опция ChipNoCache/S, чтобы избежать
значительного замедления в работе установленной
программы, поскольку иначе (без использования
этой опции) доступ к инструкциям будет примерно в
2 раза медленнее.
Это поведение может быть проверено путем запуска модуля Speed.Slave, находящегося в директории src/memory-speed архива для разработчиков.
Кэширование данных при записи управляет работой кэша на процессорах 68030 когда при операции записи происходит потеря кэша. Кэширование данных при записи должно быть активизировано, когда программа запущена в режиме пользователя (User Mode). Если установленная программа запускается только в режиме супервайзера (Supervisor Mode), то Кэширование данных при записи может быть отключено, что может дать небольшой прирост скорости.
Кэш ветвления доступен только на 68060. Это своего рода кэш инструкций для команд перехода. Но в отличие от кэша команд не зависит от установок MMU! Это означает, что даже если страница памяти помечается как не кэшируемая, команды перехода все равно будут кэшироваться при условии, что кэш ветвления активен.
За дополнительной информацией обращайтесь к
справочнику по микропроцессорам Motorola. Если у вас
есть поправки или добавления которые хотелось бы
видеть на этой странице, пожалуйста напишите мне .