Різниця між Linker і Loader

Автор: Laura McKinney
Дата Створення: 3 Квітень 2021
Дата Оновлення: 7 Травень 2024
Anonim
M2 NVMe или SATA SSD Различие и что выбрать
Відеоролик: M2 NVMe или SATA SSD Различие и что выбрать

Зміст


Linker і Loader - це корисні програми, які відіграють головну роль у виконанні програми. Вихідний код програми перед виконанням передається через компілятор, асемблер, лінкер, завантажувач у відповідному порядку. З одного боку, де лінкер вводить коди об'єктів, згенеровані асемблером, і об'єднують їх для створення виконавчого модуля. З іншого боку, навантажувач завантажує цей виконуваний модуль в основну пам'ять для виконання. Давайте обговоримо різницю між Linker і завантажувачем за допомогою таблиці порівняння.

  1. Порівняльна діаграма
  2. Визначення
  3. Ключові відмінності
  4. Висновок

Порівняльна діаграма

Основа для порівнянняЛінкерНавантажувач
ОсновніВін генерує виконуваний модуль вихідної програми.Він завантажує виконуваний модуль в основну пам'ять.
Вхідні даніВ якості введення береться об'єктний код, сформований асемблером.Він займає виконуваний модуль, згенерований лінкером.
ФункціяВін об'єднує всі об'єктні модулі вихідного коду для створення виконуваного модуля.Він виділяє адреси виконуваному модулю в основній пам'яті для виконання.
Тип / підхідРедактор зв'язків, динамічний лінкер.Абсолютне завантаження, переміщувальне завантаження та динамічне завантаження під час роботи.


Визначення Linker

Ассемблер генерує об'єктний код вихідної програми та передає його в лінкер. Лінкер бере цей об'єктний код і генерує виконуваний код для програми та передайте її навантажувачу.

Мова на високому рівні має деякі програми вбудовані бібліотеки і файли заголовків. Програма-джерело може містити деякі функції бібліотеки, визначення яких зберігається у вбудованих бібліотеках. Лінкер пов'язує ці функції з вбудованими бібліотеками. Якщо вбудованих бібліотек не знайдено, він повідомляє компілятору, а потім компілятор генерує помилку.

Іноді великі програми поділяються на підпрограми, які називаються модулі. Тепер, коли ці модулі складаються та збираються, створюються об'єктні модулі вихідної програми. Зв'язок несе відповідальність за об'єднання / зв'язання всіх об'єктних модулів для створення єдиного виконуваного файлу вихідної програми. У нас є два типи лінкерів.


Редактор зв’язків: Це лінкер, який генерує переміщуваний виконуваний модуль.

Динамічний лінкер: Він відкладає / відкладає зв'язок деяких зовнішніх модулів, поки не буде сформований модуль навантаження / виконуваний модуль. Тут з'єднання здійснюється під час завантаження або часу виконання.

Визначення навантажувача

Оскільки програма, яку зараз потрібно виконати, повинна знаходитися в основній пам'яті комп'ютера. Це відповідальність навантажувач, програма в операційній системі для завантаження виконуваного файлу / модуля програми, що генерується лінкером, в основну пам'ять для виконання. Він виділяє простір пам'яті виконуваному модулю в основній пам'яті.

Існує три види підходу до завантаження:

  • Абсолютне завантаження
  • Переносне завантаження
  • Динамічне завантаження під час виконання

Абсолютне завантаження: Цей підхід завантажує виконуваний файл програми в a головне місце пам'яті щоразу. Але це є деякі недоліки як програміст повинен знати стратегію призначення для завантаження модулів в основну пам'ять. У випадку, якщо програма має бути змінена, передбачаючи деяку вставку та видалення в програму, то всі адреси програми повинні бути змінені.

Переміщення завантаження: У такому підході компілятор чи асемблер робить не створювати фактичну основну адресу пам'яті. Він створює відносні адреси.

Динамічне завантаження часу виконання: При такому підході абсолютна адреса програми формується тоді, коли фактично виконується інструкція виконуваного модуля. Це дуже гнучко, в нього можна завантажувати завантажуваний модуль / виконуваний модуль будь-який регіон основної пам'яті. Програма виконання може бути перервана між ними і може бути замінена на диск і повернутися до основної пам'яті цього разу за іншою основною адресою пам'яті.

  1. Ключова відмінність між лінкером і завантажувачем полягає в тому, що лінкер генерує виконуваний файл файл програми, тоді як завантажувач завантажує виконуваний файл, отриманий від лінкера, в основна пам'ять для виконання.
  2. Лінкер приймає домен об'єктний модуль програми, згенерованої асемблером. Однак навантажувач приймає дози виконуваний модуль згенерований лінкером.
  3. Лінкер поєднує весь об'єктний модуль програми для генерації виконувані модулі він також пов'язує функція бібліотеки в модулі об'єкта до вбудовані бібліотеки мови програмування високого рівня. З іншого боку, вантажник виділяє простір виконуваному файлу модуль в основній пам'яті.
  4. Лінкер можна класифікувати як редактор зв’язків, і динамічний лінкер тоді як навантажувач можна класифікувати як абсолютний навантажувач, пересувний навантажувач і динамічний завантажувач.

Висновок:

Лінкер бере об'єктивні модулі програми з асемблера і зв'язує їх між собою для створення виконавчого модуля програми. Потім виконуваний модуль завантажується завантажувачем у основну пам'ять для виконання.