Препоръчано, 2024

Избор На Редактора

Разлика между вилицата () и vfork ()

И fork (), и vfork () са системните повиквания, които създават нов процес, който е идентичен с процеса, който е извикал fork () или vfork (). Използването на fork () позволява едновременно изпълнение на родителски и детски процес. Другият начин, vfork () прекъсва изпълнението на родителския процес, докато детето завърши изпълнението си. Основната разлика между системния разговор fork () и vfork () е, че дъщерният процес, създаден с помощта на вилицата, има отделно адресно пространство като това на родителския процес. От друга страна, детският процес, създаден с помощта на vfork, трябва да сподели адресното пространство на своя родителски процес.

Нека да намерим някои разлики между fork () и vfork () с помощта на таблицата за сравнение, показана по-долу.

Сравнителна таблица

Основа за сравнениевилица ()vfork ()
ОсновенДетето и родителският процес имат отделни адресни пространства.Детето и родителският процес споделят едно и също адресно пространство.
ЕкзекуцияРодителският и детският процес се изпълняват едновременно.Родителският процес остава прекъснат, докато детето не завърши изпълнението си.
модификацияАко детето променя всяка страница в адресното пространство, то е невидимо за родителския процес, тъй като адресното пространство е отделно.Ако детето променя всяка страница в адресното пространство, то се вижда от родителския процес, тъй като те споделят едно и също адресно пространство.
Copy-на-пишаfork () използва copy-on-write като алтернатива, когато родителят и детето споделят едни и същи страници, докато някой от тях не промени общата страница.vfork () не използва copy-on-write.

Определение на вилицата ()

Вилицата () е системно повикване, което създава нов процес . Новият процес, създаден от повикването на fork (), е дъщерен процес, на процеса, който извика системното повикване fork (). Кодът на детския процес е идентичен с кода на родителския процес. След създаването на дъщерен процес, и двата процеса т.е. родителски и дъщерен процес започват изпълнението си от следващото изявление след fork () и двата процеса се изпълняват едновременно .

Родителският процес и дъщерният процес имат отделно адресно пространство . Следователно, когато някой от процесите променя всяко изявление или променлива в кода. Това няма да бъде отразено в други кодове на процесите. Нека предположим, ако детето процес променя кода, това няма да повлияе на родителския процес.

Някои дъщерни процеси след тяхното създаване незабавно извикват exec () . Системното повикване exec () замества процеса с програмата, зададена в неговия параметър. Тогава отделното адресно пространство на детския процес не е от полза. Едната алтернатива тук е копие-на-пиша.

Копирането-на-запис позволява на родител и дете процес да споделят едно и също адресно пространство. Ако някой от процесите пише на страниците в адресното пространство, се създава копие на адресното пространство, за да може и двата процеса да работят независимо.

Определение на vfork ()

Модифицираната версия на fork () е vfork (). Системното повикване vfork () също се използва за създаване на нов процес. Подобно на fork (), тук и новия създаден процес е дъщерен процес, на процеса, който извиква vfork (). Кодът на дъщерен процес също е идентичен с кода на родителския процес. Тук дъщерният процес спира изпълнението на родителския процес, докато завърши изпълнението му, тъй като и двата процеса споделят едно и също адресно пространство за използване.

Тъй като детето и родителският процес споделят едно и също адресно пространство . Ако някой от процесите променя кода, той се вижда от другия процес, който споделя едни и същи страници. Нека предположим, ако родителският процес променя кода; тя ще се отрази в кода на детския процес.

При използването на vfork () не се създават отделни адресни пространства за дъщерни и родителски процеси. Следователно, тя трябва да бъде изпълнена, когато детето обработва повиквания exec () веднага след създаването му. Така че няма да има загуба на адресно пространство и това е ефикасен начин за създаване на процес. vfork не използва copy-on-write .

Ключови разлики между вилицата () и vfork ()

  1. Основната разлика между вилицата и vfork е, че детето, създадено от вилицата, има отделно място от паметта от родителския процес. Детето процес, създаден от системния разговор vfork, споделя същото адресно пространство на родителския процес.
  2. Детето процесът, създаден с помощта на fork, се изпълнява едновременно с родителския процес. От друга страна, детският процес, създаден с помощта на vfork, спира изпълнението на родителския процес до неговото изпълнение.
  3. Тъй като мястото на паметта на родителския и детския процес е отделна модификация, направена от някой от процесите, не засяга страниците на другите. Въпреки това, тъй като родителският и детският процес споделят една и съща модификация на адреса на паметта, извършена от всеки процес, се отразява в адресното пространство.
  4. Вилицата на системните повиквания () използва алтернативно копиране на запис, което позволява на детето и родителския процес да споделят едно и също адресно пространство, докато някой от тях не промени страниците. От друга страна, vfork не използва copy-on-write.

Заключение:

Системният разговор vfork () трябва да бъде реализиран, когато дъщерното процесиране на повикването exec () веднага след неговото създаване е използвало fork (). Като отделно адресно пространство за детски и родителски процес тук няма да има полза.

Top