Direkomendasikan, 2024

Pilihan Editor

Perbedaan Antara fork () dan vfork ()

Baik fork () dan vfork () adalah pemanggilan sistem yang menciptakan proses baru yang identik dengan proses yang memanggil fork () atau vfork (). Menggunakan fork () memungkinkan eksekusi proses induk dan anak secara bersamaan. Cara lain, vfork () menunda eksekusi proses induk sampai proses anak menyelesaikan eksekusi. Perbedaan utama antara pemanggilan sistem fork () dan vfork () adalah bahwa proses anak yang dibuat menggunakan fork memiliki ruang alamat yang terpisah dengan proses induk. Di sisi lain, proses anak yang dibuat menggunakan vfork harus berbagi ruang alamat dari proses induknya.

Mari kita menemukan beberapa perbedaan antara fork () dan vfork () dengan bantuan grafik perbandingan yang ditunjukkan di bawah ini.

Grafik perbandingan

Dasar untuk Perbandingangarpu()vfork ()
DasarProses anak dan proses induk memiliki ruang alamat yang terpisah.Proses anak dan proses induk berbagi ruang alamat yang sama.
EksekusiProses orangtua dan anak dijalankan secara bersamaan.Proses induk tetap ditangguhkan hingga proses anak menyelesaikan eksekusi.
ModifikasiJika proses anak mengubah halaman apa pun di ruang alamat, itu tidak terlihat oleh proses induk karena ruang alamat terpisah.Jika proses anak mengubah halaman apa pun di ruang alamat, itu terlihat oleh proses induk karena mereka berbagi ruang alamat yang sama.
Copy-on-writefork () menggunakan copy-on-write sebagai alternatif di mana orang tua dan anak berbagi halaman yang sama sampai salah satu dari mereka memodifikasi halaman bersama.vfork () tidak menggunakan copy-on-write.

Definisi garpu ()

Garpu () adalah penggunaan panggilan sistem untuk membuat proses baru . Proses baru yang dibuat oleh fork () call adalah proses anak, dari proses yang memanggil fork () system call. Kode proses anak identik dengan kode proses induknya. Setelah pembuatan proses anak, kedua proses yaitu proses induk dan anak memulai eksekusi mereka dari pernyataan berikutnya setelah fork () dan kedua proses dijalankan secara bersamaan .

Proses induk dan proses anak memang memiliki ruang alamat yang terpisah . Karenanya, ketika salah satu proses memodifikasi pernyataan atau variabel apa pun dalam kode. Itu tidak akan tercermin dalam kode proses lainnya. Misalkan jika proses anak mengubah kode itu tidak akan mempengaruhi proses induk.

Beberapa proses anak setelah kreasi mereka segera memanggil exec () . Panggilan sistem exec () menggantikan proses dengan program yang ditentukan dalam parameternya. Maka ruang alamat terpisah dari proses anak tidak ada gunanya. Satu alternatif di sini adalah copy-on-write.

Copy-on-write memungkinkan orang tua dan anak memproses untuk berbagi ruang alamat yang sama. Jika salah satu dari proses menulis pada halaman di ruang alamat, salinan ruang alamat dibuat untuk membiarkan kedua proses bekerja secara independen.

Definisi vfork ()

Versi fork () yang dimodifikasi adalah vfork (). Panggilan sistem vfork () juga digunakan untuk membuat proses baru. Mirip dengan fork (), di sini juga proses baru yang dibuat adalah proses anak, dari proses yang memanggil vfork (). Kode proses anak juga identik dengan kode proses induk. Di sini, proses anak menunda eksekusi proses induk hingga menyelesaikan eksekusi karena kedua proses berbagi ruang alamat yang sama untuk digunakan.

Karena proses anak dan orang tua berbagi ruang alamat yang sama . Jika ada proses yang memodifikasi kode, itu terlihat oleh proses lain yang berbagi halaman yang sama. Mari kita anggap jika proses induk mengubah kode; itu akan tercermin dalam kode proses anak.

Seperti menggunakan vfork () tidak membuat ruang alamat terpisah untuk proses anak dan orang tua. Oleh karena itu, itu harus diimplementasikan di mana proses anak memanggil exec () segera setelah pembuatannya. Jadi, tidak akan ada pemborosan ruang alamat, dan itu adalah cara yang efisien untuk membuat suatu proses. vfork tidak menggunakan copy-on-write .

Perbedaan Utama Antara fork () dan vfork ()

  1. Perbedaan utama antara garpu dan vfork adalah bahwa proses anak yang dibuat oleh garpu memiliki ruang memori terpisah dari proses induk. Namun, proses anak yang dibuat oleh panggilan sistem vfork berbagi ruang alamat yang sama dengan proses induknya.
  2. Proses anak yang dibuat menggunakan garpu mengeksekusi secara bersamaan dengan proses induk. Di sisi lain, proses anak yang dibuat menggunakan vfork menunda eksekusi proses induk sampai eksekusi selesai.
  3. Karena ruang memori proses orang tua dan anak merupakan modifikasi terpisah yang dilakukan oleh proses mana pun tidak mempengaruhi halaman orang lain. Namun, karena proses induk dan anak berbagi modifikasi alamat memori yang sama yang dilakukan oleh proses apa pun tercermin dalam ruang alamat.
  4. Garpu panggilan sistem () menggunakan copy-on-write sebagai alternatif, yang memungkinkan proses anak dan orang tua berbagi ruang alamat yang sama sampai salah satu dari mereka memodifikasi halaman. Di sisi lain, vfork tidak menggunakan copy-on-write.

Kesimpulan:

Panggilan sistem vfork () harus diimplementasikan ketika child memproses panggilan exec () segera setelah pembuatannya menggunakan fork (). Karena ruang alamat terpisah untuk proses anak dan orang tua tidak akan berguna di sini.

Top