2015-08-29 8 views
0

Этот вопрос не относится ни к какой реализации ЦП, но приветствуются ответы на конкретные процессоры.Обработка ошибок перевода MMU в потоке команд - что происходит с MMU?

В настоящее время я реализую полный процессор с поддержкой MMU, и возникла простая проблема.

Итак, представьте ситуацию, когда простое пропущение TLB происходит из-за потока команд (или кэша команд). Это вызовет пропуски TLB. Теперь, если PTE не найден, будет инициировано какое-то исключение, например «Ошибка перевода страницы». Пока что проблем нет.

Теперь для вызова обработчика ошибок поток команд (или кеш) должен получить код обработчика исключений. Для этого ему нужно будет снова искать соответствующую запись PTE в TLB и, в конечном счете, другую столовую прогулку.

Представьте, что запись PTE не найдена. Можно было бы ожидать, что какой-нибудь другой обработчик исключений будет вызван.

Теперь, в этом последнем обработчике исключений, поскольку сам обработчик не может быть найден или действителен, блокируется ли MMU до того, как обработчик будет извлечен и исполнен (таким образом, обход каждого из MMU, включая отображение Phys-Virt), или есть ли другой способ (не фатальный), чтобы справиться с этой ситуацией?

Alvie

ответ

0

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

Как правило, кажется, что часть основного кода ядра статически ставится на физическую память с известным отображением; но, учитывая, что вы все равно пытались написать полнофункциональную ОС с виртуальной памятью, я думаю, вы знаете, что знаете это.

+0

Мой вопрос на самом деле связан с оборудованием, а не с программным обеспечением. Так что, если мы не сможем правильно обработать неисправность, единственным вариантом является полный сброс. Мне было интересно, можно ли отключить MMU для конкретного сценария, чтобы этого не произошло. Например, может быть сопоставлен (жесткий) с кодом прошивки. –