Менеджер пулів пам’яті
Менеджер пулів пам’яті являється дуже важливим компонентом системи. Так само як і планувальник відповідає за надання процесам ресурсів центрального процесора, менеджер пулів пам’яті надає можливість виділення пам’яті. Для виділення пам’яті під власні потреби процес повинен напряму або не напряму звернутися до менеджера пулів пам’яті. Менеджер пулів обробляється кожний раз, коли процес викликає стандартні системні виклики mallos або free для виділення і звільнення пам’яті відповідно.
Вся робота менеджера пулів пам’яті спирається на використання списку вільних блоків пам’яті всередині кожного пулу. Очевидно, що з самого початку пул містить по одному великому блоку вільної пам’яті, розмір якого рівний розміру пулу. В процесі обробки запитів до пам’яті початковий блок пам’яті стає все меншим. В той же час процеси можуть звільняти зайняті блоки пам’яті. Таким чином, в ході роботи системи утворюється декілька блоків вільної пам’яті, які відрізняються за своїми розмірами (рис.5.9.). Дане явище носить назву фрагментація пам’яті (memory fragmentation).
Після того, як звільнений блок пам’яті буде повернутий в пул, менеджер додає розмір і початкову адресу даного блоку в один із списків схожих за розмірами вільних блоків. По замовченню менеджер пулів підтримує списки для наступних розмірів блоків: 24, 84, 144, 204, 264, 324, 384, 444, 1500, 2000, 3000, 5000, 10000, 20000, 32768, 65536, 131072 і 262144 байт. Потрібно відзначити, що дані розміри ніяким чином не пов’язані з системними буферами, про які мова піде нижче.
Рис.5.9. Виділення пулів пам’яті
Коли процес потребує виділення пам’яті, менеджер пулів спочатку продивляється список вільних блоків необхідного розміру. Цей механізм дозволяє більш ефективно використовувати вільну пам’ять на рахунок близьких по розміру блоків пам’яті. Якщо в списку блоків необхідного розміру вільних блоків не знайдено , менеджер переходить до розгляду списку блоків більшого розміру, доти, поки відповідний блок не буде знайдено. Якщо менеджеру доводиться використовувати блок більшого розміру, ніж було запрошено, знайдений блок розщеплюється і вільна його частина поміщається у відповідний список вільних блоків меншого розміру.
Рис. 5.10. Об’єднання вільних блоків.
Менеджер пулів пам’яті пробує контролювати фрагментацію пам’яті шляхом об’єднання поряд розміщених вільних блоків. Коли блок пам’яті звільняється, менеджер продивляється пам’ять на наявність за звільненим блоком вільної області. Якщо така пам’ять знайдена, то блоки об’єднується в один з наступним розміщенням його у відповідний список вільних блоків пам’яті (рис. 5.10).
Вище було розглянуто результат роботи команди show memory, яка виводить імена і різну інформацію про пули пам’яті, а також детальну інформацію про кожний блок пам’яті всередині пулів. Вивід команди show memory містить список всіх блоків пам’яті, включених у відповідні пули (рис.5.11).
Дата добавления: 2016-05-05; просмотров: 495;