Різниця між Linker і Loader
Зміст
Linker і Loader - це корисні програми, які відіграють головну роль у виконанні програми. Вихідний код програми перед виконанням передається через компілятор, асемблер, лінкер, завантажувач у відповідному порядку. З одного боку, де лінкер вводить коди об'єктів, згенеровані асемблером, і об'єднують їх для створення виконавчого модуля. З іншого боку, навантажувач завантажує цей виконуваний модуль в основну пам'ять для виконання. Давайте обговоримо різницю між Linker і завантажувачем за допомогою таблиці порівняння.
- Порівняльна діаграма
- Визначення
- Ключові відмінності
- Висновок
Порівняльна діаграма
Основа для порівняння | Лінкер | Навантажувач |
---|---|---|
Основні | Він генерує виконуваний модуль вихідної програми. | Він завантажує виконуваний модуль в основну пам'ять. |
Вхідні дані | В якості введення береться об'єктний код, сформований асемблером. | Він займає виконуваний модуль, згенерований лінкером. |
Функція | Він об'єднує всі об'єктні модулі вихідного коду для створення виконуваного модуля. | Він виділяє адреси виконуваному модулю в основній пам'яті для виконання. |
Тип / підхід | Редактор зв'язків, динамічний лінкер. | Абсолютне завантаження, переміщувальне завантаження та динамічне завантаження під час роботи. |
Визначення Linker
Ассемблер генерує об'єктний код вихідної програми та передає його в лінкер. Лінкер бере цей об'єктний код і генерує виконуваний код для програми та передайте її навантажувачу.
Мова на високому рівні має деякі програми вбудовані бібліотеки і файли заголовків. Програма-джерело може містити деякі функції бібліотеки, визначення яких зберігається у вбудованих бібліотеках. Лінкер пов'язує ці функції з вбудованими бібліотеками. Якщо вбудованих бібліотек не знайдено, він повідомляє компілятору, а потім компілятор генерує помилку.
Іноді великі програми поділяються на підпрограми, які називаються модулі. Тепер, коли ці модулі складаються та збираються, створюються об'єктні модулі вихідної програми. Зв'язок несе відповідальність за об'єднання / зв'язання всіх об'єктних модулів для створення єдиного виконуваного файлу вихідної програми. У нас є два типи лінкерів.
Редактор зв’язків: Це лінкер, який генерує переміщуваний виконуваний модуль.
Динамічний лінкер: Він відкладає / відкладає зв'язок деяких зовнішніх модулів, поки не буде сформований модуль навантаження / виконуваний модуль. Тут з'єднання здійснюється під час завантаження або часу виконання.
Визначення навантажувача
Оскільки програма, яку зараз потрібно виконати, повинна знаходитися в основній пам'яті комп'ютера. Це відповідальність навантажувач, програма в операційній системі для завантаження виконуваного файлу / модуля програми, що генерується лінкером, в основну пам'ять для виконання. Він виділяє простір пам'яті виконуваному модулю в основній пам'яті.
Існує три види підходу до завантаження:
- Абсолютне завантаження
- Переносне завантаження
- Динамічне завантаження під час виконання
Абсолютне завантаження: Цей підхід завантажує виконуваний файл програми в a головне місце пам'яті щоразу. Але це є деякі недоліки як програміст повинен знати стратегію призначення для завантаження модулів в основну пам'ять. У випадку, якщо програма має бути змінена, передбачаючи деяку вставку та видалення в програму, то всі адреси програми повинні бути змінені.
Переміщення завантаження: У такому підході компілятор чи асемблер робить не створювати фактичну основну адресу пам'яті. Він створює відносні адреси.
Динамічне завантаження часу виконання: При такому підході абсолютна адреса програми формується тоді, коли фактично виконується інструкція виконуваного модуля. Це дуже гнучко, в нього можна завантажувати завантажуваний модуль / виконуваний модуль будь-який регіон основної пам'яті. Програма виконання може бути перервана між ними і може бути замінена на диск і повернутися до основної пам'яті цього разу за іншою основною адресою пам'яті.
- Ключова відмінність між лінкером і завантажувачем полягає в тому, що лінкер генерує виконуваний файл файл програми, тоді як завантажувач завантажує виконуваний файл, отриманий від лінкера, в основна пам'ять для виконання.
- Лінкер приймає домен об'єктний модуль програми, згенерованої асемблером. Однак навантажувач приймає дози виконуваний модуль згенерований лінкером.
- Лінкер поєднує весь об'єктний модуль програми для генерації виконувані модулі він також пов'язує функція бібліотеки в модулі об'єкта до вбудовані бібліотеки мови програмування високого рівня. З іншого боку, вантажник виділяє простір виконуваному файлу модуль в основній пам'яті.
- Лінкер можна класифікувати як редактор зв’язків, і динамічний лінкер тоді як навантажувач можна класифікувати як абсолютний навантажувач, пересувний навантажувач і динамічний завантажувач.
Висновок:
Лінкер бере об'єктивні модулі програми з асемблера і зв'язує їх між собою для створення виконавчого модуля програми. Потім виконуваний модуль завантажується завантажувачем у основну пам'ять для виконання.