в процесі виконання задачі, то адреси фізичних осередків можуть змінюватися. При правильному застосуванні такі зміни можуть поліпшити використання пам'яті, позбавивши програміста від деталей керування нею, і навіть збільшити надійність обчислень.
Якщо розглядати загальну схему двохетапного відображення адрес, то з позиції співвідношення обсягів згаданих адресних просторів можна відзначити наявність наступних трьох ситуацій:
- обсяг ВАП програми Vv менше обсягу фізичної пам'яті Vp;
- Vv = Vp;
-Vv > Vp.
Перша ситуація, при якій Vv < Vp, нині практично не зустрічається, але проте це реальне співвідношення. Скажемо, не дуже давно 16-розрядні міні-ЕОМ мали систему команд, у яких користувачі-програмісти могли адресувати до 216°(64) До адрес (звичайно в якості адресованій одиниці виступала комірка пам'яті розміром з байт). А фізично старші моделі цих міні-ЕОМ могли мати обсяг ОП в трохи мегабайт. Звертання до пам'яті настільки великого обсягу здійснювалося за допомогою спеціальних регістрів, вміст яких складався з адреси операнда (чи команди), що витягається і/чи обумовленим з поля чи операнда (чи з покажчика команди). Відповідні значення в ці спеціальні регістри, що виступають як базовий зсув у пам'яті, заносила ОС. Для однієї задачі в регістр заносилося одне значення, а для другої третьої, четвертої і т.д. задачі, розташовуваної одночасно з першої, але в іншій області пам'яті, заносилося, відповідно, інше значення. Уся фізична пам'ять, таким чином, розбивалася на розділи обсягом по 64 Кбайт, і на кожен такий розділ здійснювалося відображення свого ВАП.
Ситуація, коли Vv = Vp зустрічалася досить часто, особливо характерна вона була для недорогих обчислювальних комплексів. Для цього випадку мається велика кількість методів розподілу ОП.
Нарешті, у наш час ми вже досягли того, що ситуація Vv > Vp зустрічається навіть у ПК, тобто в найпоширеніших і недорогих комп'ютерах. Тепер це найпоширеніша ситуація, і для неї мається кілька методів розподілу пам'яті, що відрізняються як складністю, так і ефективністю.
1.4. Свопінг
Свопінг – алгоритм реалізації віртуальної пам'яті. Його можна розбити на три частини: керування простором на пристрої вивантаження, вивантаження процесів з основної пам'яті і підкачування процесів в основну пам'ять. Як пристрій вивантаження використовують розділ на пристрої типу твердого (swap-partition) чи дисковий файл (swap-file) на такому пристрої.
Свопінг є різновидом ВП.
На рис. 18 показаний графік залежності коефіцієнта завантаження процесора в залежності від числа одночасно виконуваних процесів і частки часу, проведеного цими процесами в стані чекання в/в.
Рис. 18. Залежність завантаження процесора від числа задач і інтенсивності в/в.
З рисунка видно, що для завантаження процесора на 90% досить всього трьох рахункових задач. Однак для того, щоб забезпечити таке ж завантаження інтерактивними задачами, що виконують інтенсивне в/в, будуть потрібні десятки таких задач. Необхідною умовою для виконання задачі є завантаження її в ОП, обсяг якої обмежений. У цих умовах був запропонований метод організації обчислювального процесу, названий свопінгом. Відповідно до цього методу деякі процеси (звичайно знаходяться в стані чекання) тимчасово вивантажуються на диск. Планувальник ОС не виключає їх зі свого розгляду, і при настанні умов активізації деякого процесу, що знаходиться в області свопінга на диску, цей процес переміщається в ОП. Якщо вільного місця в ОП не вистачає, то вивантажується інший процес.
При свопінгу, на відміну від розглянутих раніше методів реалізації ВП процес переміщається між пам'яттю і диском цілком, тобто протягом деякого часу процес може бути цілком відсутнім в ОП. Існують різні алгоритми вибору процесів на завантаження і вивантаження, а також різні способи виділення ОП і дискової пам'яті процесу, що завантажується.
2. Оверлейні структури програм
Якщо є необхідність створити програму, логічний (і віртуальний) адресний простір якої має бути більший, ніж вільна область пам’яті, або навіть більший, ніж весь можливий об’єм ОП, то використовують розподіл з перекриттям, так звані оверлейні структури. Цей метод розподілу передбачає, що вся програма може бути розбита на частини – сегменти. Кожна оверлейна програма має одну головну частину (main) і декілька сегментів (segment), при цьому в пам’яті машини одночасно можуть знаходитись тільки її головна частина і один або декілька не перекриваючих сегментів.
Поки в ОП знаходяться виконуючі сегменти, інші знаходяться в зовнішній пам’яті. Після того як текучий сегмент завершив своє виконання, можливі два варіанти:
1) або він сам (якщо даний сегмент непотрібно в зовнішній пам’яті в його текучому стані) звертається до ОС з указівкою який сегмент повинен бути завантажений в пам’ять наступний.
2) або він повертає управління головному сегменту програми (в модуль main), і уже той звертається до ОС з указівкою, який сегмент зберегти (якщо потрібно), а який сегмент завантажити в ОП, і знову віддає управління одному з сегментів що знаходяться в пам’яті. Найпростіша схема сегментування передбачає, що в пам’яті у кожний конкретний момент часу може знаходитися тільки один сегмент (разом із модулем main). Більш складні схеми, які використовують у великих обчислювальних системах, дозволяють розміщувати по декілька сегментів. В деяких обчислювальних комплексах можуть бути окремо сегменти коду і сегменти даних. Сегменти коду як правило не терплять змін в процесі свого виконання, тому при завантаженні нового сегмента коду на місце опрацьованого, останній може не зберігатись в зовнішній пам’яті, на відміну від сегмента даних, який обов’язково зберігати.
3. Методи розподілу пам'яті без використання дискового простору
Усі методи керування пам'яттю можуть бути розділені на два класи: методи, що використовують переміщення процесів між ОП і диском, і методи, що не роблять цього (рис. 19). Почнемо з останнього,