Разлика между fork () и vfork ()

Автор: Laura McKinney
Дата На Създаване: 2 Април 2021
Дата На Актуализиране: 10 Може 2024
Anonim
Разлика между fork () и vfork () - Технология
Разлика между fork () и vfork () - Технология

Съдържание


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

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

  1. Сравнителна диаграма
  2. дефиниция
  3. Ключови разлики
  4. заключение

Сравнителна диаграма

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


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

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

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

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


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

Дефиниция на vfork ()

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

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

Тъй като използването на vfork () не създава отделни адресни пространства за дъщерни и родителски процеси. Следователно, трябва да бъде изпълнява където процесът на повикване на детето EXEC () веднага след създаването му. Така че няма да има разхищение на адресното пространство и това е ефикасен начин за създаване на процес. vfork не използва копиране на писане.

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

Заключение:

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