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