Копирование при записи: какой статус после того, как отец и сын изменили страницу?

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

Мой вопрос: что произойдет, если мы разветвим() процесс, затем ребенок изменит страницу: страница будет дублироваться один раз, но после этого отец ТАКЖЕ изменит страницу. Страница снова дублируется? Отец «знает», что единственный сын уже продублирован?

Спасибо заранее за вашу помощь.


person mlnthr    schedule 14.04.2015    source источник


Ответы (2)


(Общий с риском чрезмерного упрощения - IE, как это МОЖЕТ работать)

Parent process has Virtual Page 10 as readwrite physical page 1000.
Parent process has Virtual Page 11 as readwrite physical page 1001.

Родитель разветвляет ребенка.

Parent process has Virtual Page 10 as readonly physical page 1000.
Parent process has Virtual Page 11 as readonly physical page 1001.
Child process has Virtual Page 10 as readonly physical page 1000.
Child process has Virtual Page 11 as readonly physical page 1001.

Родитель записывает на виртуальную страницу 10. Вызывает сбой защиты. ОС обнаруживает копию на странице записи Копирует физическую страницу с 1000 на 1002 Уменьшает счетчик ссылок до физической страницы 1000, перезапускает инструкцию

Parent process has Virtual Page 10 as readwrite physical page 1002.
Parent process has Virtual Page 11 as readonly physical page 1001.
Child process has Virtual Page 10 as readonly physical page 1000.
Child process has Virtual Page 11 as readonly physical page 1001.

Ребенок записывает на виртуальную страницу 11 Срабатывает защита. ОС обнаруживает копию на странице записи Копирует физическую страницу 1001 в 1003 Уменьшает счетчик ссылок до физической страницы 1001 перезапускает инструкцию

Parent process has Virtual Page 10 as readwrite physical page 1002.
Parent process has Virtual Page 11 as readonly physical page 1001.
Child process has Virtual Page 10 as readonly physical page 1000.
Child process has Virtual Page 11 as readwrite physical page 1003.

Родитель записывает на виртуальную страницу 11 Вызывает сбой защиты. ОС обнаруживает, что это копия на странице записи И что счетчик ссылок равен 1. ОС изменяет страницу на инструкцию перезапуска чтения и записи.

Parent process has Virtual Page 10 as readwrite physical page 1002.
Parent process has Virtual Page 11 as readwrite physical page 1001.
Child process has Virtual Page 10 as readonly physical page 1000.
Child process has Virtual Page 11 as readwrite physical page 1003.
person user3344003    schedule 16.04.2015

Имеется n процессов, имеющих доступ к странице копирования при записи, причем n ≥ 2. Если один процесс выполняет запись, страница копируется и становится обычной страницей для этого процесса. Исходной страницей теперь делятся только n-1 раз; если n = 1, то она также становится обычной страницей. Нет смысла делать две копии.

person gnasher729    schedule 14.04.2015