Мені потрібно прокоментувати коментарі до цього питання, зокрема плутанину між "таблицею сторінки" та "файлом сторінки". Це не відповідь, але вона не впишеться у вільний простір для коментарів.
"Таблиця сторінок" - це справді зовсім інша річ від файлу сторінки. Якщо n МБ оперативної пам’яті використовується для табличних сторінок, це не означає, що ви використовуєте n МБ простору файлів сторінок . І хоча деякі записи табличних сторінок (PTE, з яких складаються таблиці сторінок) стосуються вмісту файлу сторінок, але не всі.
Таблиці сторінок - це структури пам'яті, які використовуються MMU ЦП для здійснення перекладу адрес з віртуальних адрес (знову ж таки, не файл сторінки) на фізичні адреси, а ОС - для відстеження віртуального адресного простору та допомоги у вирішенні помилок сторінки. Таблиці сторінок складаються з записів таблиці сторінок (PTE). Кожна PTE займає 8 байт і визначає 4 К байт віртуального адресного простору - тобто однієї віртуальної сторінки. Приблизно є одна PTE для кожної не вільної сторінки віртуального адресного простору.
До речі, хоча файл сторінки може відчувати як зовнішню, так і внутрішню фрагментацію (перший зазвичай не представляє особливих проблем; другий можна вдосконалити, зробивши його приблизно в чотири рази більшим, ніж потрібно), таблиці сторінок не можуть. Вони начебто завжди фрагментовані, і це не має значення ні в чому.
Кожен PTE має "дійсний" біт. Для "дійсних", також "резидентних" сторінок, PTE містить номер фізичної сторінки, який відповідає номеру віртуальної сторінки, який пов'язаний з PTE; цим використовується безпосередньо ММУ.
Для "недійсних" сторінок MMU викликає помилку на сторінці, і PTE має багато можливих форматів та інтерпретацій.
Примітка. Все вищезазначене стосується будь-якої операційної системи, яка дозволяє перейти на сторінку x86 / x64. Далі багато в чому характерно для Windows, але багато концепцій стосуються інших ОС, з різницею деталей реалізації.
Для сторінки в кеш-сторінках PTE все ще містить номер фізичної сторінки. Для сторінок, які були втрачені з оперативної пам’яті та записані у файл сторінки, PTE містить номер файлу сторінки та зсув у файлі сторінки, де був записаний вміст сторінки. Інший можливий вміст PTE - це посилання на дескриптори віртуальної адреси , посилання на "прототип PTE", посилання на нульові сторінки тощо, в які я не збираюся потрапляти. Досить сказати, що лише деякі PTE стосуються місць у файлах сторінок.
Я згадую все це здебільшого, щоб показати, що файл сторінки та таблиці сторінок, хоча вони пов'язані, напевно, не є одним і тим же.
Таблиці сторінок організовані в структуру дерева. Для кожного процесу існує таке дерево, або колекція таблиць сторінок, - це те, що дозволяє кожному процесу визначати власний екземпляр віртуального адресного простору. Таблиця сторінок у корені дерева повинна постійно знаходитися в оперативній пам’яті. Інші користуються сторінкою; вони навіть не існують там, де вони відповідали б великим (мінімум 2 Мб) регіонам невизначеного або вільного віртуального адресного простору.
Записи таблиці сторінок у таблицях на «листках» дерева відповідають сторінкам віртуального адресного простору. PTE-таблиці в таблицях вищого рівня - ті, що ближче до кореня (і самого кореня) - повідомляють, де розташовані наступні таблиці нижчого рівня (якщо вони взагалі існують).
Кількість, показана RAMmap, - це фізична пам'ять (RAM), зайнята всіма резидентними таблицями (в оперативній пам'яті) для всіх процесів плюс ОС.
Тут важливо те, що система в OQ мала 2,5 ГБ оперативної пам’яті, пов’язаної із таблицями сторінок. Це означає, що як мінімум визначено 2,5 ГБ таблиць сторінок. Оскільки таблиці сторінок самі є сторінковими, то віртуальний розмір може бути набагато більшим, ніж фізичний розмір, що все, що нам може показати RAMmap. Але припустимо, що це "лише" 2,5 Гб. В восьми байт на PTE, що становить близько 320 мільйонів PTE. Оскільки кожна PTE визначає одну сторінку - 4 К байт - віртуального адресного простору, це означає, що більше 1,2 терабайт віртуального адресного простору визначається таблицями сторінок в пам'яті .
Це не неможливо, але це досить багато.
Для довідки, у моїй системній атм є близько 125 Мб оперативної пам’яті у табличних сторінках. Це означатиме лише близько 65 ГБ віртуального адресного простору. Моє фактичне віртуальне використання набагато вище (125 ТБ лише для процесів), але це тому, що більшість таблиць сторінок не мають оперативної пам’яті. "Великі сторінки", інша річ, яку я не повинен тут вникати, також може допомогти врахувати різні співвідношення між розмірами таблиць сторінок та розміром віртуального адресного простору, що використовується.
Отже: Щоб знайти винуватця, я спершу заглянув у Монітор продуктивності під категорію «Процес» для процесів з високим лічильником «Віртуальних байт».