Типы зависимостей для подсистемы управления памятью
Зависимости между инструкциями бывают двух основных типов: зависимости по регистрам и зависимости по адресам. Зависимости по регистрам выражаются с помощью равенств номеров регистров, использующихся в качестве операндов инструкций тестового воздействия. Зависимости по адресам связаны с устройством подсистемы управления памятью. Примерами зависимостей по адресам являются совпадение виртуальных адресов, совпадение номеров страниц виртуальной памяти, совпадение физических адресов, совпадение используемых множеств кэш-памяти и др. Многоуровневая организация памяти приводит к сложной, многоуровневой структуре зависимостей.
Зависимости по адресам можно условно разбить на зависимости по виртуальным адресам и зависимости по физическим. Зависимости по виртуальным адресам связаны со структурой буфера трансляции адресов. Зависимости по физическим адресам определяются организацией кэш-памяти.
Мы используем следующие типы зависимостей для буферов, входящих в состав MMU:
- IndexEqual — совпадение используемых множеств;
- EntryEqual — совпадение строк внутри множества;
- BlockEqual — совпадение данных внутри строки;
- EntryReplace — обращение к данным, строка с которыми была вытеснена из буфера предшествующей инструкцией;
- BlockEqual — совпадение данных внутри строки.
В целом для подсистемы управления памятью можно выделить следующие типы элементарных зависимостей:
- VAEqual — совпадение/несовпадение виртуальных адресов;
- VPNEqual — совпадение/несовпадение номеров страниц виртуальной памяти;
- PAEqual — совпадение/несовпадение физических адресов;
- PFNEqual — совпадение/несовпадение номеров страниц физической памяти;
- L1IndexEqual — совпадение/несовпадение множеств кэш-памяти L1;
- L2IndexEqual — совпадение/несовпадение множеств кэш-памяти L2;
- L1Replace — совпадение/несовпадение тэга кэш-памяти L1 с тэгом данных, которые были вытеснены из кэш-памяти предшествующей инструкцией;
- L2Replace — совпадение/несовпадение тэга кэш-памяти L2 с тэгом данных, которые были вытеснен из кэш-памяти предшествующей инструкцией.
В силу иерархической организации памяти зависимости по адресам имеют многоуровневую структуру. Фрагмент дерева возможных зависимостей представлен на рисунке 2 (пунктирная дуга соответствует значению false, сплошная — значению true). Результирующая зависимость между инструкциями соответствует пути от корня до листовой вершины.
Рисунок 2. Фрагмент иерархии зависимостей по адресам