Понимание виртуального адреса и виртуального адресного пространства - PullRequest
10 голосов
/ 23 февраля 2012

Я читал, что «Когда программа выполняет инструкцию, подобную: MOV REG,1000, она делает это для копирования содержимого адреса памяти 1000 в REG. Адрес может быть сгенерирован с использованием индексации, базовых регистров, сегментных регистров и других способов..

Эти сгенерированные программой адреса называются виртуальными адресами и образуют виртуальное адресное пространство. "

Может кто-нибудь объяснить, что это делает (Эти сгенерированные программой адреса называются виртуальными адресами) значит?

Ответы [ 2 ]

32 голосов
/ 23 февраля 2012

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

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

Существует несколько способов, с помощью которых ЦП может определить адрес (помните, что адрес - это только число). Число, представляющее адрес, может быть в регистре, оно может храниться в другом месте памяти, его можно рассчитать путем сложения или вычитания смещения в регистре и так далее. Во всех случаях ваша скомпилированная программа инструктирует ЦПУ о том, как найти (или сгенерировать ) адрес, необходимый для чтения или записи.

Современные архитектуры позволяют нескольким программам работать так, как будто они владеют всем логическим адресным пространством. Другими словами, несколько программ могли записывать в ячейку памяти по одному и тому же адресу, не перебирая результаты друг друга. Это делается путем виртуализации адресного пространства: скажем, программы A и B генерируют запись в ячейку памяти в 0x1000. Процессор, которому помогает операционная система, может выполнить дополнительные настройки адреса и отобразить его на физический адрес 0x60001000 для программы A и на 0x5F001000 для программы B. Обе программы считают что они написали по адресу 0x1000, потому что они работают в виртуальном адресном пространстве. Их модель памяти представляет собой непрерывный блок, начинающийся с 0 и продолжающийся до 0x000100000000 (при условии, что ваша система имеет 4 ГБ памяти, доступной для процессов). Но эта модель работает только потому, что ЦП дополнительно переводит свои логические адреса в физические адреса, которые выделяются и отнимаются по мере необходимости в процессе работы программы.

Поскольку одно и то же число, представляющее адрес, означает разные вещи для программы и для ЦП, адресное пространство программы называется виртуальным , а адресное пространство ЦП называется физическим .

1 голос
/ 25 июля 2014

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

...