2013-04-07 3 views
0

В «Операционные системы понятия» книга Silberchatz, это говоритShared код логический адрес в процессе адресного пространства

«Общий код должен появиться в одном месте в логическом адресном пространстве всех процессов»,

Почему он должен появляться в одном месте? Я думал, что для каждого процесса у нас есть отдельная таблица страниц, которая позволяет иметь код общего кода в разных логических адресах!

ответ

1

Код машины редко полностью не зависит от положения. Если у вас есть код, который был скомпилирован для работы, если он находится по адресу 0x10000 (логический/виртуальный), и вы переместите его на адрес 0x70000 (логический/виртуальный), он не будет работать в новом месте.

Таблицы страниц не могут помочь. Что может быть режимом адресации кода/данных относительно instruction pointer (AKA program counter). Некоторые процессоры имеют его, некоторые из них не имеют его, но некоторые другие имеют его наполовину испеченные (например, они могут иметь его только для инструкций, которые передают управление (например, /call) в другие места в коде, но ничего для данных (например, move)).

+0

От того, что я делаю из того, что вы сказали, Когда общий код должен ссылаться сам, ему нужно знать пространство логического адреса, в котором он находится. Поскольку общий код не может изменить сам для каждого процесса, к которому он обращается, это означает, что логическое адресное пространство должно быть постоянным во всех общих процессах. Не означает ли это, что вы не можете использовать 2 части общего кода, которые используют одно и то же логическое адресное пространство? – 2bigpigs

+1

@ 2bigpigs Общий код может работать с данными, расположенными в разных местах, если он спроектирован и скомпилирован таким образом, что в каждом адресном пространстве вызывающий абонент отправляет его с адресом данных, или указанный адрес может быть каким-то образом получен из среды (например, TLS и тому подобное). Очевидно, что вы не можете пересекать код/​​данные в одном и том же адресном пространстве одновременно. Но я думаю, что общий код не обязательно должен быть разделен. Если вы не можете иметь библиотеку по одному адресу в одном адресном пространстве, как и во всех других, вы можете иметь другую копию библиотеки, перемещенную в другое место. –

Смежные вопросы