Надеюсь, это не дубликат.
Вопрос по симуляции кеша и виртуальной памяти:
- предположим, блокирующий кеш (блокирующий кеш — это кеш, который ожидает завершения передачи из памяти в кеш перед доставкой данных в ЦП)
Что произойдет, если:
- ЦП запрашивает инструкцию, которой нет в кэше инструкций (есть промах)
- кэш инструкций запрашивает данные в MMU/память
- MMU сообщает об ошибке страницы
- ЦП получает прерывание от MMU, которое предупреждает об ошибке страницы.
- ЦП переходит к аппаратному адресу, содержащему код для обработки ошибки страницы.
- этап выборки инструкций запрашивает первую инструкцию (из обработки ошибок страницы) для кэширования
Теперь мой вопрос: как кеш будет доставлять код обработки ошибок страницы в ЦП, если он ожидает, пока основная память доставит другие данные (тот, который вызвал ошибку страницы)?
Я придумал такое решение: улучшить мой кеш, чтобы и процессор, и кеш получали сигнал ошибки страницы; Кэш сохраняет свое состояние, получает и доставляет код обработки ошибок страниц в ЦП, а затем восстанавливает свои предыдущие состояния.
Это то, что я придумал, но является ли это правильным/действительным и эффективным способом?