Управління пам'яттю в ОС: безперервне, обмін, фрагментація
Що таке управління пам'яттю?
Управління пам'яттю це процес керування та координації пам’яті комп’ютера, призначення частин, відомих як блоки, різним запущеним програмам для оптимізації загальної продуктивності системи.
Це найважливіша функція операційної системи, яка керує основною пам'яттю. Це допомагає процесам рухатися назад і вперед між основною пам’яттю та диском виконання. Це допомагає ОС відстежувати кожне місце в пам'яті, незалежно від того, чи виділено воно якомусь процесу, чи залишається вільним.
Навіщо використовувати керування пам'яттю?
Ось причини використання керування пам’яттю:
- Це дозволяє перевірити, скільки пам’яті потрібно виділити для процесів, які вирішують, який процесор має отримати пам’ять у який час.
- Відстежує, коли запаси звільняються або не розподіляються. Відповідно до нього буде оновлено статус.
- Він виділяє простір для підпрограм програми.
- Також переконайтеся, що ці програми не заважають одна одній.
- Допомагає захистити різні процеси один від одного
- Він розміщує програми в пам’яті, щоб пам’ять використовувалася повною мірою.
Техніки управління пам'яттю
Ось кілька найважливіших методів керування пам’яттю:
Єдиний безперервний розподіл
Це найпростіший спосіб керування пам'яттю. У цьому методі всі типи пам’яті комп’ютера, крім невеликої частини, яка зарезервована для ОС, доступні для однієї програми. Наприклад, операційна система MS-DOS розподіляє пам'ять таким чином. Вбудована система також працює в одній програмі.
Розділений розподіл
Він розділяє первинну пам’ять на різні розділи пам’яті, які здебільшого є суміжними областями пам’яті. Кожен розділ зберігає всю інформацію для певного завдання чи роботи. Цей метод полягає у виділенні розділу для завдання під час його початку та скасуванні розподілу під час його завершення.
Керування сторінковою пам'яттю
Цей метод ділить основну пам’ять комп’ютера на блоки фіксованого розміру, відомі як кадри сторінок. Цей апаратний блок керування пам’яттю відображає сторінки у кадри, які мають бути розподілені на основі сторінки.
Сегментне керування пам'яттю
Сегментована пам'ять - це єдиний метод керування пам'яттю, який не забезпечує програмі користувача лінійний і безперервний адресний простір.
Сегменти потребують апаратної підтримки у вигляді таблиці сегментів. Він містить фізичну адресу розділу в пам’яті, розмір та інші дані, як-от біти захисту доступу та статус.
Що таке обмін?
Підкачка — це метод, за якого процес має бути тимчасово перенесено з основної пам’яті на резервне сховище. Пізніше його буде повернено в пам'ять для продовження виконання.
Резервне сховище — це жорсткий диск або будь-який інший вторинний запам’ятовуючий пристрій, який має бути достатньо великим, щоб вмістити копії всіх образів пам’яті для всіх користувачів. Він також здатний запропонувати прямий доступ до цих образів пам’яті.
Переваги свопінгу
Ось основні переваги/плюси обміну:
- Він пропонує вищий ступінь мультипрограмування.
- Дозволяє динамічне переміщення. Наприклад, якщо використовується прив’язка адреси під час виконання, процеси можна міняти місцями в різних місцях. Інакше, у випадку прив’язки часу компіляції та завантаження, процеси слід перемістити в те саме місце.
- Це допомагає краще використовувати пам'ять.
- Мінімальна втрата процесорного часу після завершення, тому його можна легко застосувати до методу планування на основі пріоритетів для покращення його продуктивності.
Що таке розподіл пам'яті?
Розподіл пам’яті – це процес, за допомогою якого комп’ютерним програмам призначається пам’ять або простір.
Тут основна пам'ять розділена на два типи розділів
- Низька пам’ять - Operaсистема тингу знаходиться в цьому типі пам’яті.
- Висока пам'ять– Процеси користувача зберігаються у великій пам’яті.
Розподіл розділу
Пам'ять розділена на різні блоки або розділи. Кожен процес виділяється відповідно до вимог. Розподіл розділів — ідеальний спосіб уникнути внутрішньої фрагментації.
Нижче наведено різні схеми розподілу розділів:
- Перша підгонка: у цьому типі підгонки виділяється розділ, який є першим достатнім блоком від початку основної пам’яті.
- Найкраще підходить: Він призначає процес для розділу, який є першим найменшим розділом серед вільних розділів.
- Найгірше підходить: Він призначає процес для розділ, який є найбільшим достатнім вільно доступним розділом в основній пам’яті.
- Наступна підгонка: Здебільшого він схожий на перший Fit, але цей Fit шукає перший достатній розділ із останньої точки розподілу.
Що таке пейджінг?
Пейджінг — це механізм зберігання, який дозволяє ОС отримувати процеси з вторинного сховища в основну пам’ять у вигляді сторінок. У методі підкачки основна пам'ять ділиться на невеликі блоки фізичної пам'яті фіксованого розміру, які називаються кадрами. Розмір рамки має бути таким же, як і сторінки, щоб максимально використовувати основну пам’ять і уникнути зовнішньої фрагментації. Пейджинг використовується для швидшого доступу до даних, і це логічна концепція.
Що таке фрагментація?
Процеси зберігаються та видаляються з пам’яті, що створює вільний простір пам’яті, який занадто малий для використання іншими процесами.
Іноді процеси, які не можуть розподілити блоки пам’яті через малий розмір і блоки пам’яті завжди залишаються невикористаними, називають фрагментацією. Цей тип проблеми виникає під час системи динамічного розподілу пам’яті, коли вільні блоки досить малі, тому вона не може виконати жодного запиту.
Є два типи методів фрагментації:
- Зовнішня фрагментація
- Внутрішня фрагментація
- Зовнішню фрагментацію можна зменшити шляхом перевпорядкування вмісту пам’яті, щоб помістити всю вільну пам’ять разом в один блок.
- Внутрішню фрагментацію можна зменшити, призначивши найменший розділ, який все ще достатньо хороший для виконання всього процесу.
Що таке сегментація?
Метод сегментації працює майже подібно до пейджінгу. Єдина відмінність між ними полягає в тому, що сегменти мають змінну довжину, тоді як у методі розбиття сторінок сторінки завжди мають фіксований розмір.
Програмний сегмент включає основну функцію програми, структури даних, службові функції тощо. ОС підтримує таблицю відображення сегментів для всіх процесів. Він також містить список вільних блоків пам’яті разом із їх розміром, номерами сегментів і місцями пам’яті в основній пам’яті або віртуальна пам'ять.
Що таке динамічне завантаження?
Динамічне завантаження — це процедура програми, яка не завантажується, доки програма її не викличе. Усі підпрограми мають міститися на диску у форматі завантаження з можливістю переміщення. Основна програма буде завантажена в пам'ять і буде виконана. Динамічне завантаження також забезпечує краще використання пам'яті.
Що таке динамічне зв'язування?
Зв’язування — це метод, який допомагає ОС збирати та об’єднувати різні модулі коду та даних в один виконуваний файл. Файл можна завантажити в пам'ять і виконати. ОС може зв’язувати бібліотеки системного рівня в програму, яка об’єднує бібліотеки під час завантаження. У методі динамічного зв’язування бібліотеки зв’язуються під час виконання, тому розмір коду програми може залишатися невеликим.
Різниця між статичним і динамічним навантаженням
Статичне навантаження | Динамічне завантаження |
---|---|
Статичне завантаження використовується, коли ви хочете завантажити програму статично. Тоді під час компіляції вся програма буде зв’язана та скомпільована без необхідності будь-якого зовнішнього модуля чи залежності програми. | У програмі з динамічним завантаженням посилання будуть надані, а завантаження здійснюватиметься під час виконання. |
Під час завантаження вся програма завантажується в пам'ять і починає своє виконання. | Підпрограми бібліотеки завантажуються в пам'ять лише тоді, коли вони потрібні програмі. |
Різниця між статичним і динамічним зв'язуванням
Ось основні відмінності між статичним і динамічним посиланнями:
Статичне зв'язування | Динамічне зв'язування |
---|---|
Статичне зв'язування використовується для об'єднання всіх інших модулів, які потрібні програмі, в один виконуваний код. Це допомагає ОС запобігти будь-якій залежності під час виконання. | Коли використовується динамічне зв’язування, не потрібно пов’язувати фактичний модуль або бібліотеку з програмою. Замість нього використовуйте посилання на динамічний модуль, наданий під час компіляції та зв’язування. |
Підсумки
- Управління пам’яттю — це процес керування та координації пам’яті комп’ютера, призначення частин, які називаються блоками, різним запущеним програмам для оптимізації загальної продуктивності системи.
- Це дозволяє перевірити, скільки пам’яті потрібно виділити для процесів, які вирішують, який процесор має отримати пам’ять у який час.
- У режимі Single Contiguous Allocation усі типи пам’яті комп’ютера, крім невеликої частини, яка зарезервована для ОС, доступні для однієї програми
- Метод розділеного розподілу поділяє основну пам’ять на різні розділи пам’яті, які здебільшого є суміжними областями пам’яті.
- Метод сторінкового керування пам’яттю ділить основну пам’ять комп’ютера на блоки фіксованого розміру, відомі як кадри сторінок
- Сегментована пам'ять - це єдиний метод керування пам'яттю, який не забезпечує програмі користувача лінійний і безперервний адресний простір.
- Підкачка — це метод, за якого процес має бути тимчасово перенесено з основної пам’яті на резервне сховище. Пізніше його буде повернено в пам'ять для продовження виконання.
- Розподіл пам’яті – це процес, за допомогою якого комп’ютерним програмам призначається пам’ять або простір.
- Пейджінг — це механізм зберігання, який дозволяє ОС отримувати процеси з вторинного сховища в основну пам’ять у вигляді сторінок.
- Фрагментація означає стан диска, за якого файли поділені на частини, розкидані по диску.
- Метод сегментації працює майже подібно до пейджінгу. Єдина відмінність між ними полягає в тому, що сегменти мають змінну довжину, тоді як у методі розбиття сторінок сторінки завжди мають фіксований розмір.
- Динамічне завантаження — це процедура програми, яка не завантажується, доки програма її не викличе.
- Зв’язування — це метод, який допомагає ОС збирати та об’єднувати різні модулі коду та даних в один виконуваний файл.