Суміжне розміщення процесів
Методи розміщення процесів в основній пам'яті стосовно розташування ділянок пам'яті, виділених для процесу, поділяють на два класи:
- методи суміжного розміщення(Contiguous allocation);
- методи безмежного розміщення.
ОП має використовуватися як ОС, і програмами пользователя. Тому при суміжному розміщенні вона зазвичай поділяється на дві частини:
для резидентної частини (ядра) ОС;
для процесів користувача.
Простий безперервний розподіл
Рисунок 11.4 - Захист пам'яті за допомогою регістру кордону
При простому безперервному розподілі є два основні види втрат:
неможливо використовувати процесор, коли користувач чекає;
не використовується частина ОП, яка не зайнята ядром та поточною програмою користувача.
Розподіл з кількома безперервними розділами
Оскільки, взагалі кажучи, необхідно, щоб кілька процесів могли розташовуватися у пам'яті одночасно, слід вирішити, як розподіляти доступну пам'ять різноманітним процесам, які у систему.
Найпростіше рішення – розділити доступну оперативну пам'ять на кілька розділів фіксованого розміру(Multiprogramming with Fixed number of Tasks – MFT). Кожен розділ містить один процес, тобто ступінь мультизадачності системи дорівнюватиме кількості розділів. Такий підхід використовувався в OS/360 IBM, але недовго. Метод розподілу пам'яті з фіксованими межами розділів нелегко пристосувати до мінливого числа завдань. Крім того, можлива неприпустима фрагментація.
Взагалі кажучи, в кожний момент часу в пам'яті є кілька вільних областей різних розмірів. Коли з'являється новий процес, що потребує пам'яті, планувальник шукаєу тому числі вільну область, достатню розміщення процесу. Якщо область занадто велика, то вона розбивається на дві, в одній розміщується процес, а друга повертається до множини вільних областей (див. рис. 11.5).

Рисунок 11.5 – Дії планувальника під час розміщення процесів у пам'яті
Коли процес завершується, блок, що звільняється, поміщається до списку вільних блоків. Якщо вільні два сусідні блоки, вони об'єднуються в один блок більшого розміру.
Існує кілька стратегій вибору вільної сфери:
Стратегія найбільш відповідного(Best-fit Strategy). Вибирається програма, якою у вільному розділі найбільш «тісно».
Стратегія першого відповідного(First-fit Strategy). Вибирається програма, яка міститься у вільний розділ.
Стратегія найменш відповідного(Last-fit Strategy). Вибирається програма, якою у вільному розділі найбільше «вільно». У цьому випадку фрагмент, що залишається, часто достатній для розміщення ще однієї програми
Фрагментація
Фрагментація викликає різноманітні проблеми. У найгіршому випадку, вільні блоки розташовуються між кожними двома процесами. Якби вся ця пам'ять була об'єднана в єдиний великий блок, можна було б запустити більшу кількість процесів. Вибір стратегії розподілу пам'яті може вплинути фрагментацію. Зовнішня фрагментація також залежить від загального обсягу оперативної пам'яті та середнього розміру процесу. Статистика показує, що з деякою оптимізацією, якщо виділеноNблоків, то 0.5Nблоків губляться через фрагментації, тобто 1/3 пам'яті недоступна (правило 50%).
Інша проблема, пов'язана з розподілом пам'яті з кількома розділами,полягає у наступному. Розглянемо блок розміром 18 464 байти. Припустимо, що наступному процесу потрібно 1862 байти. Якщо ми виділимо запитуваний блок, то вільно залишиться 2 байти. Накладні витрати на зберігання такого блоку не виправдовують себе. Загальний підхід – розподіл надто маленьких блоків, як частини запитаних. Тобто виділена ділянка може бути трохи більшою за запитану. Ця різниця становитьвнутрішню фрагментацію (пам'ять виділено, але не використовується).
Одним із рішень проблеми зовнішньої фрагментації єущільнення (дефрагментація). Її метою є об'єднання всіх вільних ділянок до одного блоку.
На практиці можливе часткове ущільнення, тобто пересувається один блок, щоб задовольнити запит.
Часто разом із ущільненням використовується свопінг. Одним із підходів до ущільнення є витіснення всіх процесів у зовнішню пам'ять, а потім їх підкачування на нове місце. Якщо в системі вже є свопінг, то витрати праці програміста на вирішення цього завдання невеликі.
На практиці реалізація ущільнення пам'яті пов'язана з ускладненням операційної системи і має такі недоліки:
У тих випадках, коли мультипрограмна суміш неоднорідна по відношенню до розмірів програм, виникає необхідність частого ущільнення, що витрачає процесорний час і компенсує економію пам'яті.
Під час ущільнення всі прикладні програми перетворюються на стан очікування, що призводить до неможливості виконання програм у реальному масштабі часу.