Файл подкачки
Файл подкачки (он же своп, виртуальная память, страничный файл или, по-аглицки, page file, swap file/swap space) — это такая хитрая фича операционок, которая позволяет им делать вид, будто у них оперативки больше, чем есть на самом деле. По сути, это просто файл на жестком диске (или СДД, если ты не ламер), куда ОС сливает всякий шлак из ОЗУ, когда той становится мало. Или когда ей кажется, что ей мало. В лучших традициях мелкософта, разумеется.
Найти его можно, если копнуть проводником (или, если ты настоящий олдфаг, Тотал Коммандером) в корне системного диска и включить отображение скрытых и системных файлов. Обычно он называется pagefile.sys в Винде и живет прямо в корне C:\. Или не в корне, если его туда заботливый админ перенес. Размерчик у него может быть весьма внушительный, что иногда вызывает недоумение у школьников и прочих блондинок от IT, особенно когда физической памяти вроде бы завались, а эта хрень занимает гигабайты на HDD или, упаси Б-г, на SSD.
Историческая справка, или Как Мелкософт с DOS’ом бодался[править]
Если копнуть в глубь истории виндовс, аж до тройки, можно обнаружить занятный факт: первые версии форточек работали поверх MS-DOS (или совместимых с ним систем). И во многом полагались именно на физическую оперативку, приправляя ее всякими ХАЙМЕМами и прочим ДОСовским шаманством.
Но с выходом третьей винды случился эпический скандал. В установочнике и в самом WIN.COM был зашит кусок кода, который намеренно препятствовал запуску и установке форточек на системах, отличных от MS-DOS. Яркий пример — DR-DOS. Этот код позднее прозвали AARD (по первым буквам имени программиста Аарона Р. Рейнольдса, который этот кусок говна запилил), и он выдавал псевдослучайные ошибки, намекая, что винда тут не запустится. Такой себе аналог современного BSOD для тех, кто юзал конкурирующие ОС.
Владелец DR-DOS, компания Caldera Inc., не оценила такого юмора и в 1996 году подала на Мелкософт в суд. Иск был не один, претензий набралось аж пять штук, и одна из них как раз касалась этого самого AARD-кода. Судебная тяжба тянулась аж до двухтысячного, и в итоге Microsoft пришлось раскошелиться на 280 миллионов долларов. Это вам не DMCA, тут все серьезно было.
К слову, винда 95 официально просила аж целых 8 мегабайт ОЗУ (уже солидно по тем временам!). 98-я уже 24 мегабайта, а ХР — целых 64-128 мегабайт! А вот с виндой 11 системные требования стали ну очень уж абсурдными. Говорят, ей надо минимум 64 гигабайта свободного места на диске для установки. За что, какого Хуанхэ?! Она прекрасно себя чувствует и на 15-20 гигах после установки. Ну да, там есть UWP-приложения, всякий телеметрический мусор и прочее, но все равно! Ощущение, что они просто с запасом пишут, как будто у всех винты терабайтами меряются.
Как это работает (для тех, кто не в танке)[править]
Если отойти от исторических лулзов и вернуться к нашему барану файлу подкачки, то по сути его работа сводится к пейджингу. Это такой механизм, при котором ОС делит оперативную память на мелкие кусочки, называемые страницами (page). Когда оперативка забивается (или ей так кажется, опять же привет, мастдай!), система начинает «выгружать» наименее используемые страницы из ОЗУ в этот самый файл на диске. А когда какая-то программа внезапно вспоминает, что ей нужна выгруженная страница, ОС «подгружает» ее обратно из файла подкачки в ОЗУ, выпихивая при этом другую, менее нужную страницу. Такой вот круговорот данных в природе.
В ранних виндовс, типа тройки, этот файл, который тогда назывался WIN386.SWP (временный, стационарный файл подкачки появился позже), был довольно примитивен. Он просто суммировал объем физической ОЗУ и свой размер, выдавая это за общее количество доступной памяти. В 95-й он уже стал чутка умнее, используя VMM32 и VCACHE, и старался использовать своп только тогда, когда физическая ОЗУ действительно кончалась. Но все равно марал диск своими данными при каждом удобном случае.
Начиная с ХР, процесс стал более продвинутым. Появилась Prefetch, которая кешировала часто запускаемые программы в ОЗУ для ускорения их запуска. А с Вистой добавилась Superfetch, которая анализировала поведение юзера и подгружала данные в ОЗУ заранее, и ReadyBoost, позволяющая использовать флешки и карты памяти как кэш для ускорения работы с диском и, соответственно, со свопом.
Современные виндовс (7, 8, 10, 11) стали еще умнее в плане работы с памятью. С появлением быстрых SSD и NVMe скорость работы с файлом подкачки значительно возросла. Система реже прибегает к активному свопингу при большом объеме ОЗУ, но полностью отказываться от него не спешит.
Так есть ли смысл от файла подкачки? Нужен ли он сегодня?[править]
Святой Грааль всех ламеров и гуру оптимизации — отключить файл подкачки! Мол, у меня 32 (или 64, или 128!) гигабайта ОЗУ, зачем мне эта хрень, тормозящая SSD?!
А вот и не угадал! Даже при наличии большого объема ОЗУ, файл подкачки все еще необходим для стабильной работы винда. Почему?
- Подстраховка при нехватке ОЗУ: Да, у тебя много ОЗУ, но запусти лису с сотней вкладок, Фотошоп с огромным файлом, виртуалку, пару-тройку игрушек и оставь их висеть в фоне. Внезапно окажется, что даже 32 гига могут закончиться, и система начнет задыхаться. Вот тут-то на помощь и приходит своп, позволяя ей не рухнуть сразу, а «выгрузить» неактивные данные на диск. Без свопа программы начнут аварийно завершаться с ошибками нехватки памяти.
- Обработка исключений и дампы памяти: При синем экране смерти (а он, поверь, рано или поздно случится) винда пытается сохранить содержимое ОЗУ в файл на диске — так называемый дамп памяти. Этот дамп нужен, чтобы потом специалист мог проанализировать, что же пошло не так. Куда сохраняется дамп? Правильно, в файл подкачки или специальный файл дампа. Без файла подкачки адекватный дамп получить будет невозможно.
- Особенности работы некоторых программ: Есть софтины, которые изначально рассчитаны на использование виртуальной памяти и могут некорректно работать или даже вылетать без файла подкачки, даже если физической ОЗУ более чем достаточно.
- Оптимизация работы ОС: Винда, даже современная, использует файл подкачки не только при острой нехватке ОЗУ. Она может выгружать на диск наименее критичные системные процессы или неактивные части программ, чтобы освободить место в быстрой ОЗУ для более активно используемых данных. Это, в теории, должно ускорять работу системы, хотя на быстрых SSD разница может быть не так заметна.
Например, на Windows XP с 256 МБ ОЗУ система по дефолту создавала pagefile размером примерно в три раза больше ОЗУ. При 1 ГБ ОЗУ рекомендованный размер pagefile уже меньше тройного, а при 2 ГБ ОЗУ и выше он перестает увеличиваться в три раза, и становится ближе к удвоенному или просто фиксированному значению. Как метко подметили в книге «Внутреннее устройство Windows»:
Собственно, даже если страничного файла [так называется «файл подкачки» в переводе от Питера] не будет, Windows всё равно будет использовать виртуальную память.
Но использование именно файла подкачки на диске добавляет гибкости и стабильности.
Программа SoftRAM 95, или Как вас пытались наебать[править]
Отдельного упоминания стоит легендарная SoftRAM 95. Эта софтина, появившаяся аккурат к выходу 95-й, обещала удвоить вашу оперативную память программным путем. Звучало магически, продавалось как горячие пирожки.
На деле же это была пустышка. Софтина просто переставляла местами некоторые данные в ОЗУ и файле подкачки, создавая иллюзию свободного места и активности, но на самом деле только замедляя систему и вызывая сбои. Ее красивые графики были фальшивыми, а сам алгоритм работы вызывал у инженеров Майкрософт лишь смех сквозь слезы (иногда реальные, когда им звонили ламеры с жалобами на зависшую винду). В итоге компания-издатель обанкротилась под тяжестью исков и антирекламы.