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