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