Введение
Linux, как и большинство современных операционных систем, использует виртуальные страницы, предоставляемые большинство современных архитектур, включая семейство x86.
В системе с виртуальной памятью физическая память (фактический ресурс ОЗУ) является абстрактной из процесса, выполняющегося в системе. Адресное пространство - это всего лишь номера, в которых память может be.
пейджинга
памяти может быть отображен (поместить по адресу) в страниц которых является архитектура зависит размер куска памяти. Поэтому, если вы хотите поместить память на какой-то адрес, чтобы процесс мог его использовать, вам нужно будет выбрать выравниваемый номер страницы (кратный размеру страницы) и разместить по крайней мере одну страницу.
Защита
Виртуальная память позволяет также для защиты памяти, которая устанавливает, какие разрешения процесса будет иметь. Когда исполняемая память процесса отображается (инструкции, которые она выполняет для выполнения каких-либо действий), это только чтение/выполнение. Это означает, что процессор может выполнить эту память, и вы можете прочитать ее, но вы не можете ее записать.
Когда процесс загружается с диска (в Linux с системным вызовом exec
), он помещается в память с уже отображенными областями памяти. Эти регионы являются исполняемым кодом из программы, разделов данных и стека. Процесс может потребовать больше памяти для отображения позже с помощью системных вызовов mmap
или brk
.
Когда процесс пытается получить доступ к памяти, он не отображен, он вызывает печально известную ошибку SEGFAULT
, и ядро будет убивать вашу программу. В других случаях аппаратное обеспечение будет виновато, но программа имеет карту памяти, это связано с тем, что ядро отменило ее, чтобы сохранить ее до тех пор, пока она не понадобится. Здесь происходит остановка процесса, ядро переназначает память, и ваш процесс запускается снова, как ничего не произошло.
Адресное пространство
Так размер адресного пространства лишь верхний предел памяти вы могли бы, если бы программа отображается каждый адрес он, возможно, мог бы в реальной оперативной памяти.
Один гиг адресное пространство на части ядра о мета-данных процесса, что ядро отслеживает. Например, он будет хранить список открытых файлов и сопоставленную память в заголовках процессов. Он также сохранит заголовки потоков. Опять же, все это не отображается, только то, что ему нужно.
Обратите внимание, что каждый процесс имеет свою собственную вселенную адресов, он никогда не видит, что другой процесс отображается на эти адреса. Таким образом, процесс может действовать так, как если бы он был единственным процессом на машине, отображая память на любой адрес, который он выбирает.
Также обратите внимание, что число 4gb связано с тем, что аппаратное обеспечение, которое выполняет адресацию, поддерживает только 32-разрядные номера, наибольшее число, которое может содержать 32-битное число, составляет 2^32 = 4 294 967 296. Это 4 ГБ. Таким образом, можно отображать 4gb адресов в память.
Это просто дерьмовый интро, пожалуйста, сделать некоторые погуглите на виртуальной памяти.
Вы должны знать, как виртуальная память работает. Существует физическая память (фактическая ОЗУ) и виртуальная память (сопоставление с ОЗУ, которое может существовать или нет). 4Gb - предел отображений (что не обязательно использовать полностью). – myaut