Ядро Linux: что такое кеш команд и подсистема mp-IRQ в терминах перехвата функций через replace? - PullRequest
0 голосов
/ 07 марта 2011

Я пытаюсь реализовать перехват функции ядра (замена указателя System.map на функцию, используя этот старый метод (c) Silvio);согласно этому сообщению на форуме , некоторые возможные недостатки могут быть связаны с кэшем инструкций и источниками mp-IRQ, которые не очищаются / обновляются после перехвата.

Что это за подсистемы и какразобраться с ними в этом случае?

1 Ответ

2 голосов
/ 07 марта 2011

Кеш команд не является подсистемой ядра Linux - это часть ЦП.

Извлечение кода из основной памяти занимает много времени, поэтому ЦП используют кеш-память для кеширования фрагментов кода.Это кэш инструкций, в котором хранятся копии инструкций (кода), и у ЦП есть основания полагать, что они скоро понадобятся.

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

...