Например, если есть 3 процесса, каждый из которых использует виртуальный адрес 0x400000
для текстовой части. И есть только одна 4KB
физическая страница для пользовательского процесса.
Предположим, что процесс 0 использует физическую страницу (виртуальный адрес 0x400000
). Предположим, что данные физической страницы — это page_pid_0_0x400000
.
Когда процесс 1 запланирован ОС, и page_pid_1_0x400000
процесса 1 будет загружен на физическую страницу из исполняемого файла. Затем page_pid_0_0x400000
данные должны быть выгружены на диск.
Когда процесс 2 также загружен, данные page_pid_2_0x400000
на физической странице также должны быть выгружены на диск.
Теперь на диске у нас есть 2 копии одного и того же виртуального адресного пространства, то есть 0x400000
: page_pid_1_0x400000
и page_pid_0_0x400000
.
Если процесс 1 запланирован сейчас, как я (ОС) могу идентифицировать page_pid_1_0x400000
по виртуальному адресу 0x400000
(поскольку инструкции доступа к памяти знают только виртуальный адрес 0x400000
, но не идентификатор процесса)?
Операционная система может иметь всевозможные связанные структуры данных. Например, каждый процесс может иметь свои собственные структуры данных (и таблицы страниц), представляющие его адресное пространство, и операционная система просто должна убедиться, что процессор указывает правильный набор таблиц страниц при возобновлении процесса.
Точно так же обработка подкачки не ограничивается использованием только виртуального адреса, она может использовать (address space, virtual address)
для раскрытия местоположения подкачки. Это может сделать его настолько гибким или жестким, насколько это необходимо. Например, он может рассматривать виртуальный адрес как часть непрерывного набора виртуальных адресов, которые имеют некоторую общность между тем, где страницы хранятся в файлах или подкачке.
Таблицы страниц и понятие виртуального адреса являются интерфейсом для CPU+MMU
перевода адреса. Операционная система может поддерживать любые связанные с ней структуры данных.
В старых системах каждый дескриптор страницы (иногда запись в таблице страниц или pte) имел бы бит, который определял, является ли страница действительной. CPU/MMU будет игнорировать страницы, которые не считаются действительными; таким образом, когда страница была заменена на диск, другие биты в записи таблицы страниц являются удобным местом для хранения адреса дискового обмена.
Современные системы, как правило, имеют более сложные структуры данных для временного совместного использования и блокировки страниц, поэтому часто используется вспомогательная структура.