Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лек 11.doc
Скачиваний:
2
Добавлен:
03.09.2019
Размер:
167.42 Кб
Скачать

Управління пам'яттю

У однозадачних системах основна пам'ять розділяється на дві частини: одна частина — для операційної системи (резидентний монітор, ядро), а друга — для тієї, що виконується у поточний момент часу програми. У багатозадачних системах "призначена" для користувача частина пам'яті має бути розподіле­на для розміщення декількох процесів. Це завдання розподілу виконується операційною системою динамічно і відоме під назвою управління пам'яттю (memory management).

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

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

Типи адрес

Для ідентифікації змінних і команд використовуються символьні імена (мітки), віртуальні адреси і фізичні адреси (рис. 11.1).

Символьні імена привласнює користувач при написанні програми на алгоритмічній мові або асемблері.

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

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

Рис 11.1. Типи адрес

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

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

Класифікація методів розподілу пам’яті

Всі методи управління пам'яттю можуть бути розділені на два класи: методи, які використовують переміщення процесів між оперативною пам'яттю і диском, і методи, які не роблять цього.

Методи розподілу пам'яті без використання дискового простору

Розподіл пам'яті фіксованими розділами

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

Рис.11.2 Розподіл пам'яті фіксованими розділами: а - із спільною чергою; б - з окремими чергами

Підсистема управління пам'яттю в цьому випадку виконує наступні завдання:

порівнюючи розмір програми, що вчинила на виконання, і вільних розділів, вибирає відповідний розділ

здійснює завантаження програми і налаштування адрес.

Технологія

Опис

Сильні сторони

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

Фіксований

розподіл

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

дружино в розділ рівного або

більшого розміру

Простота реалізації

малі системні накладні витрати

Неефективне

використання

пам'яті через

внутрішньо фраг-

ментацию, фіксо-

рована макси-

мальна кількість активних процесів

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