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

  • Прежде всего, является ли виртуальная память аппаратной функцией системы или она реализуется исключительно ОС?

Во время перемещения во время компоновки компоновщик назначает адреса времени выполнения каждому разделу и каждому символу в сгенерированном исполняемом файле.

  • Соответствуют ли эти рабочие адреса виртуальным адресам?

  • Что делать, если система, для которой создается исполняемый файл, не использует виртуальную память?

Затем, если виртуальная память не используется, тогда адресное пространство приложения ограничивается физическим адресным пространством, выделенным для него ОС после перемещения во время загрузки.

  • Возникает ли сбой страницы, если виртуальная память не используется?

Я думаю, что да: в случае, если физическая страница, содержащая запрошенный физический адрес, еще не была сохранена в ОЗУ, тогда должен произойти сбой страницы, который обслуживается обработчиком ошибок страницы ОС

  • Наконец, возможна ли подкачка без виртуальной памяти?

Я спрашиваю, потому что подкачка всегда упоминается вместе с виртуальной памятью, но кажется, что наличие виртуальной памяти не требуется для подкачки

Спасибо


person mangusta    schedule 04.08.2012    source источник


Ответы (1)


Ух ты, много вопросов.

  • Где реализована виртуальная память? Базовое оборудование должно поддерживать виртуальную память. Помните, что когда вы обращаетесь к адресу памяти в своей программе, ЦП должен каким-то образом получить данные, принадлежащие этому адресу. Если у вас есть только физический доступ, то операция напрямую отправляется контроллеру памяти. В системах с виртуальной памятью у вас есть MMU (блок управления памятью), который переводит виртуальный адрес в физический. (Обратите внимание, что некоторые микроконтроллеры предоставляют урезанную версию, называемую блоком защиты памяти (MPU), которая не обеспечивает этот этап преобразования, но, по крайней мере, позволяет проверять права доступа.)
  • Соответствуют ли адреса времени связывания виртуальным адресам во время выполнения? Как правило, адреса времени связывания соответствуют виртуальным адресам во время выполнения. Однако есть режим, в котором это не так: позиционно-независимый код. Здесь виртуальные адреса определяются во время загрузки динамическим компоновщиком. Этот подход обычно используется для загрузки динамически подключаемых библиотек (DLL / .so) в приложение. Для получения дополнительных сведений по этой теме вы можете перейти на страницу «Компоновщики и загрузчики».
  • Что делать, если в моей целевой системе нет виртуальной памяти? Если ваша система не поддерживает виртуальную память, с точки зрения компилятора / загрузчика ничего не меняется: вам все равно нужно сгенерировать код для доступа к памяти. Единственное отличие состоит в том, что ваш ЦП больше не выполняет дополнительную трансляцию с виртуального адреса на физический.
  • Есть ли ошибки страниц, если нет виртуальной памяти? Нет ошибок страниц, если у вас нет виртуальной памяти. Однако в случае MPU вы все равно можете видеть нарушения доступа, сообщаемые оборудованием, если ваше приложение пытается получить доступ к адресу, который он не должен читать / писать. Обратите внимание, что физические адреса (лучше: данные, на которые указывают физические адреса) не нужно загружать в ОЗУ. Это просто указатели на уже существующую оперативную память.
  • Возможна ли подкачка без виртуальной памяти? Термины «подкачка» и «виртуальная память» часто используются для обозначения одного и того же. Однако разбиение на страницы может также относиться к концепции разделения памяти на куски одинакового размера - страницы. Ответ на ваш вопрос зависит от того, что вы имеете в виду под пейджингом. ;)
person BjoernD    schedule 04.08.2012
comment
спасибо за ответ, у меня есть пара вопросов: в вопросе 2 вы упоминаете позиционно-независимый код, означает ли это, что этот код ожидает, что этот код будет перемещен загрузчиком еще раз во время загрузки, то есть перемещение во время загрузки? в вопросе 3, так что адреса, назначенные исполняемому файлу компоновщиком при перемещении во время компоновки, будут использоваться в качестве физических адресов во время загрузки? в вопросе 5 под разбивкой по страницам я имел в виду перенос страницы из вторичной памяти в ОЗУ по запросу в результате ошибки страницы, но, как вы упомянули в пункте 4, ошибки страницы без виртуальной памяти нет, следовательно, нет и подкачки по запросу. ? - person mangusta; 05.08.2012
comment
2. Код PIC: да, перемещение выполняется динамическим компоновщиком (libld.so в Linux). 3. Да. 5. Пейджинг по запросу затруднен, если у вас нет ошибок страниц в качестве индикатора фактического спроса. Ваше приложение должно обо всем позаботиться само. - person BjoernD; 05.08.2012
comment
5. Думаю, именно поэтому исполняемый файл обычно должен быть полностью загружен в память, если не используется виртуальная память. - person mangusta; 05.08.2012
comment
Что ж, зависит. Вам, по крайней мере, потребуется загрузить код, который затем отвечает за загрузку всего остального кода (например, драйвер диска + двоичный загрузчик + все необходимые им компоненты). - person BjoernD; 05.08.2012
comment
еще один вопрос, если вы не возражаете :) вы, наверное, слышали о vxworks os, он может использовать одну из двух моделей виртуальной памяти: плоскую, которая назначает каждому процессу определенный диапазон виртуального адресного пространства, и перекрывающаяся, которая назначает одинаковые диапазоны виртуального адресного пространства для всех процессов. Я не совсем понимаю плоскую модель ВМ: кажется, что она ведет себя так, как будто виртуальной памяти вообще нет, тогда какой смысл использовать эту модель? - person mangusta; 05.08.2012
comment
Если оборудование поддерживает виртуальную память, то обязательно ли ОС также должна поддерживать виртуальную машину? если это так, то мы можем оправдать использование плоской модели: мы используем виртуальную машину, хотя на самом деле мы не получаем от нее никакой выгоды, мы просто должны использовать ее, потому что оборудование было разработано для использования виртуальной машины. - person mangusta; 05.08.2012
comment
Понятия не имею о vxWorks. Но ваше описание «плоской» модели звучит как операционная система с единым адресным пространством - поищите ее в Интернете, если не возражаете. - person BjoernD; 05.08.2012