Как во время выполнения выполняется привязка адреса в ОС? - PullRequest
5 голосов
/ 01 июня 2011

Я читаю книгу Операционная система Гальвина.В привязке адресов управления памятью говорится о трех типах привязки адресов.время компиляции, время загрузки, время выполнения.А по поводу привязки адреса времени выполнения: «Физический адрес вычисляется во время выполнения».Но мой вопрос заключается в том, что эти вычисления для физического адреса предназначены для базового адреса памяти, чтобы загрузить процесс в память.Чтобы выполнить процесс первым, он должен быть загружен в память.Для этого требуется физический адрес памяти.Тогда как во время выполнения вычисляются эти адреса?Я в замешательстве.

Могут ли некоторые объяснить это.

Спасибо

Ответы [ 3 ]

14 голосов
/ 05 октября 2012

Вы правы в своем мышлении.Разница между временем загрузки и привязкой во время выполнения состоит в том, что во время выполнения каждый раз, когда происходит поиск в памяти, он проходит через «регистр перемещения», который похож на базовый регистр, и затем вы добавляете смещение.

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

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

Привязка во время загрузки приводит к сопоставлению логических / физических адресов, но во время выполнения приводит к разным логическим/ физические адреса.

Надеюсь, вам это понятнее.Я только начал изучать управление памятью:)

0 голосов
/ 06 июля 2013

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

0 голосов
/ 02 июня 2011

Когда говорится, что фактический базовый адрес генерируется во время выполнения, это означает, что адрес в ОЗУ (физический адрес) определяется во время выполнения из виртуального адреса с использованием MMU. Все это преобразование адресов выполняется на лету. Для выполнения процесса должен быть известен начальный виртуальный адрес. Когда процесс должен быть запущен, его виртуальная таблица страниц загружается в MMU, а затем MMU быстро вычисляет физический адрес (в ОЗУ), и выполнение продолжается, когда MMU генерирует физические адреса из таблиц страниц. Подумайте о прочтении современных операционных систем Tanenbaum. Я нахожу это лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...