Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СП_від_Мархивки.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
498.69 Кб
Скачать

Алгоритм виконання 2-го перегляду.

  1. 2-й перегляд завантажувача

  2. На початок списку імен об'єктних модулів.

  3. Вибірка чергового імені зі списку об'єктних модулів. Якщо весь список опрацьований, то перехід на закінчення 2-го перегляду.

  4. Створення для модуля пустих локальних таблиць зовнішніх імен і переміщень.

  5. Читання заголовку чергового запису об'єктного модуля, якщо всі записи модуля прочитані - перехід до опрацювання переміщень у модулі.

  6. Читання іншої частини запису (розмір запису міститься в її заголовку).

  7. Розгалуження в залежності від типу запису.

  8. Для кодового запису зчитується відносна адреса запису і переводиться у фактичну.

  9. Тіло кодового запису зчитується і розміщається в пам'яті по фактичній адресі.

  10. Для запису зв'язування перебираються елементи таблиці імен.

  11. Опрацювання розгалужується в залежності від типу імені.

  12. Для внутрішніх глобальних імен чи сегментів відносна адреса переводиться у фактичну.

  13. Зовнішнє ім’я шукається в глобальній таблиці зовнішніх імен.

  14. Якщо ім'я не знайдене в глобальній таблиці, видається повідомлення про помилку.

  15. Якщо ім'я знайдене в глобальній таблиці, то значення адреси з глобальної таблиці стає значенням цього імені.

  16. Елемент з відкоректованою адресою заноситься в локальну таблицю імен.

  17. Для запису переміщення перебираються елементи таблиці переміщень.

  18. Відносна адреса в елементі заміняється на фактичну...

  19. ... і елемент додається в таблицю переміщень.

  20. Після того, як весь модуль прочитаний, виконується перебір таблиці переміщень модуля.

  21. Для кожного елемента таблиці переміщень, вибирається з локальної таблиці імен, зв’язане з іменем значення адреси.

  22. З коду програми вибирається значення адреси, згідно довжини

  23. Над обраним кодом і адресою виконується операція модифікації і результат записується на місце коду.

  24. Після перебору всієї таблиці переміщень, звільняються таблиця переміщень і локальна таблиця імен модуля, і керування передається на обробку наступного модуля.

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

Редактори зв’язків (компонувальники).

Загальні принципи компонування

Компонуванням (linking) називають процес створення фізичного або логічного виконуваного файла (модуля) із набору об'єктних файлів і файлів бібліотек для подальшого виконання або під час виконання і вирішення проблеми неоднозначності імен, що виникає при цьому.

У разі створення фізичного виконуваного файла для подальшого виконання компонування називають статичним. У такому файлі міститься все потрібне для виконання програми. У разі створення логічного виконуваного файла під час виконання програми компонування називають динамічним; у цьому випадку образ виконуваного модуля збирають «на ходу». Отже, у результаті статичного компонування на диск записують виконуваний файл, готовий до запуску; за динамічного компонування – виконуваний файл теж буде створено, але йому для виконання потрібні додаткові файли.

На етапі компонування виконуються дві основні задачі:

♦ компонування секцій коду і даних різних об’єктних модулів, в тому числі модулів стандартних бібліотек, у спільні секції однакового призначення;

♦ розв’язання проблеми перехресних посилань. Можна сказати, що компонування є реалізацією системи іменування. Такі системи відображають імена на значення, при цьому імена об'єктів у вихідному коді мають відображатися на адреси, необхідні для їхнього використання процесором.

Статичне компонування виконуваних файлів

Об'єктні файли. Під час компонування виконуваний файл будують із об'єктних файлів (object files), які створює компілятор. Об'єктний файл має заголовок, що містить розмір ділянок коду і даних, а також зсув таблиці символів; об'єктний код (інструкції і дані, згенеровані компілятором), який звичайно розділений на поіменовані ділянки (секції) залежно від призначення; таблицю символів (symbol table).

Таблиця символів - це спеціальний розділ об'єктного файла, що містить визначення зовнішніх імен, які задають імена та відносні адреси файлових об'єктів, призначених для використання в інших файлах; зовнішні посилання (глобальні символи, що використовуються у файлі), які зазвичай містять зсув відповідної інструкції та необхідний символ.

Інформацію про зовнішні посилання називають також інформацією для налаштування адрес (relocation information).

На поданих рисунках елементи символьної таблиці відображаються так:

  • def: name @offset — інформація про визначення зовнішнього імені name, яке перебуває у файлі зі зсувом offset;

  • ref: name @offset — інформація про зовнішнє посилання на ім'я name, що перебуває у файлі зі зсувом offset.