Как fork () работает путем копирования структур родительской области?(Linux) - PullRequest
0 голосов
/ 29 ноября 2018

Я новичок в Linux и виртуальной памяти, все еще пытаюсь понять, как работает fork ():

Мой учебник говорит, что когда функция fork вызывается текущим процессом, ядро ​​создает точные копииmm_struct, структурированных областей и таблиц страниц текущего процесса для дочернего процесса.У меня есть вопросы о таблицах страниц, которые копируются из родительского процесса в дочерний процесс.

1.Если родительский процесс использует только один уровень таблицы страниц, я понимаю, что при вызове fork ()создается новая таблица страниц для дочернего процесса, содержимое новых таблиц дочерних страниц такое же, как и у старой таблицы родительских страниц, но физический базовый адрес таблицы дочерних страниц отличается в ОЗУ, поэтому Linux может выполнять переключение контекста между процессамикопируя адрес таблицы страниц в выделенный регистр, мое понимание верно?

Если в системе (Intel Core i7) используется многоуровневая страница (четыре уровня), мы знаем, что запись таблицы страниц L1 хранит физический базовый адрес таблицы страниц L2 ... и т. Д. Поэтому, когда вызывается fork (),как ядро ​​копирует родительские таблицы на четыре страницы в дочерний процесс?поскольку запись таблицы страниц нижнего уровня хранит физический базовый адрес таблицы страниц следующего уровня, если он делает точную копию, дочерний процесс будет совместно использовать таблицу страниц L4 своего родителя, чего не должно быть, не так ли?
...