LINUX.ORG.RU

Copy on write + swapping


0

0

Привет!

Допустим я создаю 100 дочерних процессов из родительского процесса
с помощью fork.
Как написано в man 2 fork:

Under  Linux,  fork() is implemented using copy-on-write 
pages, so the only penalty that it incurs is the time and 
memory required to duplicate the parent's page tables, and 
to create a unique task structure for the child.

Т.о. после создания все процессы (100 дочерних и 1 родительский)
разделяют страницы памяти.

Теперь допустим, что одну из страниц требуется сбросить на диск
(swap out to backing storage).

Что при этом происходит?
1) Страница всё ещё разделяется всеми процессами, сбрасывается на
диск и помечается как "swapped out"?
2) Страница сбрасывается на диск, помечается как "swapped out", но 
при возникновении page fault'а в каком-то процессе происходит 
копирование этой страницы при загрузке из swap'а?
3) Что-то ещё?

Плохо знаю эту область.
Читал разные доки, но прямого ответа не нашёл.

Может более опытные товарищи что подскажут?
Спасибо!

по моему первый вариант не отменяет второго, и в сумме выглядит очень правдоподобно.

programmer
()

2) вариант выглядит неадекватно. Одна из целей COW -- это не только минимизмировать время затраченное на копирование, но и минимизировать занимаемый объем памяти. 2) вариант нарушает вторую цель.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

Позволю себе не согласиться. Во первых никто не заставляет ядро скидывать страничку которая шарится между процессами в свап, а во вторых как скидывание в свап может нарушать "минимизировать занимаемый объем памяти"?

programmer
()
Ответ на: комментарий от programmer

я понял его второй вариант, как то что когда страница будет доставаться из свопа, то она перестанет разделяться между процессами. Комментарий относился к такому толкованию. Если я понял неправильно, то забейте:)

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.