В компьютерных операционных системах, подкачка памяти является управление памятью схема, по которой компьютер хранит и данные извлекает из вторичной памяти для использования в основной памяти. В этой схеме операционная система извлекает данные из вторичного хранилища в блоках одинакового размера, называемых страницами. Пейджинг - важная часть реализаций виртуальной памяти в современных операционных системах, использующая вторичное хранилище, позволяющее программам превышать размер доступной физической памяти.
Для простоты основная память называется «RAM» (аббревиатура от слова « оперативная память» ), а вторичная память - «диск» (сокращение от жесткого диска, барабанной памяти или твердотельного накопителя и т. Д.), Но как и в случае с многие аспекты вычислений, концепции не зависят от используемых технологий.
Ферранти представил в Атласе разбиение на страницы, но первые страницы памяти массового рынка были концепциями компьютерной архитектуры, независимо от того, перемещалась ли страница между ОЗУ и диском. Например, на PDP-8 7 битов инструкции содержали адрес памяти, в котором выбрано одно из 128 (2 7) слов. Эта зона памяти получила название страницы. Этот термин сейчас используется редко. В 1960-х годах своппинг был одним из первых методов виртуальной памяти. Вся программа будет «выгружена» (или «развернута») из ОЗУ на диск, а другая будет заменена (или свернута). Выгруженная программа будет текущей, но ее выполнение будет приостановлено, пока ее оперативная память будет использоваться другой программой.
Программа может включать несколько оверлеев, которые занимают одну и ту же память в разное время. Наложения - это не метод подкачки RAM на диск, а просто минимизация использования RAM программой. Последующие архитектуры использовали сегментацию памяти, и отдельные программные сегменты стали единицами обмена между диском и ОЗУ. Сегмент представлял собой весь сегмент кода программы или сегмент данных, а иногда и другие большие структуры данных. Эти сегменты должны были быть смежными, когда они были размещены в ОЗУ, что требовало дополнительных вычислений и перемещения для устранения фрагментации.
Изобретение таблицы страниц позволило процессору работать с произвольными страницами в любом месте ОЗУ как с кажущимся непрерывным логическим адресным пространством. Эти страницы стали единицами обмена между диском и ОЗУ.
Когда процесс пытается сослаться на страницу, которая в настоящий момент отсутствует в ОЗУ, процессор рассматривает эту недопустимую ссылку на память как ошибку страницы и передает управление от программы к операционной системе. Операционная система должна:
Когда все страничные фреймы используются, операционная система должна выбрать страничный фрейм для повторного использования для страницы, которая теперь нужна программе. Если вытесненный страничный фрейм был динамически выделен программой для хранения данных или если программа изменила его с момента считывания в ОЗУ (другими словами, если он стал «грязным»), он должен быть записан на диск перед тем, как быть освобожден. Если программа позже ссылается на удаленную страницу, возникает еще одна ошибка страницы, и страница должна быть считана обратно в ОЗУ.
Метод, используемый операционной системой для выбора кадра страницы для повторного использования, который является ее алгоритмом замены страницы, важен для эффективности. Операционная система предсказывает, что страничный фрейм с наименьшей вероятностью понадобится в ближайшее время, часто с помощью алгоритма наименее недавно использованного (LRU) или алгоритма, основанного на рабочем наборе программы. Чтобы еще больше повысить скорость отклика, системы подкачки могут предсказать, какие страницы потребуются в ближайшее время, предварительно загружая их в ОЗУ до того, как на них обратится программа.
После завершения инициализации большинство программ работают с небольшим количеством страниц кода и данных по сравнению с общим объемом памяти, который требуется программе. Наиболее часто используемые страницы называются рабочим набором.
Когда рабочий набор составляет небольшой процент от общего числа страниц системы, системы виртуальной памяти работают наиболее эффективно, и незначительное количество вычислений тратится на устранение ошибок страниц. По мере роста рабочего набора устранение ошибок страниц остается управляемым, пока рост не достигнет критической точки. Затем количество ошибок резко возрастает, и время, затрачиваемое на их устранение, превышает время, потраченное на вычисления, для которых была написана программа. Это состояние называется обмолачиванием. Переработка происходит в программе, которая работает с огромными структурами данных, поскольку ее большой рабочий набор вызывает постоянные сбои страниц, которые резко замедляют работу системы. Для устранения ошибок страниц может потребоваться освобождение страниц, которые вскоре придется перечитывать с диска. «Обмолачивание» также используется в контекстах, отличных от систем виртуальной памяти; например, чтобы описать проблемы с кешем в вычислениях или синдром глупого окна в сети.
Наихудший случай может произойти с процессорами VAX. Один MOVL, пересекающий границу страницы, может иметь исходный операнд, использующий режим отложенной адресации смещения, где длинное слово, содержащее адрес операнда, пересекает границу страницы, и операнд назначения, использующий режим отложенной адресации смещения, где длинное слово, содержащее адрес операнда, пересекает граница страницы, а источник и место назначения могут пересекать границы страницы. В этой единственной инструкции содержится ссылка на десять страниц; если не все находятся в ОЗУ, каждый вызовет ошибку страницы. При возникновении каждой ошибки операционная система должна выполнять обширные процедуры управления памятью, что может вызвать несколько операций ввода-вывода, которые могут включать запись других страниц процесса на диск и чтение страниц активного процесса с диска. Если операционная система не может выделить десять страниц для этой программы, то при устранении ошибки страницы будет отброшена другая страница, в которой нуждается инструкция, и любой перезапуск инструкции снова приведет к ошибке.
Чтобы уменьшить чрезмерное количество страниц и решить проблемы с перегрузкой, пользователь может увеличить количество страниц, доступных для каждой программы, либо за счет одновременного запуска меньшего числа программ, либо за счет увеличения объема ОЗУ на компьютере.
При многопрограммировании или в многопользовательской среде многие пользователи могут выполнять одну и ту же программу, написанную так, что ее код и данные находятся на отдельных страницах. Чтобы свести к минимуму использование оперативной памяти, все пользователи используют одну копию программы. Таблица страниц каждого процесса настроена таким образом, что страницы с адресным кодом указывают на одну общую копию, а страницы с адресом данных указывают на разные физические страницы для каждого процесса.
Различные программы также могут использовать одни и те же библиотеки. Для экономии места в физическую память загружается только одна копия общей библиотеки. Программы, использующие одну и ту же библиотеку, имеют виртуальные адреса, которые соответствуют одним и тем же страницам (которые содержат код и данные библиотеки). Когда программы хотят изменить код библиотеки, они используют копирование при записи, поэтому память выделяется только при необходимости.
Общая память - это эффективный способ связи между программами. Программы могут совместно использовать страницы в памяти, а затем записывать и читать для обмена данными.
Первым компьютером, поддерживающим пейджинг, был суперкомпьютер Atlas, совместно разработанный Ферранти, Манчестерским университетом и Плесси в 1963 году. Машина имела ассоциативную ( адресуемую по содержанию ) память с одной записью на каждую страницу объемом 512 слов. Супервизор обрабатывал прерывания, связанные с неэквивалентностью, и управлял передачей страниц между ядром и барабаном, чтобы обеспечить одноуровневое хранилище для программ.
Пейджинг был функцией Microsoft Windows с Windows 3.0 в 1990 году. Windows 3.x создает скрытый файл с именем 386SPART.PAR
или WIN386.SWP
для использования в качестве файла подкачки. Обычно он находится в корневом каталоге, но может находиться и в другом месте (обычно в каталоге WINDOWS). Его размер зависит от того, сколько места подкачки имеется в системе (параметр, выбранный пользователем в Панели управления → Улучшено в разделе «Виртуальная память»). Если пользователь перемещает или удаляет этот файл, при следующем запуске Windows появится синий экран с сообщением об ошибке «Постоянный файл подкачки поврежден». Пользователю будет предложено выбрать, следует ли удалить файл (независимо от того, существует он или нет).
Windows 95, Windows 98 и Windows Me используют аналогичный файл, и его настройки находятся в Панели управления → Система → вкладка Производительность → Виртуальная память. Windows автоматически устанавливает размер файла подкачки, чтобы он начинался с 1,5-кратного размера физической памяти и при необходимости расширялся до 3-кратного размера физической памяти. Если пользователь запускает приложения, интенсивно использующие память, в системе с небольшим объемом физической памяти, предпочтительно вручную установить для этих размеров значение выше, чем по умолчанию.
Файл, используемый для подкачки в Windows NT семьи pagefile.sys
. По умолчанию файл подкачки находится в корневом каталоге раздела, на котором установлена Windows. Windows можно настроить на использование свободного места на любых доступных дисках для файлов подкачки. Однако требуется, чтобы в загрузочном разделе (т. Е. На диске, содержащем каталог Windows) был файл подкачки, если система сконфигурирована для записи дампов ядра или полных дампов памяти после синего экрана смерти. Windows использует файл подкачки как временное хранилище для дампа памяти. При перезагрузке системы Windows копирует дамп памяти из файла подкачки в отдельный файл и освобождает место, которое использовалось в файле подкачки.
В конфигурации Windows по умолчанию файл подкачки может при необходимости расширяться за пределы своего первоначального выделения. Если это происходит постепенно, он может стать сильно фрагментированным, что потенциально может вызвать проблемы с производительностью. Общий совет, который дает избежать этого, - установить единый размер файла «заблокированной» страницы, чтобы Windows не расширяла его. Однако файл подкачки расширяется только после заполнения, что в конфигурации по умолчанию составляет 150% от общего объема физической памяти. Таким образом, общая потребность в виртуальной памяти, поддерживаемой файлом подкачки, должна превышать 250% физической памяти компьютера, прежде чем файл подкачки будет расширен.
Фрагментация файла подкачки, возникающая при его расширении, носит временный характер. Как только расширенные области больше не используются (при следующей перезагрузке, если не раньше), дополнительное выделенное дисковое пространство освобождается, и файл подкачки возвращается в исходное состояние.
Блокировка размера файла подкачки может быть проблематичной, если приложение Windows запрашивает больше памяти, чем общий размер физической памяти и файла подкачки, что приводит к неудачным запросам на выделение памяти, что может привести к сбою приложений и системных процессов. Кроме того, файл подкачки редко читается или записывается в последовательном порядке, поэтому преимущество в производительности от наличия полностью последовательного файла подкачки минимально. Однако большой файл подкачки обычно позволяет использовать приложения с большим объемом памяти без каких-либо штрафов, кроме использования большего дискового пространства. Хотя фрагментированный файл подкачки не может быть проблемой сам по себе, фрагментация файла подкачки переменного размера со временем приведет к созданию нескольких фрагментированных блоков на диске, что приведет к фрагментации других файлов. По этой причине лучше использовать файл непрерывной страницы фиксированного размера при условии, что выделенный размер достаточно велик, чтобы удовлетворить потребности всех приложений.
Требуемое дисковое пространство может быть легко выделено в системах с более поздними спецификациями (т. Е. В системе с 3 ГБ памяти, имеющей файл подкачки фиксированного размера 6 ГБ на диске 750 ГБ, или в системе с 6 ГБ памяти и 16 ГБ памяти. Файл подкачки фиксированного размера ГБ и 2 ТБ дискового пространства). В обоих примерах система использует около 0,8% дискового пространства с предварительно расширенным до максимального значения файлом подкачки.
Дефрагментация файла подкачки также иногда рекомендуется для повышения производительности, когда система Windows постоянно использует гораздо больше памяти, чем ее общая физическая память. Это представление игнорирует тот факт, что, за исключением временных результатов расширения, файл подкачки не становится фрагментированным с течением времени. В целом проблемы производительности, связанные с доступом к файлам подкачки, гораздо эффективнее решаются путем добавления дополнительной физической памяти.
В системах Unix и других Unix-подобных операционных системах термин «своп» используется для описания как процесса перемещения страниц памяти между RAM и диском, так и области диска, на которой хранятся страницы. В некоторых из этих систем для подкачки обычно выделяют целый раздел жесткого диска. Эти разделы называются разделами подкачки. Во многих системах для подкачки выделен целый жесткий диск, отдельный от диска (ов) с данными, содержащий только раздел подкачки. Жесткий диск, предназначенный для подкачки, называется «подкачка», «рабочий диск» или « рабочий диск ». Некоторые из этих систем поддерживают только переключение на раздел подкачки; другие также поддерживают обмен файлами.
Ядро Linux поддерживает практически неограниченное количество серверных модулей подкачки (устройств или файлов), а также поддерживает назначение внутренних приоритетов. Когда ядро выгружает страницы из физической памяти, оно использует серверную часть с наивысшим приоритетом с доступным свободным пространством. Если нескольким серверным модулям подкачки назначается один и тот же приоритет, они используются циклически (что в некоторой степени похоже на схемы хранения RAID 0 ), обеспечивая повышенную производительность при условии, что к базовым устройствам можно получить эффективный параллельный доступ.
С точки зрения конечного пользователя файлы подкачки в версиях ядра Linux 2.6.x и новее работают практически так же быстро, как разделы подкачки; ограничение состоит в том, что файлы подкачки должны размещаться непрерывно в своих файловых системах. Чтобы повысить производительность файлов подкачки, ядро хранит карту их размещения на нижележащих устройствах и обращается к ним напрямую, таким образом обходя кеш и избегая накладных расходов файловой системы. Тем не менее, Red Hat рекомендует использовать разделы подкачки. При размещении на жестких дисках, которые представляют собой вращающиеся магнитные носители, одним из преимуществ использования разделов подкачки является возможность размещать их на смежных областях жесткого диска, что обеспечивает более высокую пропускную способность данных или более быстрое время поиска. Однако административная гибкость файлов подкачки может перевесить определенные преимущества разделов подкачки. Например, файл подкачки может быть помещен в любую смонтированную файловую систему, может иметь любой желаемый размер и может быть добавлен или изменен по мере необходимости. Разделы подкачки не такие гибкие; их невозможно увеличить без использования инструментов разбиения на разделы или управления томами, которые создают различные сложности и потенциальные простои.
Swappiness является Linux Kernel параметра, который управляет относительным вес выгрузив из рабочей памяти, в отличии от падения страниц из системы кэша страниц, когда запрос на выделение памяти не может быть выполнен из свободной памяти. Для подкачки можно установить значения от 0 до 200 (включительно). Низкое значение приводит к тому, что ядро предпочитает удалять страницы из кеша страниц, в то время как более высокое значение заставляет ядро предпочитать выгружать «холодные» страницы памяти. Значение по умолчанию является 60
; установка более высокого значения может вызвать высокую задержку, если холодные страницы необходимо вернуть обратно (например, при взаимодействии с программой, которая бездействовала), а установка более низкого значения (даже 0) может вызвать высокую задержку, когда файлы, которые были вытеснены из кэш необходимо прочитать снова, но это сделает интерактивные программы более отзывчивыми, поскольку им с меньшей вероятностью потребуется переключать обратно холодные страницы. Замена жестких дисков также может еще больше замедлить работу жестких дисков, поскольку она включает в себя множество случайных операций записи, в то время как твердотельные накопители не имеют этой проблемы. Конечно, значения по умолчанию хорошо работают в большинстве рабочих нагрузок, но настольные компьютеры и интерактивные системы для любой ожидаемой задачи могут захотеть уменьшить значение параметра, а пакетная обработка, а менее интерактивные системы могут захотеть его увеличить.
Когда системной памяти крайне недостаточно для текущих задач и большая часть операций с памятью проходит через медленную подкачку, система может стать практически неспособной выполнять какие-либо задачи, даже если ЦП простаивает. Когда каждый процесс ожидает свопа, считается, что система находится в состоянии смерти подкачки.
Смерть подкачки может произойти из-за неправильно настроенной перегрузки памяти.
Первоначальное описание проблемы «подкачки до смерти» относится к X-серверу. Если код или данные, используемые X-сервером для ответа на нажатие клавиши, не находятся в основной памяти, тогда, если пользователь вводит нажатие клавиши, сервер принимает одну или несколько ошибок страницы, требуя, чтобы эти страницы были прочитаны из подкачки до того, как нажатие клавиши может быть обрабатывается, замедляя реакцию на него. Если эти страницы не остаются в памяти, для обработки следующего нажатия клавиши их придется снова вызвать, в результате чего система практически не отвечает, даже если она на самом деле выполняет другие задачи в обычном режиме.
macOS использует несколько файлов подкачки. По умолчанию (и рекомендуется Apple) установка помещает их в корневой раздел, хотя можно разместить их вместо этого на отдельном разделе или устройстве.
AmigaOS 4.0 представила новую систему выделения оперативной памяти и дефрагментации физической памяти. Он по-прежнему использует плоское общее адресное пространство, которое нельзя дефрагментировать. Он основан на методе выделения блоков и памяти подкачки, которая позволяет выполнять подкачку. Пейджинг был реализован в AmigaOS 4.1, но может заблокировать систему, если вся физическая память будет израсходована. Память подкачки может быть активирована и деактивирована в любой момент, позволяя пользователю использовать только физическую оперативную память.
Резервное хранилище для операционной системы виртуальной памяти обычно на много порядков медленнее, чем ОЗУ. Кроме того, использование механических запоминающих устройств приводит к задержке в несколько миллисекунд для жесткого диска. Поэтому желательно уменьшить или исключить подкачку, где это возможно. Некоторые операционные системы предлагают настройки, влияющие на решения ядра.
/proc/sys/vm/ swappiness
DisablePagingExecutive
реестра, который определяет, могут ли код и данные режима ядра быть выгружены на подкачку.Многие Unix-подобные операционные системы (например, AIX, Linux и Solaris ) позволяют использовать несколько устройств хранения для пространства подкачки параллельно, чтобы повысить производительность.
В некоторых старых операционных системах с виртуальной памятью пространство в резервном хранилище подкачки резервируется, когда программы выделяют память для данных времени выполнения. Поставщики операционных систем обычно издают рекомендации о том, сколько места подкачки следует выделить.
Пейджинг - это один из способов разрешить размеру адресов, используемых процессом, который является «виртуальным адресным пространством» или «логическим адресным пространством» процесса, отличаться от объема оперативной памяти, фактически установленной на конкретном компьютере, т.е. физическое адресное пространство.
В большинстве систем размер виртуального адресного пространства процесса намного больше доступной основной памяти. Например:
В компьютере с истинной n- битной адресацией может быть установлено 2 n адресуемых единиц ОЗУ. Примером может служить 32-разрядный процессор x86 с 4 ГБ без расширения физического адреса (PAE). В этом случае процессор может обращаться ко всей установленной оперативной памяти и не более того.
Однако даже в этом случае подкачку можно использовать для создания виртуальной памяти размером более 4 ГБ. Например, многие программы могут работать одновременно. Вместе им может потребоваться более 4 ГБ, но не все из них сразу должны быть в ОЗУ. Система подкачки принимает эффективные решения о том, какую память передать вторичному хранилищу, что приводит к оптимальному использованию установленной оперативной памяти.
Хотя процессор в этом примере не может обращаться к ОЗУ за пределами 4 ГБ, операционная система может предоставлять услуги программам, которые предполагают больший объем памяти, например файлы, размер которых может превышать предел установленной ОЗУ. Операционная система позволяет программе произвольно манипулировать данными в файле, используя разбиение на страницы для переноса частей файла в ОЗУ, когда это необходимо.
У некоторых компьютеров основная память больше, чем виртуальное адресное пространство процесса, например Magic-1, некоторые машины PDP-11 и некоторые системы, использующие 32-битные процессоры x86 с расширением физического адреса. Это сводит на нет значительное преимущество разбиения на страницы, поскольку отдельный процесс не может использовать больше оперативной памяти, чем объем его виртуального адресного пространства. Такие системы часто используют методы подкачки для получения дополнительных преимуществ:
Размер совокупного количества виртуальных адресных пространств по-прежнему ограничен объемом доступной вторичной памяти.