Я задаюсь вопросом о том, как можно управлять системой виртуальной памяти вместе с MMU, когда необходимо поддерживать некоторые "фиксированные" адреса в адресном пространстве.
Например, когда машина загружается, ЦПУ начинает считывать первую инструкцию с фиксированного адреса (который сопоставлен с каким-либо ПЗУ), затем выдает адреса периферийным устройствам (если используется система ввода-вывода с отображением в памяти), и Затем ОС загружается. Я также знаю, что подпрограммы прерывания и подобные вещи должны находиться в "фиксированной" позиции в памяти, и эти вещи загружаются ОС.
Я могу подумать, что MMU отключен в таком процессе, а затем он включен после загрузки ОС.
Я могу подумать, что процессы, описанные выше, используют системное адресное пространство и что системное адресное пространство не виртуализировано, несмотря на то, что на самом деле это адресное пространство пользователя.
Это приведет к тому, что пул физических адресов останется неизменным для доступа к периферийным устройствам ввода-вывода, подпрограммам прерывания и т.д., А также к виртуальному пользовательскому пространству, управляемому MMU, где процессы могут обрабатывать все данные, необходимые для разработки. , требующий к ОС доступа к периферийным устройствам ввода / вывода.
Но я не уверен в этих вещах. Вот я и спрашиваю, когда MMU на самом деле включен? Это касается всех адресов или только адресов пользователя? Правда ли, что некоторые адреса могут обходить MMU даже во время работы системы, чтобы получить доступ к фиксированным позициям памяти? Или я упускаю некоторые важные подсказки?