Разница между логическими и физическими адресами?

Я читаю концепцию операционных систем, и я на 8-й главе! Однако я мог бы использовать некоторые разъяснения или заверения в том, что мое понимание правильно.

логические адреса: логические адреса генерируются процессором, в соответствии с книгой. Что именно это означает? (В системе адресов, сгенерированных методом выполнения..) Я предполагаю, что когда код компилируется для программы, Программа имеет нет идея, где код будет загружен в память. Все компилятор делает настройте общий эскиз макета программы и как должно быть выложено изображение, но не назначайте ему никаких реальных адресов. Когда программа выполняется, процессор берет этот образ макета, который сделал компилятор, и выдает некоторые адреса (логические) тем, которые генерируются из кода.

физические адреса: физические адреса не генерируются до тех пор, пока процессор не генерирует некоторый набор логических адресов (состоящий из базового адреса и смещения). Логическое адреса проходят через MMU или другое устройство, и где-то вдоль линии логические адреса сопоставляются с физическими адресами ОЗУ.

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

не использует ли логические адреса, преобразованные в физический адрес накладывает два шага вместо одного к одному, и поэтому больше над головой?

где же тогда находятся логические адреса после генерации? Они могут существовать в регистре на процессоре, пока процессор обслуживает процесс, но до и после, куда они идут? Я понимаю, что это зависит от реализации. Я предполагаю, что они могут храниться в каком-то специальном пространстве регистра или буфере на CPU, таком как TLB, правильно? Если нет, то таблица может существовать в самой оперативной памяти , и CPU содержит только указатель / адрес на базовый адрес таблицы в ОЗУ, правильно?

кажется, что удержание адресов в ОЗУ контрпродуктивно для целей адресов логической памяти. Я могу только предположить, что мое понимание неверно.

8 ответов


этот ответ не является исчерпывающим, но он может объяснить это достаточно, чтобы сделать вещи клика.

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

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

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

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

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

в старые добрые времена, когда физические адреса были всем, что у вас было, код должен был быть перемещаемым (или фиксированным при загрузке), так как он мог загружаться в любом месте. С виртуальным память, этот код (и данные) может быть в логической памяти 50 в дюжине различных процессов одновременно - это актуально физическая адрес будет другой.

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

Это, конечно, менее эффективно, чем чисто физическая адресная среда, но производители ЦП пытаются сделать ее максимально эффективной, поскольку она используется в больших количествах. Преимущества далеко перевешивают недостатки.


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


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

физический адрес: - когда наш процессор создает процесс и решает нашу проблему, мы храним данные во вторичной памяти через адрес, называемый физическим адресом


  1. адрес, сгенерированный ЦП, обычно называют логическим адресом. Набор всех логических адресов, генерируемых программой, называется логическим адресным пространством. В то время как адрес, видимый блоком памяти, то есть загруженный в регистр адресов памяти, обычно называют физическим адресом. Набор всех физических адресов, соответствующих логическим адресам, называется физическим адресным пространством.
  2. время компиляции и методы привязки адресов во время загрузки генерируют идентичные логические и физические адреса. Однако в схеме привязки адресов во время выполнения логическое и физическое адресные пространства различаются.
  3. пользовательская программа никогда не видит физических адресов. Программа создает указатель на логический адрес, скажем 346, сохраняет его в памяти, манипулирует им, сравнивает его с другими логическими адресами - все как число 346. Только когда логический адрес используется в качестве адреса памяти, он перемещается относительно в регистр базы / перемещения. Аппаратное устройство отображения памяти, называемое блоком управления памятью (MMU), преобразует логические адреса в физические адреса.
  4. логические адреса варьируются от 0 до макс. Пользовательская программа, генерирующая логический адрес, считает, что процесс выполняется в местоположениях от 0 до max. Логические адреса должны быть сопоставлены с физическими адресами перед их использованием. Физические адреса варьируются от (R+0) до (R + max) Для значения регистра базы/перемещения Р.
  5. пример: enter image description here Сопоставление логических и физических адресов с помощью блока управления памятью (MMU) и регистра перемещения/базы данных Значение в регистре перемещения / базы добавляется к каждому логическому адресу, сгенерированному пользовательским процессом в момент его отправки в память, для создания соответствующего физического адреса. На приведенном выше рисунке базовое значение / перемещение равно 14000, затем попытка пользователя получить доступ к местоположению 346 сопоставляется с 14346.

логическое Vs физическое адресное пространство

адрес, сгенерированный процессором, обычно рассматривается как логический адрес, тогда как адрес,видимый блоком памяти, который загружен в регистр адресов памяти, обычно рассматривается как физический адрес.Привязка адресов времени компиляции и времени загрузки создает идентичные логические и физические адреса.Однако схема привязки адресов времени выполнения приводит к различиям в логическом и физическом адреса.

набор всех логических адресов, генерируемых программой, называется логическим адресным пространством, в то время как набор всех физических адресов, соответствующих этим логическим адресам, является физическим адресным пространством.Теперь сопоставление времени выполнения с виртуального адреса на физический адрес выполняется аппаратным устройством, известным как блок управления памятью.Здесь в случае сопоставления базовый регистр известен как регистр перемещения.Значение в регистре перемещения добавляется к адресу генерируется пользовательским процессом в момент его отправки в память.Разберемся в этой ситуации с помощью примера: если базовый регистр содержит значение 1000,то попытка пользователя обратиться к местоположению 0 динамически перемещается в местоположение 1000, доступ к местоположению 346 сопоставляется с местоположением 1346.

пользовательская программа никогда не видит реального физического адресного пространства, она всегда имеет дело с логическими адресами.Поскольку у нас есть два разных типа адресов, логический адрес в диапазон(от 0 до max) и физические адреса в диапазоне (от R до R+max), где R-значение регистра перемещения.Пользователь генерирует только логические адреса и считает, что процесс выполняется в местоположении от 0 до max.Как видно из приведенного выше текста, пользовательская программа предоставляет только логические адреса, эти логические адреса должны быть сопоставлены с физическим адресом перед их использованием.


логический адрес является ссылкой на расположение памяти, независимо от текущего назначения данных в память. Физический адрес или абсолютный адрес-это фактическое местоположение в основной памяти.

Это в главе 7.2 Stallings.


насколько мне помнится, физический адрес является явным, установленным в stone address в памяти, а логический адрес состоит из базового указателя и смещения.

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


логический адрес-это адрес, по которому элемент (ячейка памяти, элемент хранения, сетевой узел), как представляется, находится с точки зрения выполняющейся прикладной программы.