Різниця між fork () та vfork ()

Автор: Laura McKinney
Дата Створення: 2 Квітень 2021
Дата Оновлення: 9 Травень 2024
Anonim
Різниця між fork () та vfork () - Технологія
Різниця між fork () та vfork () - Технологія

Зміст


І те й інше вилка () і vfork () є системні дзвінки що створює новий процес, ідентичний процесу, який викликав fork () або vfork (). Використання вилка () дозволяє одночасно виконувати батьківський та дочірні процес. Інший шлях, vfork () призупиняє виконання батьківського процесу, поки дочірній процес не завершить його виконання. Основна відмінність системного виклику fork () та vfork () полягає в тому, що дочірній процес, створений за допомогою fork, має окремий адресний простір, як і батьківський процес. З іншого боку, дочірній процес, створений за допомогою vfork, повинен розділяти адресний простір свого батьківського процесу.

Знайдемо деякі відмінності між fork () та vfork () за допомогою таблиці порівняння, показаної нижче.

  1. Порівняльна діаграма
  2. Визначення
  3. Ключові відмінності
  4. Висновок

Порівняльна діаграма

Основа для порівняннявилка ()vfork ()
ОсновніДочірній процес та батьківський процес мають окремі адресні простори.Дочірній процес та батьківський процес поділяють однаковий адресний простір.
ВиконанняБатьківський та дочірній процес виконуються одночасно.Батьківський процес залишається призупиненим, поки дочірній процес не завершить його виконання.
МодифікаціяЯкщо дочірній процес змінює будь-яку сторінку в адресному просторі, він є невидимим для батьківського процесу, оскільки адресний простір є окремим.Якщо дочірній процес змінює будь-яку сторінку в адресному просторі, він є видимим для батьківського процесу, оскільки вони поділяють один і той же адресний простір.
Копіювати-записуватиfork () використовує функцію копіювання під час запису як альтернативу, коли батько та дитина діляться однаковими сторінками, поки жодна з них не змінить спільну сторінку.vfork () не використовує копіювання під час запису.


Визначення fork ()

The вилка () - використання системного виклику для створення новий процес. Новий процес, створений викликом fork (), є дочірнім процесом процесу, який викликав системний виклик fork (). Код дочірнього процесу ідентичний коду його батьківського процесу. Після створення дочірнього процесу обидва процеси, тобто батьківський і дочірній процес, починають виконання з наступного оператора після fork (), і обидва процеси виконуються одночасно.

Батьківський процес та дочірній процес мають окремий адресний простір. Отже, коли будь-який з процесів модифікує будь-який оператор або змінну в коді. Це не відображатиметься в інших технологічних кодах. Припустимо, якщо дочірній процес змінить код, це не вплине на батьківський процес.

Деякий дочірній процес після їх створення негайно дзвонить exec (). Виклик системи exec () замінює процес з програмою, вказаною в її параметрі. Тоді окремий адресний простір дочірнього процесу не приносить користі. Єдиною альтернативою тут є копіювання на запис.


The копіювати на запис нехай батьки та дочірні процеси ділять однаковим адресним простором. Якщо будь-який з процесів пише на сторінках в адресному просторі, створюється копія адресного простору, щоб дозволити обом процесам працювати незалежно.

Визначення vfork ()

Змінена версія fork () є vfork (). The vfork () системний виклик також використовується для створення нового процесу. Подібно до fork (), тут також створений новий процес - це дочірній процес, процесу, який викликав vfork (). Дочірній код процесу також ідентичний батьківському процесу процесу. Тут дочірній процес зупиняє страту батьківського процесу, поки він не завершить його виконання, оскільки обидва процеси мають один і той же адресний простір для використання.

Оскільки процес дитини і батька ділиться той самий адресний простір. Якщо будь-який з процесів модифікує код, він буде видимий іншим процесом, який спільно використовує ті самі сторінки. Припустимо, якщо батьківський процес змінює код; це відобразиться в коді дочірнього процесу.

Оскільки використання vfork () не створює окремих адресних просторів для дочірніх та батьківських процесів. Значить, так і має бути здійснено куди звертається дочірній процес exec () одразу після його створення. Таким чином, не буде марно витрачатися на адресний простір, і саме це ефективний спосіб створення процесу. vfork не використовує копіювати на запис.

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

Висновок:

Системний виклик vfork () повинен бути реалізований, коли дочірній процес виклику exec () відразу після його створення за допомогою fork (). Оскільки окремий адресний простір для дочірнього та батьківського процесу тут не буде корисним.