Вы затронули интересную тему. Ответ может быть длинным, но я постараюсь быть кратким насколько это возможно.
Как вы наверное уже знаете, в Linux существует понятие "виртуальной памяти". Такой прием позволяет работать с гораздо большими объемами памяти, чем физически имеется в системе. Особенно это было актуально раньше, когда память была дорогой и ее никогда не хватало. Тем не менее, концепция виртуальной памяти пережила несколько поколений современных систем и значительно эволиционировала.
Смотрите, вот как приблизительно работает виртуальная память. Линукс рассматривает файл подкачки (swap) и физическую память как одно адресное пространство. Работает это примерно так:
В адресном пространстве, с которым проходит вся работа, память разделяется на страницы, которые называются VPNF - Virtual Page Frame Numbers. Реальная физическая память тоже имеет страницы, назыаются они PFN - Physical Frame Numbers. Что бы обратиться к физической памяти, процессор сначала обращается к так называемой "Page Table" - специальной таблице, в которой хранится соответствие виртуальных адресов памяти физическим.
При обращении к этой таблице воможны разные варианты. Например, страница памяти может быть не найдена. Причин как правило две:
- Адреса нет (то есть процессор обратился к несуществующей странице) и в таком случае процесс просто умирает по причине PAGE FAULT
- Страницы нет, потому что она не была считана с диска. В таком случае так же выводится PAGE FAULT, процессор переключается на другие задачи, а параллельно ядро считывает с диска недостающие данные
Так вот, такой подход, когда в памяти хранятся не все данные, а только те, которае наиболее часто востребованы и называется Demand Paging.