Разница между логическими и физическими адресами?
Я читаю концепцию операционных систем, и я на 8-й главе! Однако я мог бы использовать некоторые разъяснения или заверения в том, что мое понимание правильно.
логические адреса: логические адреса генерируются процессором, в соответствии с книгой. Что именно это означает? (В системе адресов, сгенерированных методом выполнения..) Я предполагаю, что когда код компилируется для программы, Программа имеет нет идея, где код будет загружен в память. Все компилятор делает настройте общий эскиз макета программы и как должно быть выложено изображение, но не назначайте ему никаких реальных адресов. Когда программа выполняется, процессор берет этот образ макета, который сделал компилятор, и выдает некоторые адреса (логические) тем, которые генерируются из кода.
физические адреса: физические адреса не генерируются до тех пор, пока процессор не генерирует некоторый набор логических адресов (состоящий из базового адреса и смещения). Логическое адреса проходят через MMU или другое устройство, и где-то вдоль линии логические адреса сопоставляются с физическими адресами ОЗУ.
в чем же тогда разница? Я вижу одно преимущество. Использование логических адресов дает большую свободу приложениям. Если бы физические адреса были жестко закодированы, то успех программы сильно зависел бы от физического компьютера, доступных адресов ОЗУ и т. д.
не использует ли логические адреса, преобразованные в физический адрес накладывает два шага вместо одного к одному, и поэтому больше над головой?
где же тогда находятся логические адреса после генерации? Они могут существовать в регистре на процессоре, пока процессор обслуживает процесс, но до и после, куда они идут? Я понимаю, что это зависит от реализации. Я предполагаю, что они могут храниться в каком-то специальном пространстве регистра или буфере на CPU, таком как TLB, правильно? Если нет, то таблица может существовать в самой оперативной памяти , и CPU содержит только указатель / адрес на базовый адрес таблицы в ОЗУ, правильно?
кажется, что удержание адресов в ОЗУ контрпродуктивно для целей адресов логической памяти. Я могу только предположить, что мое понимание неверно.
8 ответов
этот ответ не является исчерпывающим, но он может объяснить это достаточно, чтобы сделать вещи клика.
в системах виртуальной памяти существует разрыв между логическим и физическим адресами.
приложению может быть задано виртуальное адресное пространство (скажем) 4G. Это его полезная память, и он может использовать ее по своему усмотрению. Это хороший непрерывный блок памяти (с точки зрения приложения).
однако, это не только приложение работает, и ОС должна посредничать между ними всеми. Под этой хорошей смежной моделью происходит много сопоставлений для преобразования логических в физические адреса.
с этим сопоставлением ОС и оборудование (я просто назову их нижними слоями отсюда) могут свободно помещать страницы приложений в любом месте (либо в физической памяти, либо заменены на вторичное хранилище).
когда приложение пытается получить доступ к памяти по логический адрес 50, нижние уровни могут перевести это на физический адрес с помощью таблиц перевода. И, если он пытается получить доступ к логической памяти, которая была заменена на диск, ошибка страницы поднимается, и нижние уровни могут вернуть соответствующие данные в память, при любом физическая адрес он хочет.
в старые добрые времена, когда физические адреса были всем, что у вас было, код должен был быть перемещаемым (или фиксированным при загрузке), так как он мог загружаться в любом месте. С виртуальным память, этот код (и данные) может быть в логической памяти 50 в дюжине различных процессов одновременно - это актуально физическая адрес будет другой.
его можно даже разделить так, что один физическая copy существует в адресном пространстве сразу нескольких процессов. Это суть общего кода (поэтому мы не используем больше физической памяти, чем нам нужно) и общей памяти, чтобы обеспечить легкую межпроцессную связь).
Это, конечно, менее эффективно, чем чисто физическая адресная среда, но производители ЦП пытаются сделать ее максимально эффективной, поскольку она используется в больших количествах. Преимущества далеко перевешивают недостатки.
логический адрес-это адрес относительно программы .Он говорит, сколько памяти займет конкретный процесс, а не сказать, что будет точное местоположение процесса и это точное местоположение будет сгенерировано с помощью некоторого сопоставления, и известен как физический адрес
логический адрес - логический адрес, генерируемый процессором . когда мы даем проблему компьютеру, тогда наш компьютер передает проблему процессору через логический адрес, который мы не видим, этот адрес называется логическим адресом .
физический адрес: - когда наш процессор создает процесс и решает нашу проблему, мы храним данные во вторичной памяти через адрес, называемый физическим адресом
- адрес, сгенерированный ЦП, обычно называют логическим адресом. Набор всех логических адресов, генерируемых программой, называется логическим адресным пространством. В то время как адрес, видимый блоком памяти, то есть загруженный в регистр адресов памяти, обычно называют физическим адресом. Набор всех физических адресов, соответствующих логическим адресам, называется физическим адресным пространством.
- время компиляции и методы привязки адресов во время загрузки генерируют идентичные логические и физические адреса. Однако в схеме привязки адресов во время выполнения логическое и физическое адресные пространства различаются.
- пользовательская программа никогда не видит физических адресов. Программа создает указатель на логический адрес, скажем 346, сохраняет его в памяти, манипулирует им, сравнивает его с другими логическими адресами - все как число 346. Только когда логический адрес используется в качестве адреса памяти, он перемещается относительно в регистр базы / перемещения. Аппаратное устройство отображения памяти, называемое блоком управления памятью (MMU), преобразует логические адреса в физические адреса.
- логические адреса варьируются от 0 до макс. Пользовательская программа, генерирующая логический адрес, считает, что процесс выполняется в местоположениях от 0 до max. Логические адреса должны быть сопоставлены с физическими адресами перед их использованием. Физические адреса варьируются от (R+0) до (R + max) Для значения регистра базы/перемещения Р.
- пример: Сопоставление логических и физических адресов с помощью блока управления памятью (MMU) и регистра перемещения/базы данных Значение в регистре перемещения / базы добавляется к каждому логическому адресу, сгенерированному пользовательским процессом в момент его отправки в память, для создания соответствующего физического адреса. На приведенном выше рисунке базовое значение / перемещение равно 14000, затем попытка пользователя получить доступ к местоположению 346 сопоставляется с 14346.
логическое Vs физическое адресное пространство
адрес, сгенерированный процессором, обычно рассматривается как логический адрес, тогда как адрес,видимый блоком памяти, который загружен в регистр адресов памяти, обычно рассматривается как физический адрес.Привязка адресов времени компиляции и времени загрузки создает идентичные логические и физические адреса.Однако схема привязки адресов времени выполнения приводит к различиям в логическом и физическом адреса.
набор всех логических адресов, генерируемых программой, называется логическим адресным пространством, в то время как набор всех физических адресов, соответствующих этим логическим адресам, является физическим адресным пространством.Теперь сопоставление времени выполнения с виртуального адреса на физический адрес выполняется аппаратным устройством, известным как блок управления памятью.Здесь в случае сопоставления базовый регистр известен как регистр перемещения.Значение в регистре перемещения добавляется к адресу генерируется пользовательским процессом в момент его отправки в память.Разберемся в этой ситуации с помощью примера: если базовый регистр содержит значение 1000,то попытка пользователя обратиться к местоположению 0 динамически перемещается в местоположение 1000, доступ к местоположению 346 сопоставляется с местоположением 1346.
пользовательская программа никогда не видит реального физического адресного пространства, она всегда имеет дело с логическими адресами.Поскольку у нас есть два разных типа адресов, логический адрес в диапазон(от 0 до max) и физические адреса в диапазоне (от R до R+max), где R-значение регистра перемещения.Пользователь генерирует только логические адреса и считает, что процесс выполняется в местоположении от 0 до max.Как видно из приведенного выше текста, пользовательская программа предоставляет только логические адреса, эти логические адреса должны быть сопоставлены с физическим адресом перед их использованием.
логический адрес является ссылкой на расположение памяти, независимо от текущего назначения данных в память. Физический адрес или абсолютный адрес-это фактическое местоположение в основной памяти.
Это в главе 7.2 Stallings.
насколько мне помнится, физический адрес является явным, установленным в stone address в памяти, а логический адрес состоит из базового указателя и смещения.
причина в том, как вы в основном указали. Это позволяет не только сегментировать программы и процессы на потоки и данные, но и динамическую загрузку таких программ, а также учитывать, по крайней мере, псевдопараллелизм, без какого-либо фактического переплетения инструкций в памяти, которые необходимо принять место.
логический адрес-это адрес, по которому элемент (ячейка памяти, элемент хранения, сетевой узел), как представляется, находится с точки зрения выполняющейся прикладной программы.