Чтобы обновить PTE для активного процессора блокирую все остальные с помощью DPC (по рекомендации Intel manual), изменяю PTE, снимаю блокировку. Чтобы изменить PTE на других процессорах ставлю в очередь DPC, которая должна это сделать. Вопрос в том, как избежать Page Fault при доступе к таблице страниц?
Мысли вслух: #PF Ведь возникает в 4-х случаях?!: Шерлок Холмс, методом дедукции, отбросил-бы последние 3 как невозможные, и решил, что код выполняется не на том процессоре, в адресном пространстве которого нах-ся требуемый PTE. (ИМХО) П.С. Я бы в исходниках Linice`а порылся, там что-то за МР было.
В том то и дело, что таблица страниц может находиться в подкачиваемой памяти. А так как код по модификации PTE должен быть выполнен на всех процессорах, я могу это сделать только в DPC-функции в произвольном контексте. Как быть?
Уже самому интересно стало, а чем #PF мешает? Может стоит попытаться заранее прочитать память либо залочить регион памяти? Ведь это должно решить проблему?
Пожалуй действительно проблемы нет. Система держит всего одну копию PDT и таблиц страниц для всех процессоров. Получается, что и изменить эту таблицу достаточно всего один раз на одном процессоре, а на остальных просто перезагрузить кэш TLB. Почему-то представлял, что у системы несколько копий PDT для каждого процессора, отсюда и такие вопросы. Уррряяяя )