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

Розподіл пам’яті

В перших комп’ютерах було реалізовано зв’язний розподіл пам’яті — в одному неперервному блоці комірок пам’яті. Тільки після того, як з’явилось мультипрограмування з розділами змінного розміру стало зрозумілим, що значно більш ефективним може бути незв’язний розподіл.

При незв’язаному розподілі пам’яті, програми розбиваються на декілька блоків або сегментів, які розміщуються в основній пам’яті в ділянках які не обов’язково розташовані поряд.

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

Зв’язний розподіл пам’яті для одного користувача

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

Мультипрограмування з фіксованими розділами

При розподілі пам’яті при мультипрограмуванні розглядають завантаження програм за абсолютними та змінними адресами.

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

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

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

В таких системах захист пам’яті частіше всього реалізується за допомогою декількох граничних регістрів. Два регістри дозволяють вказувати верхню та нижню межу розділу користувача, або одну з меж та розмір розділу.

Схема розподілу пам’яті при використанні фіксованих розділів приведена на рис. __.

Мультипрограмування із змінними розділами

Коли треба дозволити завданням займати стільки місця (в межах фізичної пам’яті) скільки їм необхідно, тоді межі розділів не фіксуються.

Але яка завгодно схема організації пам’яті дає певні втрати. В цій схемі втрати виникають тоді, коли завдання починають закінчуватись, а в основній пам’яті залишаються вільні ділянки, або „дірки”. Ці „дірки” можна використовувати для розміщення інших завдань, але „дірки” все одно будуть, тільки меншого розміру в які вже неможливо завантажити іншу задачу. В таких випадках використовують об’єднання „дірок” в пам’яті.

Часто буває так, що в усій основній пам’яті залишаються розкиданими окремі „дірки”, які складають значний об’єм пам’яті. Проблема вирішується ущільненням пам’яті.

ОС обирає всі блоки в роботі разом, залишаючи вільну пам’ять у вигляді одної великої ділянки.

При реалізації цього методу керування пам’яттю ОС вирішує такі задачі.

1. Підтримка таблиць вільних і зайнятих областей, в яких вказуються початкові адреси і розміри ділянок пам’яті.

2. При надходженні нової задачі — аналіз запиту, перегляд таблиці вільних областей та вибір розділу пам’яті, розмір якого достатній для розміщення задачі, що надійшла.

3. Завантаження задачі в виділений їй розділ та коректування таблиць вільних та зайнятих областей.

4. Після завершення задачі знову коректування таблиць вільних і зайнятих областей.