2009-06-17 8 views
10

Есть ли способ прочитать содержимое кэша процессора? Архитектура для ARM.чтение содержимого кэша процессора

Я признаю недействительным диапазон адресов, а затем хочу удостовериться, недействителен ли он или нет. Несмотря на то, что я могу читать и записывать диапазон адресов с недействительными и проверять недействительность и без них, я хочу знать, можно ли читать содержимое кеша

Спасибо!

ответ

8

ARM9 предоставляет кеш-манипуляторы и тестовые регистры, которые позволяют вам проверять состояние кеша.Вот разумная отправная точка:

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0151c/Chdcfejb.html

ICACHE и DCache поддерживаются с помощью MCR и MRC инструкции CP15 регистров 7 и 9, определяемой моделью ARM v4T программиста. Дополнительные операции доступны с использованием регистров MCR и MRC в CP15 15. Эти операции объединены с теми, которые используют регистры 7 и 9, чтобы обеспечить полное тестирование кэшей в программном обеспечении.

Это привилегированные инструкции, поэтому они могут быть недоступны на вашей целевой платформе.

Я бы начал с простой программы, которая сбрасывает состояние всех строк кэша. Это должно дать вам достаточно информации для чтения данных в кеше, просто прочитав ячейки памяти, которые предоставляют теги кеша.

2

Я не решаюсь писать, это невозможно, поэтому я пишу, что это очень сложно. Вероятно, нет общего ответа. учитывая, что кеш процессора работает прозрачно, невозможно прочитать его содержимое из подключенного центрального процессора без изменения содержимого кеша. Кэш-память процессора обычно реализуется как CAM (адресная память содержимого, ассоциативная память), если CPU пытается получить доступ к данным, кэш просматривается, если данных нет, они извлекаются из памяти, но я боюсь, что этот процесс прозрачен для CPU ,

Опция заключается в использовании своего рода модуля наблюдения HW и обнюхивания на системной шине, которая соединяет кеш с ОЗУ. Если запрос данных появится на шине, то запрошенные данные не будут в кеше.

надеюсь, что кто-то с более глубоким знанием ХВ прольет свет.

есть запись на википедии обсуждающих кэширование CPU: http://en.wikipedia.org/wiki/CPU_cache

0

Как указано в this thread, просто с помощью CPU может вызвать содержимое кэша для изменения. Поскольку (большинство) реализаций кэша намеренно полностью прозрачны для ЦП, вы не сможете просматривать содержимое кеша непосредственно из программного обеспечения, работающего на традиционных процессорах.

Чтобы сделать что-то подобное, потребуется либо процессор с поддержкой кэширования (со специальными инструкциями по управлению кешем, я понятия не имею, существуют ли они на самом деле), либо вам потребуется установить отдельный HW-модуль для просмотра кеша , Вот 2 идей у ​​меня есть для этого:

  1. Замените оригинальный контроллер кэша с одним, который имеет дополнительные функции управления и может быть подключен к системной шине для считывания данных. Этот контроллер находится между «ЦП и кешем».

  2. Разместите дополнительный модуль параллельно с исходным кешем с доступом к кешу только для чтения. Используя специальную линию прерывания (или аналогичный аппаратный -NOT-программный сигнал), CPU может затем запустить дамп кэша в память этого модуля, а затем снова прочитать его (через шину). Этот контроллер не повлияет на работу вашего кеша; это просто позволит вам делать снимки в любой момент времени.

1

По определению, все, что вам нужно будет сделать, чтобы прочитать содержимое кеша, было бы загрузить память, хранящуюся в кеше. Если кеш работает правильно, он будет извлекать содержимое из кеша.

Однако, если вы пытаетесь прочитать содержимое I-кеша, то это зависит от архитектуры. Кроме того, у вас будут условия гонки. Инструкция для чтения содержимого кеша может непреднамеренно переписать содержимое кэша.