Что происходит с виртуальными адресами после вызова fork()?
После вызова fork мы "копируем" все данные у процесса, в котором мы вызывали fork(используя механизм COW), так же при смене контекста мы заменяем регистр CR3(x86_64) и загружаем новые таблицы страниц. Если рассмотреть какую-то переменную из процесса родителя, то в дочернем процессе мы получим другое значение виртуального адресса этой переменной, но она будет "ссылаться" на одну и ту же область в физической памяти и это значение (в физической памяти) поменяется только и только если мы захотим изменить значение этой переменной, в дочернем процессе.
1) Правильно ли я понял описанное выше? 2) Для чего нужен регистр CR3?
Источник: Stack Overflow на русском