Керування пам'яттю
Керування пам'яттю — різновид керування ресурсами[en], застосований щодо комп'ютерної пам'яті. Основним завданням керування пам'яттю є надання методів динамічного виділення ділянок пам'яті для програм на за їх запитом, та її звільнення для повторного використання, коли вона вже не потрібна. Це є важливим для будь-якої складної комп'ютерної системи, де може бути більше одного активного процесу, що працюють одночасно[1][2].
Створено кілька методів, які підвищують ефективність керування пам'яттю комп'ютера. Системи з віртуальною пам'яттю розділяють адреси в пам'яті, що використовуються процесом, від реальних фізичних адрес, що дозволяє відокремлювати процеси і підвищити ефективність доступу до вільної оперативної пам'яті за допомогою сторінкової організації або перенесення свопінгу даних до вторинних носіїв пам'яті. Ефективність менеджера віртуальної пам'яті може мати значний вплив на загальну продуктивність системи.
При виконанні запиту на виділення пам'яті завдання полягає в знаходженні і виділенні блоку вільної пам'яті достатнього розміру. Пам'ять виділяється з частин великого пулу пам'яті, що називається купа. В будь-який момент часу, деяка частина купи знаходиться у використанні, і той час як інші є «вільними» (не використаними) і таким чином доступні для майбутньої аллокації (виділення).
Декілька моментів ускладнюють реалізацію задачі, такі як фрагментація, яка з'являється коли утворюється багато невеликих розривів між аллокованими блоками, що робить неможливим їх використання при запитах аллокації. Метадані аллокатору також може збільшувати розмір (окремо) невеликих аллокованих ділянок. Це часто вирішується за допомогою розбивання (чанкінгу). Система керування пам'яттю повинна відслідковувати спірні моменти при алокації для того, щоб гарантувати, що вони не перекриваються і що ніяка пам'ять не була «втрачена» через витік пам'яті.
У комп'ютерній науці, динамічне виділення пам'яті (також відоме як виділення пам'яті на основі купи) є розподілом пам'яті для її використання у комп'ютерній програмі під час виконання цієї програми. Це також може розглядатися як спосіб поширення власності на обмежені ресурси пам'яті між багатьма частинами даних і коду.
Динамічно виділена пам'ять існує, поки її явно не звільнив програміст або збиральник сміття. Це відрізняється від статичного розподілу пам'яті, яка має фіксовану тривалість. Кажуть, що об'єкт, щоб виділяються має динамічний час життя.
Завдання виконання запиту розподілу полягає в знаходженні блока невикористаної пам'яті достатнього розміру.
Проблеми при виконанні запиту розподілу:
- Внутрішня і зовнішня фрагментації;
- Зменшення фрагментації потребує особливої уваги, що робить реалізацію складнішою;
- Виділення метаданих може збільшити кількість (окремих) малих виділень;
- Формування блоків (Chunking) намагається зменшити цей ефект.
Як правило, пам'ять виділяється з великого резерву невикористаних областей пам'яті, званої купою. Оскільки точне місце розташування виділених областей не відомо заздалегідь, то доступ до пам'яті є непрямим, як правило, через вказівники. Точний алгоритм, який використовується для організації з виділенням і звільненням областей пам'яті ховається за абстрактним інтерфейсом і може використовуватися будь-яким з методів.
- Стекові змінні та Стек викликів
- Збирання сміття
- Підрахунок посилань
- Групова алокація
- ↑ Detlefs, D.; Dosser, A.; Zorn, B. (June 1994). Memory allocation costs in large C and C++ programs (PDF). Software: Practice and Experience (англ.). 24 (6): 527—542. CiteSeerX 10.1.1.30.3073. doi:10.1002/spe.4380240602. S2CID 14214110.
- ↑ Gibson, Steve (15 серпня 1988). Tech Talk: Placing the IBM/Microsoft XMS Spec Into Perspective. InfoWorld (англ.). Архів оригіналу за 1 січня 2014. Процитовано 20 листопада 2014.
- Memory management in C programs - методи керування пам'яттю в C
- SICP[en] 5.3 Storage Allocation and Garbage Collection - розділ підручника про те як реалізувати примітивне виділення пам'яті і прибирання сміття в інтерпретаторі Scheme
![]() |
![]() |
Це незавершена стаття про операційні системи. Ви можете допомогти проєкту, виправивши або дописавши її. |