Где находятся адреса виртуальной памяти?

Я знаю, что если страницы нет в основной памяти, то ЦП принесет ее из файла подкачки. Таким образом, если виртуальный адрес не имеет своего аналога физического адреса, ЦП доставит его с диска. Таким образом, сопоставление с виртуальным адресом может быть в одном из двух мест: либо в физической памяти, либо на диске. Мой вопрос: где находится сам виртуальный адрес? Потому что ЦП нужен этот виртуальный адрес для выполнения сопоставления. Откуда ЦП берет этот адрес? и когда мы используем gdb для просмотра виртуального адресного пространства, откуда gdb берет все эти виртуальные адреса?

Например:

Виртуальный адрес 0x420000
Таблица страниц 20
RAM 0x800000

Здесь 20 (запись таблицы страниц) находится в оперативной памяти. 0x800000 (физический адрес) находится в оперативной памяти. Где находится информация 0x420000? Процессору откуда-то нужна эта информация, иначе как бы он выполнял трансляцию адресов?

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


person Emil Tagiyev    schedule 30.10.2013    source источник
comment
Он нигде не проживает, он виртуален. Единственным физическим проявлением являются таблицы сопоставления страниц, поддерживаемые операционной системой, и файл подкачки.   -  person Hans Passant    schedule 30.10.2013
comment
Где находятся несуществующие почтовые адреса? Они не делают. Адрес не имеет физического существования. Это информация, которую вы можете использовать, чтобы найти то, что действительно существует. Виртуальный адрес — это просто информация, которая используется для поиска данных, отображенных в адресном пространстве процесса. Сам адрес нигде не проживает.   -  person jalf    schedule 30.10.2013
comment
Но вы откуда-то получаете почтовые адреса. Иначе как бы вы нашли существование?   -  person Emil Tagiyev    schedule 30.10.2013


Ответы (1)


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

person AnT    schedule 30.10.2013
comment
Насколько я знаю, таблица страниц (для процесса) хранится в основной памяти. Однако он должен включать только номер страницы и дескриптор страницы, а не логический/виртуальный адрес. - person stdout; 14.08.2016