
- •Управління процесами
- •Стан процесів
- •Контекст і дескриптор процесу
- •Алгоритми планування процесів
- •Критична секція
- •Управління пам’яттю
- •Типи адрес
- •Методи розподілу пам'яті з використанням дискового простору. Поняття віртуальної пам'яті.
- •Ієрархія запам'ятовуючих пристроїв(зп). Принцип кешування даних
- •Зовнішня пам'ять
Управління пам’яттю
Пам'ять є найважливішим ресурсом, що вимагає ретельного управління з боку мультипрограмної операційної системи. Розподілу підлягає вся оперативна пам'ять, не зайнята операційною системою. Зазвичай ОС розташовується в самих молодших адресах, проте може займати і найстарші адреси.
Функціями ОС по управлінню пам'яттю є:
відстеження вільної та використаної пам'яті,
виділення пам'яті процесам і звільнення пам'яті при завершенні процесів,
витіснення процесів з оперативної пам'яті на диск, коли розміри основної пам'яті не достатні для розміщення в ній всіх процесів, і повернення їх в оперативну пам'ять , коли в ній звільняється місце,
настроювання адрес програми на конкретну область фізичної пам'яті.
Типи адрес
Для ідентифікації змінних і команд використовуються символьні імена (мітки), віртуальні адреси і фізичні адреси (рисунок 2.1).
Символьні імена присвоює користувач при написанні програми на алгоритмічній мові або асемблері.
Віртуальні адреси виробляє транслятор, що переводить програму на машинну мову. Так як під час трансляції в загальному випадку невідомо, в яке місце оперативної пам'яті буде завантажена програма, то транслятор присвоює змінним і командам віртуальні (умовні) адреси, зазвичай вважаючи за замовчуванням, що програма буде розміщена, починаючи з нульової адреси. Сукупність віртуальних адрес процесу називається віртуальним адресним простором. Кожен процес має власний віртуальний адресний простір. Максимальний розмір віртуального адресного простору обмежується розрядністю адреси, властивий даній архітектурі комп'ютера, і, як правило, не збігається з обсягом фізичної пам'яті, наявними в комп'ютері.
Рис. 2.1. Типи адрес
Фізичні адреси відповідають номерам комірок оперативної пам'яті, де насправді розташовані або будуть розташовані змінні і команди.
Перехід від віртуальних адрес до фізичних може здійснюватися двома способами. У першому випадку заміну віртуальних адрес на фізичні робить спеціальна системна програма - переміщає завантажувач. Переміщає завантажувач на підставі наявних у нього вихідних даних про початкову адресу фізичної пам'яті, в яку належить завантажувати програму, та інформації, наданої транслятором про адресно-залежні константи програми, виконує завантаження програми, поєднуючи її з заміною віртуальних адрес фізичними.
Другий спосіб полягає в тому, що програма завантажується в пам'ять в незміненому вигляді у віртуальних адресах, при цьому операційна система фіксує зсув дійсного розташування програмного коду щодо віртуального адресного простору.
У деяких випадках (звичайно в спеціалізованих системах), коли заздалегідь точно відомо, в якій області оперативної пам'яті буде виконуватися програма, транслятор видає виконуваний код відразу у фізичних адресах.
Методи розподілу пам'яті без використання дискового простору
Всі методи управління пам'яттю можуть бути розділені на два класи: методи, які використовують переміщення процесів між оперативною пам'яттю і диском, і методи, які не роблять цього (малюнок 2.2). Почнемо з останнього, більш простого класу методів.
Рис. 2.2. Класифікація методів розподілу пам'яті
Розподіл пам'яті фіксованими розділами
Найпростішим способом управління оперативною пам'яттю є поділ її на кілька розділів фіксованої величини. Це може бути виконано вручну оператором під час старти системи або під час її генерації. Чергова задача, що надійшла на виконання, міститься або в загальній черзі (малюнок 2.3, а), або в чергу до деякого розділу (малюнок 2.3, б).
Рис. 2.3. Розподіл пам'яті фіксованими розділами: а - із загальною чергою; б - з окремими чергами
Підсистема керування пам'яттю в цьому випадку виконує наступні задачі: порівнюючи розмір програми, що надійшла на виконання, і вільних розділів, вибирає придатний розділ, здійснює завантаження програми і налаштування адрес.
При очевидній перевазі - простоті реалізації - даний метод має істотний недолік - жорсткість. Так як в кожному розділі може виконуватися тільки одна програма, то рівень мультипрограмування заздалегідь обмежений числом розділів незалежно від того, який розмір мають програми. Навіть якщо програма має невеликий обсяг, вона буде займати весь розділ, що призводить до неефективного використання пам'яті. З іншого боку, навіть якщо обсяг оперативної пам'яті машини дозволяє виконати деяку програму, розбиття пам'яті на розділи не дозволяє зробити цього.
Розподіл пам'яті розділами змінної величини
У цьому випадку пам'ять машини не поділяється заздалегідь на розділи. Спочатку вся пам'ять вільна. Кожній знову надходять задачі, виділяється необхідна їй пам'ять. Якщо достатній обсяг пам'яті відсутній, то завдання не приймається на виконання і стоїть в черзі. Після завершення завдання пам'ять звільняється, і на це місце може бути завантажена інша задача. Таким чином, в довільний момент часу оперативна пам'ять являє собою випадкову послідовність зайнятих і вільних ділянок (розділів) довільного розміру.
Завданнями операційної системи при реалізації даного методу керування пам'яттю є: ведення таблиць вільних і зайнятих областей, у яких вказуються початкові адреси і розміри ділянок пам'яті, при надходженні нової задачі - аналіз запиту, перегляд таблиці вільних областей і вибір розділу, розмір якого достатній для розміщення завдання, завантаження завдання у виділений їй розділ і коректування таблиць вільних і зайнятих областей, після завершення завдання коректування таблиць вільних і зайнятих областей.
Програмний код не переміщається під час виконання, тобто може бути проведене одноразове настроювання адрес за допомогою використання переміщувача завантажувача.
Вибір розділу для завдання, яке знову надійшло, може здійснюватися за різними правилами, такими, наприклад, як "перший-ліпший розділ достатнього розміру", або "розділ, що має найменший достатній розмір", або "розділ, що має найбільший достатній розмір". Всі ці правила мають свої переваги і недоліки.
У порівнянні з методом розподілу пам'яті фіксованими розділами даний метод має набагато більшу гнучкість, але йому властивий дуже серйозний недолік - фрагментація пам'яті. Фрагментація - це наявність великого числа несуміжних ділянок вільної пам'яті дуже маленького розміру (фрагментів).
Переміщувані розділи
Одним з методів боротьби з фрагментацією є переміщення всіх зайнятих ділянок у бік старших або у бік молодших адрес, так, щоб вся вільна пам'ять утворювала єдину вільну область (рисунок 2.4). На додаток до функцій, які виконує ОС при розподілі пам'яті змінними розділами, в даному випадку вона повинна ще час від часу копіювати вміст розділів з одного місця пам'яті в інше, коректуючи таблиці вільних і зайнятих областей. Ця процедура називається "стисненням". Стиснення може виконуватися або при кожному завершенні задачі, або тільки тоді, коли для завдання, яке надійшло знову немає вільного достатнього розділу. У першому випадку потрібно менше обчислювальної роботи при коректуванні таблиць, а в другому - рідше виконується процедура стискування. Так як програми переміщаються по оперативної пам'яті в ході свого виконання, то перетворення адрес з віртуальної форми у фізичну повинно виконуватися динамічним способом.
Рис. 2.4. Розподіл пам'яті переміщуваними розділами
Хоча процедура стиску і приводить до більш ефективного використання пам'яті, вона може вимагати значного часу, що часто переважує переваги даного методу.