Насколько я понимаю, пейджинг и свопинг - это совершенно разные понятия. Хотя подкачка означает, что процесс полностью находится в физической памяти или на жестком диске, части процесса подкачки могут находиться в физической памяти, а другие части - на жестком диске.
Но зачем тогда linux нужен раздел подкачки? Если физическая память заполнена, некоторые процессы будут переданы на внешний жесткий диск, и новый процесс будет сопоставлен с виртуальной памятью на физическую память.
Я просто не понимаю, зачем нужен раздел подкачки (или вообще подкачка)?
Или это просто вопрос терминологии swap partition == virtual memory
?
linux
memory
operating-systems
virtual-memory
paging
JohnnyFromBF
источник
источник
Ответы:
Да, это просто вопрос терминологии, во многих случаях раздел подкачки используется в качестве виртуальной памяти.
Причина, по которой UNIX и UNIX-подобные системы предпочитают разделы подкачки файлам страниц, заключается в том, что они могут быть смежными, что приводит к меньшему времени поиска по сравнению с файлом страниц, который может быть фрагментирован.
источник
Я не знаю, откуда вы взяли, что «подкачка означает, что процесс полностью находится в физической памяти или на жестком диске». Это значение не использовалось в течение нескольких десятилетий. Цитируя Википедию :
Действительно, в любом контексте, связанном с Linux (или другими Unix-системами в этом отношении), подкачка страниц и свопинг в значительной степени являются синонимами. И то, и другое относится к использованию виртуальной памяти, где данные страницы могут храниться либо в ОЗУ, либо на диске. (Страница занимает 4 КБ на любом устройстве, с которым вы можете столкнуться.) Программа, использующая страницу памяти, не заботится и даже не знает, где хранятся данные, она просто использует виртуальный адрес. Ядро передает данные между ОЗУ и диском и обновляет таблицы MMU по мере продвижения, так что запись для виртуального адреса либо указывает на физическую страницу в памяти, либо содержит специальное значение, которое заставляет процессор выполнять некоторый код ядра который загрузит соответствующие данные с диска.
Пейджинг относится к этому общему процессу. Под обменом понимается случай, когда данные на диске находятся в выделенной области: области подкачки (раздел подкачки или файл подкачки). Пейджинг также может быть сделан между ОЗУ и файлом, и в данном случае это, как правило , не упоминается как замена . Например, когда вы выполняете программу, код должен быть загружен в память для выполнения; если кодовая страница должна быть удалена из ОЗУ, чтобы освободить место для чего-то другого, нет необходимости записывать эту страницу в область подкачки, поскольку ее можно загрузить обратно из файла программы. (Это можно сделать для всех данных только для чтения, а не только для программного кода.)
Если физическая память (почти) заполнена, ядро ищет в оперативной памяти страницу (а не весь процесс), которая недавно не использовалась. Если эта страница воспроизводит содержимое файла диска (в ядре есть таблицы, указывающие на это), страницу можно восстановить. Если нет, то страница записывается для обмена, а затем исправляется. В любом случае ядро обновляет запись в таблице виртуальной памяти процесса (которая становится таблицей MMU во время выполнения процесса), чтобы пометить ее как не в ОЗУ, и затем может повторно использовать физическую страницу для чего-то другого (другой программы или другой страницы та же программа).
источник
Средство виртуальной памяти / пейджинга позволяет ядру «виртуализировать» память для процессов пользовательского пространства. Ядро может извлекать страницы из физической памяти и распределять их по страницам, чтобы они выглядели смежными с процессом пользовательского пространства.
Ограничение может быть установлено в памяти процесса пользовательского пространства, и если процесс выходит за его пределы, возникает «сбой страницы», который вызывает исключение ЦП, которое возвращается в ядро. Это предотвращает работу пользовательской программы с памятью, выделенной для ядра или других программ, без разрешения ядра.
Обычно Пользовательские программы попросить ядро распространить этот предел с помощью четко определенных интерфейсов (называемых функциями C
malloc()
иfree()
, например.). Ядро отвечает за отслеживание того, сколько и какой памяти выделено программе.Этот механизм «сбоя страницы» может также позволить ядру поменять страницу, к которой процесс пытался получить доступ, с страницы, находящейся на диске, если ядро способно переполнить память (и Windows, и Linux поддерживают это), поэтому и называется обменом. Если доступ к памяти действительно был недействительным (то есть процесс пытается получить доступ к памяти, которую он не запрашивал первым), то обычно процесс будет завершен с помощью SIGSEGV.
Таким образом, «замена» - это дополнительная функция (в Linux вы можете отключить ее полностью, если хотите), которая зависит от виртуальной памяти / подкачки, но не обязательна только потому, что процессор имеет виртуальную память / подкачку. Концепции не одинаковы, но подкачка зависит от существующей подкачки / виртуальной памяти.
Кроме того, после более внимательного прочтения вашего вопроса, «подкачка страниц» иногда используется как синоним для «подкачки», но я никогда не слышал о «подкачке», означающей, что вся память процесса выгружается, вместо «подкачки», означающей только часть это поменяно.
«Виртуальная память» - это физическая память, просто «переназначенная». Аппаратное обеспечение MMU не может напрямую подключаться к любому устройству хранения. MMU может выдать ошибку, которая сообщает ядру, что процесс пытался получить доступ к памяти, которой у него не должно быть - и ядро может использовать этот механизм, чтобы увидеть, что процесс хочет получить что-то с диска, который, как он думал, находился в памяти, и затем выполнить " поменять местами". Дело в том, что именно операционная система решает сохранить страницы на диск, чтобы они могли использовать эти страницы для других процессов, а не для аппаратного обеспечения.
источник
В общем случае раздел подкачки не равен виртуальной памяти.
Процессам может потребоваться больше памяти, чем реальной физической памяти, поэтому разработчики ОС решили предположить, что в системе больше памяти, которая называется «виртуальной памятью».
Эта виртуальная память в основном является физической памятью и частью диска. Эта часть диска называется «своп» в Linux.
Также разработчики предположили, что использование той части виртуальной памяти, которая находится на жестком диске, должно быть как можно ниже. Ради этого вся виртуальная память была разделена на небольшие порции, которые называются «страницами». Многие страницы используются с низкой скоростью, эти страницы должны быть записаны в часть виртуальной памяти на жестком диске. Эта операция называется «выгрузка». ОС должна отслеживать, какие страницы отсутствуют в физической памяти, чтобы найти их при необходимости. Сбой страницы происходит, когда программа хочет записать / прочитать часть памяти, которая выгружается.
Чтобы ответить на ваш вопрос: Linux нужен раздел подкачки, чтобы поменять некоторые страницы памяти, и вы можете увидеть статистику использования виртуальной памяти с помощью
vmstat
:В столбце «своп» отображается своп и статистика. Также эта ссылка объясняет виртуальную память и ее использование
vmstat
.источник