Скачиваний:
78
Добавлен:
16.04.2013
Размер:
430 Кб
Скачать

4.4.5.3.2. Аннулирование элементов alat.

В дополнение к элементам, удаляемым предварительными загрузками, аннулирование элементов ALAT может происходить неявно, с помощью событий изменяющих состояние памяти, либо явно одной из следующих инструкций: ld.c.clr, ld.c.clr.acq, chk.a.clr, invala, invala.e. События, которые могут явно аннулировать элементы ALAT, включают такие, которые изменяют состояние памяти или состояние преобразования памяти, такие как:

  1. Выполнение инструкций сохранения, семафорных инструкций или ptc.ga на других процессорах в когерентном домене.

  2. Использование на локальном процессоре инструкций сохранения или семафорных инструкций.

  3. Платформо-видимое удаление строки кэша из процессора.

Когда происходит одно из этих событий, аппаратура проверяет каждый регион памяти, представленный элементом в ALAT, чтобы увидеть, накладывается ли он на места связанные с аннулированными событиями. Элементы ALAT, где есть наложение регионов памяти на аннулированные события, удаляются. Заметим, что некоторые аннулированные события могут требовать удаления из ALAT множества элементов. Например, инструкция ptc.ga выравнивает страницу, таким образом, ptc.ga от другого процессора требует, чтобы аппаратные средства аннулировали все элементы ALAT связанные с этой страницей. Сохранения при RSE сливаниях, не проверяются на аннулирование ALAT и не приводят к удалениям элементов ALAT. См. раздел 6.9 «Взаимодействие RSE и ALAT» во втором томе. Когда внешний агент может увидеть, что процессор удалил интервал физических адресов из его кэшей, тогда этот адресный интервал гарантированно будет аннулирован для таблицы ALAT этого процессора.

Реализация может аннулировать и больше элементов, чем это явно вытекает из события аннулирования, и вообще – в любой момент аннулировать любой элемент ALAT. Например, st1 всего лишь обращается к одному байту, но выполнение может решить аннулировать все элементы ALAT, чей регион памяти находится на той же самой линии кэша. Выполнение может также обеспечить ALAT нулевыми элементами, (т.е. все инструкции ld.c/chk.a действовали бы так, как будто произошел промах ALAT).

Программное обеспечение ответственно за явное аннулирование всех затрагиваемых элементов ALAT всякий раз когда:

  1. Программное обеспечение явно изменяет отображение виртуальных регистров на физические, в ротируемых регистрах, которые были приемниками предварительных загрузок (clrrrb).

  2. Программное обеспечение изменяет отображение виртуальных регистров на физические.

  3. Программное обеспечение обращается к вспомогательной памяти механизма RSE для предварительной загрузки. См. раздел 6.9 «Взаимодействие RSE и ALAT» во втором томе (так как RSE сохранения не аннулируют элементы ALAT).

  4. Программное обеспечение явно изменяет отображение виртуальных регистров на физические, в стековых регистрах с помощью переключений вспомогательной памяти RSE. См. раздел 6.11.3 «Синхронизация переключения вспомогательной памяти» во втором томе.

4.4.5.4. Комбинирование спекуляций по управлению и по данным

Спекуляция по управлению и спекуляция по данным не исключают друг друга; некая загрузка может быть спекулятивной и по управлению и по данным. Для основных регистров и регистров с плавающей точкой заданы оба варианта предварительных загрузок – и являющиеся спекулятивными по управлению (ld.sa, ldf.sa, ldfp.sa), и таковыми не являющиеся (ld.a, ldf.a, ldfp.a). Если спекулятивная расширенная загрузка генерирует маркер отложенного исключения, то

  1. Любой существующий элемент ALAT для одного и того же тега регистра ALAT аннулируется.

  2. Никакой новый элемент ALAT не выделяется.

  3. Если приемник загрузки был регистром общего назначения, то его NaT бит устанавливается в 1.

  4. Если приемник загрузки был регистром с плавающей точкой, то в приемный регистр записывается значение NaTVal.

Если спекулятивная предварительная загрузка не генерирует отложенное исключение, то ее поведение точно такое же, как у предварительной загрузки, не являющейся спекулятивной по управлению.

Так как после задержанной ошибки не может быть никакого соответствующего элемента ALAT, то одной проверки предварительной загрузки или проверки загрузки достаточно и для того, чтобы проверить неудачность спекуляции по данным, и для того, чтобы обнаружить задержанные исключения.