Çatal arasındaki fark(), vfork(), exec() ve clone() | Netgez.com
SORU
31 Ocak 2011, PAZARTESİ


Çatal arasındaki fark(), vfork(), exec() ve clone()

Google üzerinde dört ve ben bunların arasında fark var bu konuda bilgi çok büyük bir miktar olması beklendiği için, ama gerçekten dört çağrıları arasında sağlam bir karşılaştırma yoktu.

Bu sistem çağrıları arasında farklılıklar temel bir tür derlemeye çalışıyorum hakkında bir bakışta bak kurdum ve burada olmamın nedeni de bu. Tüm bu bilgileri doğru/eksik miyim önemli bir şey mi ?

Fork : çatal arama yapar temelde bir yinelenen mevcut süreç, aynı hemen hemen her yol (her şey kopyalanır, örneğin, kaynak sınırları içinde bazı uygulamaları ama fikir oluşturmak için yakın bir kopyası olarak mümkün).

Yeni süreci (çocuk) farklı bir süreç NUMARASI (PID) alır ve üst PID gibi eski işlem (üst) PID (PPID) vardır. İki süreç tam olarak aynı kod çalışır, çünkü çatal dönüş kodu - çocuk 0, üst alır, çocuğun PID alır hangisinin ne olduğunu. Bu, elbette, çatal çağrı varsayarak çalışır - değilse, hiçbir çocuk oluşturulur ve üst bir hata kodu alır.

Vfork : temel fark arasında vfork ve çatal o zaman yeni bir süreç oluşturulur ile vfork(), ana ortaklık süreci geçici olarak askıya alındı, ve alt süreç olabilir ödünç ebeveynin adres alanı. İşlerin bu garip durum çocuk ya da işlem çıkar, ya da execve aramaları kadar devam eder(), üst noktası süreç devam ediyor.

Bu bir vfork alt süreç anlamına gelir() beklenmedik bir şekilde ana süreç değişkenleri değiştirme önlemek için dikkatli olmak gerekir. Özellikle, alt süreç olmamalıdır dönüş işlevi içeren vfork() arayın ve olmamalıdır çağrı exit() (eğer ihtiyacı için çıkmak gerekir kullanın _exit(); aslında, bu da gerçek bir çocuğun normal bir fork()).

Exec : exec çağrısı temelde yeni bir program ile tüm mevcut süreci değiştirmek için bir yoldur. Geçerli işlem alanına programı yükler ve giriş noktasından çalışır. () exec yürütülebilir bir işlev tarafından işaret ile geçerli sürecini değiştirir. Bir exec olmadıkça asla orijinal programı için döner kontrol() hata.

Çatal Clone : Klon, yeni bir işlem oluşturur. Çatal aksine, bu çağrılar alt işlem arama işlemi, bellek alanı, dosya tanımlayıcıları tablo ve sinyal işleyicileri tablo gibi yürütme içerik parçalarını paylaşmak için izin verir.

Alt işlem klon ile oluşturulduğunda, uygulama fonksiyonu fn(arg) yürütür. (Bu çatal arama noktasından yürütme çocuğun devam ettiği için farklıdır.) Fn tartışma yürütme başında çocuk süreç tarafından çağrılan bir işlev için bir işaretçi. Arg değişkeni fn işlevi geçirilir.

Fn(arg) uygulama döndürür, alt işlemi sona erdirir. Tamsayı fn tarafından döndürülen çocuk için işlem çıkış kodu. Alt işlem de açıkça önemli bir sinyal aldıktan sonra exit(2) arayarak veya sonlandırabilir.

Kazanılmış Bilgi Formu :

Bu okumak için zaman ayırdığınız için teşekkürler ! :)

CEVAP
31 Ocak 2011, PAZARTESİ


  • vfork() eski bir iyileÅŸtirme. İyi bellek yönetimi, daha önce, fork() ana bellek tam bir kopyasını yaptı, bu yüzden oldukça pahalıydı. birçok durumda fork() geçerli bellek göster atar exec() izledi ve yeni bir tane oluÅŸturur yana, gereksiz bir harcama oldu. Günümüzde, fork() deÄŸil kopya bellek; sadece set olarak "kopya üzerinde yazma", yani fork() exec() olduÄŸu gibi verimli olarak vfork() exec().

  • clone() sistem çaÄŸrısı fork() tarafından kullanılır. bazı parametreler ile yeni bir süreç oluÅŸturur, diÄŸerleri ile birlikte, bir iÅŸ parçacığı oluÅŸturur. aralarındaki fark yapıları (bellek alanı, iÅŸlemci durumu, yığın, PID, açık dosyaları, vb.) paylaşılır sadece.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • efaustus9

    efaustus9

    16 HAZİRAN 2006
  • Hot For Nutrition

    Hot For Nutr

    26 ÅžUBAT 2007
  • Rozetked | Обзоры

    Rozetked | Ð

    5 AÄžUSTOS 2011