418ImATeapot писал(а):
через Форк:
скопировать данные программы А в процесс А1(куча времени!)
загрузить и запустить Б на место А1
Если программа А - гигант типа фотошопа, а Б - калькулятор :-???
Когда создавался этот вызов (конец 60-х), все программы были размером с калькулятор. О монстрах фотошопах тогда никто не думал. Думаю, Томпсон и Ритчи в первых реализациях просто облегчили себе задачу создания нового процесса, – копировали данные, стек и дескриптор родительского процесса, меняя только возвращаемый системным вызовом код. Облегчение в том, что код системного вызова ОС для порождения нового процесса получается простой и маленький, - не надо заново загружать сегмент кода и инициализировать процесс. Но с точки зрения
идеологии порождения нового процесса, это один из наихудших вариантов, и я думаю, что форк вызывает оскомину даже у завзятых юниксоидов.
Himik писал(а):
Полагаю, что проблема с fork в том, что при отложенном разделении памяти (копирование при записи) требуется, чтобы копируемые для потомка данные были теми, которые были на момент вызова fork. А ведь родитель свои данные мог и изменить к этому времни...
Системный вызов fork блокирует работу родителя до завершения копирования. Так что в смысле целостности данных всё должно быть ОК. Не ОК заключается в том, что два процесса разделяют общий доступ ко
внешним данным/ресурсам и здесь надо тщательно следить, чтобы не было накладок ни в процессах, ни в ОС.