сторінковий обмін

Своппінг стає можливим завдяки тому, що далеко не всі, що зберігається в пам'яті системи, використовується одночасно. У кожен заданий момент виповнюється тільки частина програмного забезпечення, і воно працює тільки з частиною даних.

Це призводить нас до ідеї багатошаровою або багаторівневої пам'яті, коли в швидкій пам'яті зберігаються часто використовувані код або дані, а рідко використовувані поступово мігрують на більш повільні пристрої. Природно, для того щоб автоматизувати даний процес ми повинні мати якийсь легко формалізується критерій, за яким визначається, які дані вважаються рідко використовуваними.

При цьому алгоритм автомата повинен бути якомога простішим. Один простий критерій вибору очевидний - за інших рівних умов, в першу чергу, ми повинні вибирати в якості жертви для видалення той об'єкт, який не був змінений за час життя в швидкої пам'яті.

Найпростіший алгоритм - викидати випадково обраний об'єкт. Можна також видаляти те, що найдовше перебуває в даному шарі пам'яті, використовуючи алгоритм FIFO. Видно, що це вже трохи складніше випадкового видалення - потрібно запам'ятовувати, коли ми що завантажували. Зрозуміло також, що це лише дуже грубе наближення до того, що нам потрібно. Найбільш чесним буде видаляти той об'єкт, до якого найдовше не було звернень минулого - LRU (Least Recently Used). Мінус: в апаратної реалізації лічильника звернення для кожної сторінки і сегмента пам'яті.

У разі, коли пам'яті не вистачає, програмою майже на кожній команді потрібна нова сторінка, і продуктивність системи катастрофічно - в тисячі разів - падає. Це називається оверсвоппінг (overswap) - дуже велика ВП, а ОП маленька - нестача сторінок, постійно вирішуються завдання переміщення і заміщення.