Как связаны виртуальная память и файл подкачки?

Как связаны виртуальная память и файл подкачки?

Мы знаем, что ЦП создает логические адреса, также известные как виртуальные адреса, во время работы программы. Затем эти виртуальные адреса преобразуются в физические адреса с помощью блока управления памятью (MMU). Мы знаем, что виртуальная память позволяет использовать некоторую часть диска, известную как файл подкачки (пространство подкачки), в качестве памяти. Таким образом, виртуальный адрес указывает на некоторое пространство в памяти (ОЗУ) + файл подкачки (пространство подкачки). Но как программа загружается с диска, который не находится ни в памяти, ни в файле подкачки, так как ЦП создает виртуальный адрес, и этот виртуальный адрес всегда указывает на некоторый адрес в памяти (ОЗУ) + файл подкачки (пространство подкачки). Как называется этот адрес. Изначально я думал, что логический адрес/виртуальный адрес - это адрес, который указывает на физическое расположение памяти на жестком диске.

Я совсем запутался. Спасибо за помощь.

решение1

Страницы, которые не находятся в памяти, помечаются как недействительные, и любой доступ к ним вызовет ошибку страницы в операционной системе, которая выполнит поиск места, где можно загрузить страницу (файл подкачки, сопоставленный файл…), загрузит страницу, обновит указатель страницы и перепланирует приостановленный процесс.

В FreeBSD есть таблица, которая содержит физические адреса каждого сегмента (набор последовательных страниц) и их атрибуты пейджера (объект пейджера, индекс, дескриптор файла…). Полагаю, в Windows похожая система.

решение2

Затем эти виртуальные адреса преобразуются в физические адреса с помощью блока управления памятью (MMU).

Виртуальный адрес может быть преобразован в физический адрес памяти только тогда, когда содержимое памяти процесса является резидентным или отображено в нем.
В противном случае возникает ошибка (страницы), и либо создается новое отображение, либо содержимое памяти (например, требуемая страница) для этого процесса должно быть извлечено из резервного хранилища (например, файла подкачки). Это извлечение содержимого выполняется ядром с использованием драйвера устройства для устройства хранения (например, HDD или SSD). Тем временем планировщик процессов приостановит текущий процесс и (попытается) разрешить готовому к выполнению процессу использовать ЦП.

Мы знаем, что виртуальная память позволяет использовать некоторую часть диска, известную как файл подкачки (Swap Space), в качестве памяти. Таким образом, виртуальный адрес указывает на некоторое пространство в памяти (RAM) + файл подкачки (swap space).

Неправильно.
Виртуальный адрес (сам по себе) не имеет компонента или ссылки на резервное хранилище.
Организация резервного хранилища (например, файла подкачки) находится под контролем ядра операционной системы (т. е. программного обеспечения).

Также содержимое памяти виртуальной памяти может даже не храниться в файле подкачки или области подкачки.
Программный код, который никогда не меняется, не должен выгружаться и может быть извлечен снова из программного файла. К
отображенным в память файлам будет осуществляться прямой доступ, а не будет дублироваться в файле подкачки или области подкачки.

Таким образом, виртуальный адрес сам по себе не содержит достаточной информации для идентификации его физического отображения в памяти, не говоря уже о какой-либо информации о резервном хранилище.

Но как программа загружается с диска, которого нет ни в памяти, ни в файле подкачки, так как процессор генерирует виртуальный адрес, и этот виртуальный адрес всегда указывает на некоторый адрес в памяти (ОЗУ) + файле подкачки (пространстве подкачки).

Доступ к программе (или любому файлу) осуществляется по имени файла с использованием интерфейса файловой системы и интерфейса базового блочного устройства.
Данные с периферийного устройства передаются с использованием инструкций/операций ввода/вывода, а не доступа к (основной) памяти.
Концепция операций ввода/вывода размывается реализацией ввода/вывода с отображением в память, где доступ к регистрам устройства осуществляется с использованием специальных адресов в пространстве памяти, а не адресов в пространстве ввода/вывода (или порта).
Драйверы устройств — это низкоуровневое программное обеспечение в ядре, которое обрабатывает сложности таких устройств для операций чтения и записи.

Это фундаментальные концепции архитектуры цифрового компьютера, которые не подходят для краткого объяснения в простом формате вопросов и ответов.

Как называется этот адрес?

Доступ к устройствам массового хранения данных (например, HDD и SSD) (они же блочные устройства) осуществляется на уровне устройства с использованием LBA (логического адреса блока) (они же номера сектора). Каждый LBA ссылается на логический блок данных фиксированного размера, обычно 512 байт.

Сначала я думал, что логический адрес/виртуальный адрес — это адрес, указывающий на физическую ячейку памяти на жестком диске.

Неправильно.
Доступ к устройствам хранения данных (например, HDD и SSD) осуществляется на уровне устройства с использованием LBA (логического адреса блока).
На более высоком уровне файловая система ссылается на содержимое файлов, используя адреса единицы распределения файловой системы (например, номера кластеров). Файловая система обеспечивает организацию, ссылаясь на файлы по имени файла и каталогам.
На еще более высоком уровне управление томами или дисками управляет тем, какие разделы и файловые системы доступны.

Нет фиксированной связи или связи между LBA и адресами виртуальной памяти.
Любая связь между содержимым резервного хранилища (например, файлом подкачки) и виртуальной памятью будет контролироваться ядром с использованием информации о процессе и такой информации, как таблица страниц.

Обратите внимание, что большинство реализаций современной виртуальной памяти используют страницы фиксированного размера, но возможны и другие схемы.

Связанный контент