Не могу понять описание fork()

Я изучал управление виртуальной памятью у galvin , Я не могу понять это утверждение:

В дополнение к отделению логической памяти от физической памяти виртуальная память позволяет совместно использовать файлы и память двумя или более процессами посредством совместного использования страниц. Это приводит к следующим преимуществам.

Виртуальная память позволяет совместно использовать страницы во время создания процесса с помощью системного вызова fork(), что ускоряет создание процесса.

Как можно поделиться страницами с fork()? Просьба уточнить.


person Learner    schedule 18.04.2012    source источник


Ответы (2)


Я полагаю, что текст относится к оптимизации копирования при записи, выполненной для fork().

По сути, fork() клонирует процесс, дублируя всю его память. Это может занять много времени, особенно для процессов, которые требуют много денег. Более того, очень часто сразу за fork() следует exec(), что делает предыдущую копию бессмысленной.

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

Это значительно снижает стоимость fork() с точки зрения уменьшения количества копий и уменьшения использования памяти.

Недостатком является то, что всякий раз, когда либо процесс fork()ed, либо исходный процесс записывают на страницу, запись вызывает исключение (поскольку физические страницы помечены как доступные только для чтения), и страница в конце концов копируется. К счастью, это случается не так уж и часто.

person Kristof Provost    schedule 20.04.2012

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

person Utkarsh Srivastav    schedule 20.04.2012