
Разве существование компоновщика (для выполнения компоновки после компиляции) и загрузчика (для выполнения исполняемого файла) не зависит от операционных систем, таких как Linux? (Я думал о компоновщике и загрузчике в Linux как о предоставляемых ОС или программном обеспечении, как и другие прикладные программы. Теперь я думаю, что они очень особенные и разные. Они могут быть одинаковыми, независимо от того, какая установлена ОС.)
Существуют ли компоновщик и загрузчик на уровне машинного языка, т.е. на уровне ISA? (На этом уровне ОС нет.) Или на уровне языка ассемблера?
Правильно ли рассматривать ОС как программную библиотеку (библиотеки) с точки зрения программирования?
Спасибо.
Я хочу знать, где разместить компоновщик и загрузчик на уровнях/слоях компьютерной системы.
Для получения информации об уровнях компьютерной системы см. книгу Нисана «Элементы компьютерных систем»:
Для привязки и загрузки см.Компьютерные системы: точка зрения программиста
решение1
Разве существование компоновщика (для выполнения компоновки после компиляции) и загрузчика (для выполнения исполняемого файла) не зависит от операционных систем, таких как Linux? (Я думал о компоновщике и загрузчике в Linux как о предоставляемых ОС или программном обеспечении, как и другие прикладные программы. Теперь я думаю, что они очень особенные и разные.)
Компоновщик и загрузчик имеют определенные цели, как и любое другое приложение. Они важны для построения статических программ и построения и загрузки динамических программ, но они являются «нормальными» приложениями (или библиотеками, в случае загрузчика времени выполнения) —то естьХотя они и сложны, можно утверждать, что они не полагаются на специальную поддержку со стороны операционной системы.
Таким образом, можно связать программы для одной операционной системы с другой (напримерсоздавать программы Windows на Linux, или наоборот), и загружать динамически связанные программы, созданные для одной системы, на другую (см. Wine). Основные требования, предъявляемые к операционной системе, заключаются в том, чтобы она предоставляла какой-либо способ загрузки нового исполняемого контента (то естьпозволяет работающей программе добавлять к себе исполняемую память), а также обеспечивает достаточный контроль над виртуальным адресным пространством для удовлетворения требований программы (в частности, базовых адресов для загрузки исполняемых файлов и библиотек).
Существуют ли компоновщик и загрузчик на уровне машинного языка, т.е. на уровне ISA? (На этом уровне ОС нет.) Или на уровне языка ассемблера?
Я не уверен, что привело к этим вопросам, но линкеры работают с символами и адресами. Они работают с объектными файлами, которые содержат таблицы импортированных и экспортированных символов, и записи перемещения, в которые вносятся значения, вычисленные линкером.
Правильно ли рассматривать ОС как библиотеку (библиотеки) программирования?
Это очень ограничивает. Операционная система предоставляет некоторые службы приложениям, работающим на ней, но она делает гораздо больше, даже в случае действительно простых операционных систем (8-битные микро, MS-DOS и т. д.); например, она обрабатывает аппаратные прерывания, планирует процессы (для многозадачных систем), контролирует разрешения на доступ (для многопользовательских систем с контролем доступа)...
У меня сложилось впечатление, что диаграмма, на которую вы ссылаетесь, больше полезна как карта книги, чем как способ понимания архитектуры компьютера.