Что такое привязка адреса?

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

Да, виртуальная машина отлично подходит для такого рода разработки, и именно ее я использую, когда работаю над модулями ядра. ВМ хорошо изолирует вашу тестовую среду от работающей системы.

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

2
23.05.2018, 12:45
2 ответа

La explicación de Quora me parece bastante confusa y mezcla una serie de conceptos.

El término "enlace de direcciones", en el contexto de las direcciones de memoria (en oposición a las direcciones de red, por ejemplo ), proviene de el artículo de 1972 de Leon Presser y John R. White sobre enlazadores y cargadores(ver también la entrada ACM ), donde se define de la siguiente manera:

The translation or mapping of a logical into a physical address is called address binding.

Una lectura rápida podría dar la impresión de que se trata de direcciones lógicas y físicas desde una perspectiva de gestión de memoria, pero ese no es el caso; en el papel, las direcciones físicas son direcciones de "información" en la memoria, y las direcciones lógicas son los símbolos utilizados para referirse a esa información. Por lo tanto, el enlace de direcciones es lo que comúnmente se conoce hoy en día como reubicación de símbolo (o puntero ), y como usted dice, esto puede suceder en tiempo de compilación (al generar un binario estático, por ejemplo ),en el momento de la carga (cuando el enlazador dinámico resuelve los símbolos en una biblioteca compartida ), o en el momento de la ejecución (cuando el programa en ejecución resuelve los símbolos manualmente, p. usandodlopen).

5
27.01.2020, 21:55

Эта статья сбивает с толку. Самая первая часть этой статьи кажется точной. Виртуальные адреса используются ядром ЦП, они сопоставляются MMU с физическими адресами, а затем используются при переходе в ОЗУ. Однако я никогда не слышал, чтобы это называлось «привязкой адреса». «Отображение» было бы более распространенным, но это просто проблема терминологии.

Затем в середине второго абзаца есть утверждение, относящееся к описанному выше процессу:

This type of binding requires the compiler to generate relocatable or offset based addresses from the source code.

Это вздор.

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

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

Все это происходит в представлении процесса о виртуальном адресном пространстве. Он нуждается в поддержке компилятора, поскольку сам код должен знать об этом.

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

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

(Все вышеизложенное основано на том, что я знаю о системах x86. Другие системы могут отличаться.)

0
27.01.2020, 21:55

Теги

Похожие вопросы