ЗНАЕТЕ ЛИ ВЫ?

Багатоетапна обробка користувальницької програми



Щоб краще уявляти собі всі деталі адресації й розміщення програми в пам'яті, розглянемо загальну схему багатоетапної обробки користувальницької програми, яка може бути виконана в будь-якій ОС. Схема представлена на рис. 15.1.

Рис. 15.1. Багатоетапна обробка користувальницької програми.

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

Однак об'єктний модуль не може безпосередньо виконуватися, тому що він містить недозволені посилання на зовнішні модулі і їхні компоненти. Наступна фаза обробки програми – редагування зв'язків. Редактор зв'язків (linker)– системна програма, що одержує на вхід один або кілька об'єктних модулів, а на виході видає завантажувальний модуль– двійковий код, утворений кодом декількох об'єктних модулів, у якому дозволені всі міжмодульні посилання - для кожного символу, зовнішнього для даного об'єктного модуля A, знайдений відповідний символ (процедури, змінної й т.д.) з іншого модуля B, на який посилається модуль A, і код відповідно відкоректовано, тобто він правильно адресує зовнішній символ.

Завантажувальний модуль може бути завантажений в память для виконання за допомогою ще однієї системної програми – завантажника (loader),що одержує на вхід завантажувальний модуль і файли з бінарними кодами системних бібліотек,які використає програма. Завантажник, поєднуючи код програми з кодами системних бібліотек, створює бінарний образ програми в пам'яті.

Фаза виклику редактори зв'язків і завантажника носить загальну назву час завантаження. У багатьох ОС функції редактора зв'язків і завантажника, з метою економії часу обробки програми в системі, об'єднані в одній системній програмі – редакторі зв'язків і завантажнику (linker and loader).Наприклад, у системі UNIX редактор зв'язків і завантажник називається ld (Linker and loaDer).Об'єднаному завантажнику й редактору зв'язків на вхід передається список об'єктних модулів і список бібліотек, і в результаті він генерує код, що виконується. Фаза редагування зв'язків і завантаження часто на програмістському сленгу називається лінковка (linking).Будемо далі використати саме цей короткий і виразний термін.

От приклад послідовності фаз обробки програми в термінах команд системи UNIX:

 

сс -c program.c // Компіляція вихідного коду на Си.

// У робочій директорії - об'єктний модуль program.o

ld program.o mylibrary.a // редагування зв'язків і завантаження

// У робочій директорії - виконує код, що, з ім'ям за замовчуванням a.out

a.out // Виконання програми

// У стандартний вивід (за замовчуванням - на консоль)

// видаються результати програми

 

У прикладі передбачається, що у файлі program.cзберігається вихідний код програми на Си, що використає бібліотечні функції з бібліотеки mylibrary.a. Відзначимо угоди в системі UNIX про розширення імен файлів: .c –вихідний код на Си, .o– об'єктний модуль, .a– бінарний файл статично линкуемої бібліотеки(абревіатура від терміна archive). Код, що виконує, (executable) в UNIX не має стандартного розширення імені, але має повне ім'я за замовчуванням - трохи архаїчне ім'я a.out(абревіатура від asembler output).

В Windows угоди про розширення імен файлів трохи інші: .obj– об'єктний модуль, .exe– виконує код, що, .lib– статично линкуемая бібліотека.

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

На етапі виконання, при першому звертанні до них із програми, в память завантажуються динамічно лінкуємі бібліотеки (dymanically linked libraries).Даний різновид бібліотек, реалізований у всіх сучасних ОС, дозволяє заощадити пам'ять, займану образом виконуваного коду, який при статичній лінковці з бібліотеками виявляється дуже великий.

Логічний і фізичний адресний простір

Концепція логічного адресного простору, пов'язаного з відповідним фізичним адресним простором, є однією з основних для керування пам'яттю.

Логічною адресоюназивається адреса, яка генерирується процесором при виконанні машинної команди.

Фізична адреса –це реальна адреса в пам'яті, яку "бачить" й "розуміє" пристрій керування пам'яттю (Memory Management Unit – MMU).

Логічні адреси збігаються з фізичними при зв'язуванні адрес під час компіляції або під час завантаження (тобто довиконання програми). Однак при зв'язуванні адрес під час виконання логічні адреси відрізняються від фізичних.

Пристрій керування пам'яттю

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

Апаратури MMU використовує значення регістра переміщення, що містить адресу початку області пам'яті, виділеної ОС для програми користувача. MMU додає значення регістра переміщення до (логічної) адреси, яка згенерована користувальницькою програмою, одержуючи в результаті фізичну адресу.

Програма користувача працює тільки з логічними адресами й не "бачить" фізичних адрес.

Схема адресації й перетворення логічної адреси у фізичну з використанням регістра переміщення зображена на рис. 15.2.

 

Рис. 15.2. Адресація з використанням регістра переміщення.





Последнее изменение этой страницы: 2016-07-11; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.238.190.82 (0.007 с.)