Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Операційні системи.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
6.41 Mб
Скачать

Динамічне завантаження й динамічна лінковка

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

З динамічним завантаженням викликуваних підпрограм тісно зв'язаний інший механізм – динамічна лінковка: лінковка під час виконання програми. Зрозуміло, це не означає, що під час виконання область коду програми розширюється, і до неї додається код динамічно лінкуємої підпрограми. Використається інша схема. У коді програми розміщається заглушка для виконання (execution stub) – невеликий фрагмент коду, що виконує системний виклик модуля ОС, що розміщає в пам'яті код динамічно лінкуємої бібліотечної підпрограми. При першому виклику заглушка заміняє себе на код за адресою динамічно розміщеної в пам'яті підпрограми. Очевидно, що динамічна линковка найбільш доцільно для бібліотек. Файл бінарного коду динамічно лінкуемї бібліотеки має в системі UNIX розширення імені .so (абревіатура терміна shared object), у системі Windows – розширення імені .dll (абревіатура від dynamically linked library).

Оверлейна структура програми

У ранніх ОС, особливо – для персональних комп'ютерів, для користувальницького процесу були вимушено уведені дуже тверді обмеження по пам'яті, - наприклад, в MS DOS – не більше 640 кілобайт. При такому дефіциті основної пам'яті, якщо програма виявляється настільки велика, що повністю не міститься в пам’ять максимально дозволеного обсягу, необхідно вживати спеціальні міри при розробці програми, щоб розбити її на непересічні групи модулів, такі, що в кожній групі модулі логічно взаємозалежні й повинні бути присутнім у пам'яті одночасно, модулі ж різних груп не обов'язково повинні разом завантажуватися в память. Під час виконання такої програми повинен використатися спеціальний системний механізм, названий оверлейна структура (overlay, дослівно – накладення), яка забезпечує почергове завантаження в ту саму область пам'яті то одну, те іншу групу виконуваних модулів. Проста програма, що виконує ці дії, називається драйвер оверлея (overlay driver). Інтегроване середовище розробки Турбо Паскаль забезпечували спеціальні опції компілятора, які дозволяли явно вказувати модулі, що входять у кожен оверлей.

Типовий для ранніх комп'ютерів й ОС приклад програми з оверлейной структурою – двухпросмотровий асемблер. На першому перегляді він перетворить вихідний ассемблерный код у проміжне подання, яке програма другого перегляду асемблера одержує на вході. Повністю весь асемблер (обидва перегляди) в пам’ять не містився, і довелося застосувати оверлейную структуру. Даний приклад ілюструється на рис. 15.3.

Оверлейна структура двухпросмотрового асемблера.

Лекція 12. Сторінкова організація пам’яті

План

 Відкачка і підкачування

 Суміжний розподіл пам'яті

 Загальна задача розподілу пам'яті і стратегії її рішення

 Фрагментація

 Сторінкова організація

 Захист пам'яті

 Структура таблиці сторінок

 Інвертовані таблиці сторінок

 Поділювані сторінки

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