-
Розділи пам’яті з фіксованими розмірами.
Розбиття пам’яті на розділи з фіксованими розмірами графічно можна так зобразити.

В кожному розділі в кожний момент часу може розміщуватись тільки одна задача. В рамках багатозадачної обчислювальної системи кожний розділ пам’яті розглядається як окремий елемент подібно до всієї оперативної пам’яті однозадачної машини.
Розподіл оперативної пам’яті в межах розділу може здійснюватись тими самими методами, що і для однопроцесорних систем (наприклад, розміщення в пам’яті задач резидентно тощо). У випадку наявності невеликого об’єму фізичної пам’яті і при збільшенні кількості паралельно працюючих задач використовується метод swapping, тобто періодично завантажувати неактивні задачі (неактивні розділи) з оперативної пам’яті на зовнішні носії інформації, а на їх місце завантажувати задачі, які потребують виконання.
Однією з основних проблем яка виникає при розподілі пам’яті з фіксованими розмірами, наприклад при організації мультипрограмного режиму роботи – це захист операційної системи від можливих помилок які виникають в задачах при розподілі пам’яті, а також захист задача від впливу інших паралельно – працюючих задач.
У випадку помилки адресації пам’яті виконувана програма може почати обробку з “чужого” сегменту пам’яті і даних, що може привести до непередбачених наслідків. Рішенням цієї проблеми є використання регістрів захисту пам’яті, які містять граничні адреси області пам’яті поточної виконуваної задачі і при перевищені адреси управління передається на ОС.
Основним недоліком розподілу пам’яті зі сторінками з фіксованими розмірами є наявність великого об’єму невикористовуваної пам’яті. Ця невикористовувана пам’ять може міститися в кожному з розділів (сегментів) і таке явище називається фрагментацією пам’яті. При цьому використати фрагменти вільної пам’яті в розділах чи сегментах не є можливим. Для зменшення втрат оперативної пам’яті використовують такі шляхи:
-
виділяють розмір пам’яті який необхідний для поточної задачі;
-
розміщають задачу не в одному неперервному розділі пам’яті, а в декількох розділах меншого розміру.
-
Розділи пам’яті зі змінними розмірами.
Цей спосіб розподілу пам’яті використовується з метою зменшення фрагментації. Основна ідея - це розміщення задач в пам’яті щільно одна за одною, виділяючи стільки пам’яті, скільки потребує задача. У випадку такого способу розподілу пам’яті в складі ОС є спеціальна програма (диспетчер пам’яті), яка контролює і створює список вільних розділів пам’яті.
При появі нової задачі на виконання цей диспетчер аналізує вільні розділи пам’яті і виділяє під задачу, який точно дорівнює або трохи більший необхідного об’єму пам’яті для задачі. Після цього список вільних розділів пам’яті модифікується, в свою чергу при звільненні розділу пам’яті при завершенні роботи певної задачі диспетчер намагається об’єднати звільнений розмір зі суміжними розділами пам’яті, якщо такі існують.
Виділення пам’яті під новий розділ може здійснюватись трьома способами:
-
розділ пам’яті, який підходить до даної задачі і був знайдений першим. У цьому випадку список вільних розділів пам’яті впорядковується по адресах. Диспетчер переглядає список і виділяє задачі розділ в тій області пам’яті яка перша підходить для задачі. Так як список вільних розділів пам’яті впорядковується, як правило, по збільшенні адреси, то пам’ять для задач малого розміру виділяється, як правило, в молодших адресах фізичної пам’яті, а в старших адресах, як правило, створюються фрагменти досить великого розміру;
-
розділ пам’яті, який найкраще підходить до задачі. В цьому випадку список вільних розділів пам’яті впорядковується по об’єму цих розділів, наприклад в порядку збільшення. В цьому випадку при перегляді вільних розділів пам’яті буде вибраний розділ, який найбільш точно відповідає необхідному для задачі розміру по об’єму. На початку списку вільних розділів накопичуються розділи з малими розмірами, і для того щоб знайти розділ великого об’єму необхідно переглядати майже весь список, що не є ефективним;
-
розмір пам’яті, який найкраще не підходить для задачі. В цьому випадку список вільних розділів впорядковується по зменшенню об’єму розділу. При чому якщо нам необхідно розподілити розділ пам’яті достатнього (великого) то цей розділ буде знайдений зразу (бо він знаходиться на початку списку). Залишається достатньо високою імовірність того, що об’єм пам’яті який залишився після розподілу пам’яті буде достатній для розподілу наступної задачі.
Однак, враховуючи те, що в багатозадачних системах задачі завантажуються на виконання і закінчують свою роботу в довільні моменти часу, явище фрагментації є досить значним. Може виникати ситуація, коли диспетчер пам’яті буде не в змозі розподілити необхідний розділ пам’яті, хоча сумарний об’єм вільної пам’яті буде перевищувати необхідний для розподілу. В цьому випадку застосовується механізм ущільнення (дефрагментації) пам’яті, при якому всі процеси тимчасово знімаються з виконання, а диспетчер пам’яті корегує список розділів вільної пам’яті і всі вільні фрагменти переміщуються в кінець пам’яті, створюючи тим самим один неперервний вільний розділ пам’яті (подібна ситуація виникає при записі файлів на диск).
