1.Страніца, до якої було звернення, не є фіксованою.
2.Проізошло порушення захисту.
3.Запісь в спільно використовувану сторінку.
4.Стеку потрібна додаткова пам'ять.
5.Страніца, до якої було звернення, є фіксованою, але в насто-ящий момент вона не завантажена в пам'ять.
Заміна сторінок відбувається наступним чином. Система намагається підтримувати певну кількість вільних сторінок в пам'яті, щоб, коли станеться сторінкове переривання, вільна сторінка могла бути знайдена негайно, без необхідності спочатку записати кілька інших сторінок на диск. В результаті застосування такої стратегії більшість сторінкових переривань задовольня-ються за допомогою всього однієї дискової операції (читання сторінки з диска), хоча іноді доводиться виконувати дві операції (запис на диск «брудної» сторінки, після чого з диска читається потрібна сторінка). Звичайно, сторінки, які поповнюють список вільних сторінок, повинні звідкись надходити. Тому справжня робота алгоритму заміщення сторінок характери-зуется тим, як ці сторінки забираються у процесів і поміщаються в список сво-Бодня сторінок.
В системі підкачки активно використовує-ся поняття робочого набору. У кожного процесу (не у кожного потоку) є робо-чий набір. Цей набір складається з відображених сторінок, що знаходяться в пам'яті, при зверненні до яких, отже, не відбувається сторінкових переривань. Розмір і склад робочого набору, природно, змінюються в міру роботи процесу. Робочий набір кожного процесу описується двома параметрами: минималь-ним і максимальним розмірами. Ці розміри не є жорсткими межами. Процес може мати в пам'яті менше сторінок, ніж значення нижньої межі, або (за певних обставин) більше встановленого максимуму. Спочатку ці кордони однакові для кожного процесу, але вони можуть змінюватися з часом. Початкове значення мінімуму за замовчуванням знаходиться в діапазоні від 20 до 50 сторінок, а початкове значення максимуму за замовчуванням знаходиться в діапазоні від 45 до 345 сторінок, в залежності від загального обсягу оперативної па-мяти. Значення за замовчуванням можуть бути змінені системним адміністратором.
Раз в секунду виділений демон-потік ядра, званий менеджером балансового безлічі. перевіряє, доста-точно чи в системі вільних сторінок. Якщо вільних сторінок менше, ніж нуж-но, він запускає менеджер робочих наборів. який досліджує робочі набори і звільняє додаткові сторінки. Менеджер робочих наборів спочатку визначає порядок, в якому потрібно досліджувати процеси. В першу чергу сторінки віднімаються у великих процесів, які діяли протягом довгого часу. В останню чергу розглядається процес переднього плану. Потім менеджер робочих наборів починає дослідження процесів в обраний-ном порядку. Якщо робочий набір процесу в даний момент виявляється мен-ше свого нижньої межі або з моменту останньої інспекції число страніч-них переривань у цього процесу було вище певного рівня, то сторінки у нього не віднімаються. В іншому випадку менеджер робочих наборів забирає у процесу одну або кілька сторінок. Кількість забираються у процесу стра-ниць досить складним чином залежить від загального обсягу ОЗУ, а також від того, наскільки багато потрібно пам'яті поточним процесам, і від того, як розмір поточного робітничо-го набору співвідноситься з верхнім і нижнім межами, і крім того від інших парамет-рів. Всі сторінки розглядаються по черзі.
На однопроцессорной машині якщо біт звернень до сторінці скинутий, то лічильник, пов'язаний зі сторінкою, збільшується на одиницю. Якщо цей біт уста-новлено в одиницю, лічильник обнуляється. Після сканування з робочого набору видаляються сторінки з найбільшими значеннями лічильника. Потік продовжує изу-чати процеси, поки він не вивільнить достатньої кількості сторінок, після чого він зупиняється. Якщо повний перебір всіх процесів не привів до звільнення достатнього числа сторінок, менеджер робочих наборів розпочинає другий прохід, на якому він уже при необхідності забирає сторінки у процесів, розмір робочого набору кото-яких менше мінімального.
На многопроцессорной машині алгоритм, заснований на перевірці біта звертання-ний, вже не працює, так як, хоча поточний центральний процесор не звертався останнім часом до даної сторінки, до неї могли звертатися інші централь-ні процесори. Дослідження ж бітів звернень всіх центральних процесо-рів є занадто дороге задоволення. Тому біт звернень взагалі не враховується, а видаляються найстаріші сторінки.
Слід зазначити, що з точки зору процедури заміни сторінок операцион-ва система сама розглядається як процес. Вона володіє сторінками і у неї також є робочий набір. Цей робочий набір теж може бути зменшений. Одна-ко деякі частини системи і невивантажуваного пул фіксовані в пам'яті і не можуть розвантажуватися ні за яких обставин.
Кожна сторінка пам'яті знаходиться в одному або НЕ-скількох робочих наборах або в одному з п'яти списків. У списку «чистих» (резервних) і в списку «брудних» (модифікованих) сторінок враховуються сторінки, які недавно були видалені з робочих званих вели-рів, але все ще знаходяться в пам'яті і все ще асоційовані з процесами, ис-користуватися їх. Різниця між ними полягає в тому, що у чистих сторінок є копія на диску, тоді як у модифікованих сторінок таких копій немає, і ці сторінки ще належить зберегти. У список вільних сторінок входять чи-стие сторінки, вже не асоційовані з жодними процесами. У список обну-ленних сторінок входять сторінки, які не асоційовані з жодними процесами і заповнені нулями. П'ятий список складається з фізично дефектних сторінок пам'яті. Це гарантує, що ці сторінки ні для чого не використовуються.
Сторінки переміщаються між робочими наборами і різними списками менеджером робочих наборів та іншими потоками-демонами ядра. Розглянемо ці переходи. Коли менеджер робочих наборів видаляє сторінку з робочого набору, сторінка потрапляє на дно списку чистих сторінок або списку модифікований-них сторінок в залежності від свого стану. В обох списках зберігаються дійсні сторінки, тому якщо про-виходить сторінкове переривання і потрібно одна з цих сторінок, вона видаляється зі списку і повертається в свій робочий набір без операції дискового введення-виведення. Коли процес завершує свою роботу, то всі його сторінки, які не використовуються іншими процесами, потрапляють в список вільних сторінок. Ці сторінки вже не асоційовані з будь-яким процесом і не можуть повер-татися в робочі набори по сторінкового переривання. Інші переходи викликаються іншими демонами. Один раз в 4 секунди запускається потік свопера в пошуках процесу, все потоки якого діяли протягом визна-діленого інтервалу часу. Якщо йому вдається знайти такі процеси, він відкріплює стеки цих процесів і переміщує сторінки процесів в списки «чистих» і «брудних» сторінок.
Два інших демона, демон записи відображених сторінок і демон записи моди-ваних сторінок. активізуються час від часу, щоб перевірити, доста-точно чи чистих сторінок. Якщо кількість чистих сторінок нижче певного рівня, вони беруть сторінки з верхньої частини списку модифікованих сторінок, записують їх на диск, а потім розміщують їх у список «чистих» сторінок. Пер-вий демон займається записом в відображаються файли, а другий пише сторінки в файли підкачки. В результаті їх діяльності «брудні» сторінки стають «чистими».
Причина наявності двох демонів, що займаються очищенням сторінок, укладаючи-ється в тому, що відображається на пам'ять файл може вирости в результаті записи в нього. При цьому зростання будуть потрібні нові вільні блоки диска. Відсутність в пам'яті вільного місця для запису в нього сторінок може привести до взаємо-блокування. Другий потік може вивести ситуацію з глухого кута, записуючи страни-ці в файл підкачки, який ніколи не збільшується в розмірах.
Якщо процес звільняє сторінку, ця сторінка більше не пов'язана з процесом і може бути поміщена в список свобод-них сторінок, якщо тільки вона не використовується спільно іншими процесами. Коли сторінкове переривання вимагає сторінковий блок, щоб помістити в нього сторінку, яка повинна бути зчитана, цей блок по можливості береться зі списку вільних сторінок. Не має значення, що ця сторінка може все ще містити конфіденційну інформацію, так як вся вона буде тут же цілком переписана. При збільшенні стека ситуація складається інша. В цьому випадку потрібно порожній сторінковий блок і правила безпеки вимагають, щоб сторінка містила всі нулі. З цієї причини інший демон ядра - потік обнулення сторінок - працює з мінімальним пріоритетом, стираючи вміст сторінок в списку вільних сторінок і поміщаючи їх в список обнулення сторінок. Коли центральний процесор простоює і в списку вільних сторінок є сторінки, потік обнулення сторінок може обнуляти їх, так як обнулення сторінка корисніша, ніж просто вільна сторінка.
Отже, управління пам'яттю є дуже складну підсистему з великою кількістю структур даних, алгоритмів і евристичних методів. Багато в чому вона є саморегулівної, але у неї є також багато механізмів, які може використовувати системний адміністратор, щоб впливати на про-тивність системи. Слід підкреслити, що управління пам'яттю в реальних системах набагато складніше простого алгоритму підкачки, на кшталт алгоритму годин або алгоритму старіння.