### Огляд кеша центрального процесора

Для збільшення швидкості деякі процесори (CPU) сімейства 68k мають можливість при доступі до пам'яті використовувати кеш. Кеші завжди використовують логічну адресацію, включаючи функціональний код доступу. Це означає, що доступ у режимі користувача (User Mode) і режимі супервайзора (Supervisor Mode) будуть створювати різні вхідні дані кеша (за додатковою інформацією звертайтеся до документації по процесорах фірми Motorola).

Наводимо короткий огляд особливостей кешей процесорів класа 68k:

- 68000 - відсутній
- 68010
  - Команда попередньої вибірки, два слова попередньої вибірки, одне слово декодуючого регістра
  - Режим Циклу використовується коли за одним словом інструкції слідує DBcc, і до закінчення циклу більше немає ніяких інструкцій
- 68020
  - Команда попередньої вибірки
    довге слово
  - Кеш команд
    16 ліній по 16 байт = 256 байт
    може бути активізован або зупинен через CARC
- 68030
  - Команда попередньої вибірки
    довге слово
  - Кеш команд
    16 ліній по 16 байт = 256 байт
    може бути активізований або зупинений через CARC
  - Кеш даних
    16 ліній по 16 байт = 256 байт
    може бути активізований або зупинений через CARC
    завжди з наскрізним записом (WriteThrough)
    вибір режиму кешування даних при записі (Write Allocation)
- 68040
  - Команда попередньої вибірки
    довге слово
  - Кеш команд
    256 ліній по 16 байт = 4096 байт
    може бути активізований через CARC
  - Кеш даних
    256 ліній по 16 байт = 4096 байт
    може бути активізований через CARC
    можливість вибору режиму CopyBack/WriteThrough через MMU
- 68060
  - Команда попередньої вибірки
    довге слово
  - Кеш команд
    512 ліній по 16 байт = 8192 байт
    може бути активізований, зупинений і зменшений в 2 рази через CARC
  - Кеш розгалуження (Branch Cache)
    може бути активізований через CARC
    не змінюється установками MMU!
  - Суперскалярна обробка (Superscalar Dispatch)
    може бути активізований через CARC
  - Кеш даних
    512 ліній по 16 байт = 8192 байт
    може бути активізований, зупинений і зменшений в 2 рази через CARC
    можливість вибору режиму CopyBack/WriteThrough через MMU
  - Push Buffer
    може бути відключений через PCR
  - Store Buffer
    може бути активізований через CARC
    Сторінки не повинні бути такими що не кешуються (NonCachable Serialized (precise))

#### Робота з кешем в WHDLoad

Перша важлива річ полягає в розумінні того, що кеш процесорів 68030..68060 управляється за допомогою Регістра Контролю Кеша (CACR) і MMU (при умові, що WHDLoad використовує 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 використовують кеш для швидкодії.

#### Керування кешем (для програмістів)

Є дві функції в 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 (див. нижче).

#### Кешування чип-пам'яті (Chip-Memory)

Кешування може виконуватися не тільки засобами самого процесора (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` архіву для розробників.

#### Кешування даних під час запису (Write Allocation)

Кешування даних при записі управляє роботою кеша на процесорах 68030 коли при операції запису відбувається втрата кеша. Кешування даних в момент запису повинно бути активізовано, коли програма запущена в режимі користувача (User Mode). Якщо встановлена програма запускається тільки в режимі супервайзера (Supervisor Mode), те кешування даних під час запису може бути відключено, що може дати невеликий приріст швидкості.

#### Кеш розгалуження (Branch Cache)

Кеш розгалуження доступне тільки на 68060. Це свого роду кеш інструкції для команд переходу. Але на відміну від кеша команд не залежить від установок MMU! Це означає, що навіть якщо сторінка пам'яті позначається такою, що не кешується, команди переходу всеодно будуть кешуватися за умови, що активно кеш розгалуження.

За додатковою інформацією звертайтеся до довідника по мікропроцесорах Motorola. Якщо у вас є зауваження або доповнення які хотілося б бачити на цій сторінці, будь ласка напишіть мені .