Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MProc / M9 / Архитектура часть 6..doc
Скачиваний:
42
Добавлен:
16.04.2013
Размер:
480 Кб
Скачать

6.3.3. Самомодифицирующийся код

Пока работает набор инструкций IA-32, для всех IA-32 программ поддерживается когерентность самомодифицирующегося кода и кэша инструкций (когерентность относительно кэша данных локального процессора). Обнаружение самомодифицирующегося кода прямо поддерживается на том же самом уровне соответствия, что и процессор Pentium. Программа должна включать IA-32 инструкции переходов между операцией сохранения и модификацией инструкций для изменяемых байтов инструкций, с целью распознавания.

Не определено, обнаружит ли процессор случай самомодифицирующегося кода IA-32 для следующих условий: 1) PSR.dt=0 или PSR.it=0, либо 2) имеются виртуальные алиасы для различных физических адресов между таблицами TLB инструкций и данных.

При переключении из набора инструкций Itanium в набор инструкций IA-32, пока выполняются инструкции Itanium, когерентность самомодифицирующегося кода и кэша инструкций не поддерживается прямо аппаратурой процессора. Но, если делается модификация инструкций IA-32 с помощью инструкций Itanium, то код типа Itanium должен явно синхронизировать кэши инструкций с помощью последовательности кода заданной в разделе 4.4.6.2 «Непротиворечивость памяти». В противном случае модификация может наблюдаться, а может и не наблюдаться последующими IA-32 инструкциями.

При переключении из набора инструкций IA-32 в Itanium, модификация содержимого локального кэша инструкций, с помощью инструкций IA-32, обнаруживается аппаратными средствами процессора. Процессор гарантирует, что кэш инструкций сделан когерентным относительно модификации и все последующие выборки инструкций Itanium видят модификацию.

6.3.4. Взаимодействия упорядочивания памяти.

Инструкции IA-32 отображаются в модель упорядочивания памяти Itanium, следующим образом:

  • Все IA-32 сохранения имеют семантику release (освобождение)

  • Все IA-32 загрузки имеют семантику acquire (запрос)

  • Все IA-32 инструкции типа чтение-модификация-запись или защелка (lock) имеют обе семантики release и acquire (fully fenced - полное заграждение)

Переключения наборов инструкций не делают автоматический забор (fence) обращений к памяти данных. Для гарантирования надлежащего упорядочивания программе нужно принять во внимание следующие правила упорядочивания.

При переключении из набора инструкций Itanium в набор инструкций IA-32

  • Все зависимости данных обрабатываются, загрузки IA-32 видят результаты всех предыдущих сохранений Itanium.

  • Сохранения IA-32 (семантика release) не могут пропустить любые предыдущие Itanium загрузки или сохранения.

  • Загрузки IA-32 (семантика acquire) могут пропустить предыдущие неупорядоченные Itanium загрузки или любые предыдущие Itanium сохранения в различающиеся адреса. Программа типа Itanium может предотвращать IA-32 загрузки из прошедших предыдущих загрузок и Itanium сохранений, используя перед переключением набора инструкций операцию acquire (или mf).

При переключении из набора инструкций IA-32 в набор инструкций Itanium

  • Все зависимости данных обрабатываются, загрузки Itanium видят результаты всех предыдущих сохранений IA-32.

  • Сохранения и загрузки Itanium не могут пропускать предыдущие IA-32 загрузки (семантика acquire).

  • Неупорядоченные сохранения Itanium или любая Itanium загрузка может пропустить предыдущее IA-32 сохранение (семантика release) в различающиеся адреса. Программа типа Itanium может предотвращать сохранения и загрузки Itanium из прошедших предыдущих IA-32 сохранений, используя после переключения набора инструкций операцию release (или mf).