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

  • Dive In

    Dive In

    17 Temmuz 2013
  • DrakeVEVO

    DrakeVEVO

    17 AĞUSTOS 2009
  • krotoflik

    krotoflik

    26 ŞUBAT 2011