FORK() Sistem Çağrısı Nedir? Çocuk Proses ve Anne Proses İlişkisi Nasıl İşler?

Yazar:

Proses konusunun devamı olan Fork() sistem çağrısından bahsedeceğim. Eğer daha önceki yazımı okumadıysanız ilk önce buraya tıklayarak o yazımı okumanızı tavsiye ederim.

Daha önceki yazımı okuduysanız orada bahsetmiştim. Bir program bir yada birden fazla proses tarafından çalıştırılabilir. Bir programın birden fazla proses tarafından çalıştırılması demek, tek bir prosesin yapacağı işi, birden fazla proses yaparak o programın daha kısa sürede ve daha hızlı bir şekilde çalışmasına yardımcı olduğundan bahsetmiştik. Yani bir binayı bir işçi yerine birden çok işçinin inşa etmesi nasıl ki o inşaat işinin daha kısa sürede tamamlanmasını sağlıyorsa, bunu da ona benzetebilirsiniz. Çünkü aynı anda birbirine paralel olan işler yürütülebilmektedir. Anne proses bir iş ile ilgilenirken çocuk proses aynı zamanda daha başka bir iş ile ilginiyor olabilir veya aynı işi yapıyor olabilirler yada bir diğerini bekliyor da olabilirler. Birebir aynı olduğu gibi farklı bir proses de olabilir. Biz bunu kullanacağım sistem çağrıları ile ayarlayabiliyoruz.

Fork() Çağrısı Nedir?

Bir programın çalışmasına yarayan bir prosesin kopyasının oluşturulması işlemidir. Yani kısacası yeni bir proses oluşturma işlemidir. Oluşan bu kopya prosese çocuk proses denir. Bu çocuk proses kimden kopyalandıysa, kopyalandığı o proseses ise Anne prosestir. Bu sistem çağrısı ile oluşan ikinci kopya prosesin yani çocuk prosesin tüm özellikleri, kod belleği birebir anne proses ile aynıdır.




Program koduna yazdığımız fork() ifadesinden sonra hem anne proses hem de çocuk proses aynı işlemi yapar.

Örneğin ben derleyiciye printf("Merhaba Dünya\n"); yazdırdım. Eğer ben bu tırnak içerisindeki kelimeyi fork() çağrısından sonra yazarsam, 2 defa "Merhaba Dünya" yazılır ekrana. Çünkü yazma işlemini hem çocuk proses yapıyor hem de anne proses yapıyor. Kullanacağımız sistem çağrıları yardımıyla çocuk prosese başka işler yaptıra da biliriz.

Aynı program içerisinde aynı işi yapan bu 2 prosesin herbirine farklı işler yaptırmak için hangi prosesin çocuk, hangi prosesin ise anne proses olduğunu bilmemiz gerekiyor. Bunu da anlamak için, proseslerin dönüş değerini bilmemiz yeterlidir. fork() dediğimiz çağrı ile çocuk proses "0" değeri atanır. Anne prosese ise "0" dan farklı bir numara atanır.

Bu aşamadan sonrası için bir video çektim. Daha iyi anlamanız açısından fork() çağrısı ve proseslerin detaylı anlatımı için bir video hazırladım.




Konu ile ilgili alıntı yaptığım ek bir bilgi : Ufak tefek işleri parent yaparken, bütün ameleliği çocuk prosese yükler. Oturup gazete okuyan bir babanın çocuğundan durmadan çay,terlik,yastık vs istemesi gibi bir şey bu. Bu olay proses'in daha hızlı işlem yapmasına olanak sağlar çünkü işleyiş iki koldan ilerler. İşleyiş olarak multithread olayına benzer ama temelde tamamen farklıdırlar.





Hey!

Blogkafem'de okuduğunuz içeriklerle ilgili kişisel Twitter hesabım üzerinden benimle iletişme geçmek isterseniz Twitter adresim : www.twitter.com/aliarslan10

Sosyal medya hesabım dışında Blogkafem'de okumuş olduğun içerik ile ilgili belirtmek istediklerinizi aşağıdaki yorum formuna yazabilirsin. En kısa sürede dönüş yapacağımdan emin olabilirsin. :)

Okuduğunuz içerik faydalı olduysa #blogkafem etiketiyle okuduğunuz içeriğin linkini Twitter'da paylaşarak Blogkafem'e destek olabilirsiniz.

2 yorum:

  1. öncelikle teşekkürler.
    hocam vidyonun en sonunda getpid() ve getppid() yazdık ve anne ve çocuğun numaralarını aldık fakat fork'u hiç çalıştırmadan yaptık bu işi buraya kadar olan kısımda hep fork() kullandık ve çocuk process oluştu ama bu kısımda fork yazmadan kodu çalıştırdık yani çocuk process i biz oluşturmadık. burayı tam anlamadım. şimdiden teşekkür ederim.

    YanıtlaSil
    Yanıtlar
    1. Derlediğimiz kodlar sonucu çalışan programın, yani konsolun kendisi de bir prosestir zaten. O şekilde düşün.

      Sil
Yorum Sayfası :



Yorum yaparken dikkat edilmesi gerekenler;

1. Yorum Formunu doldurduktan sonra Profil Seç -> ADI/URL bölümünden isminizi yazıp yorum yaparsanız size karşı bir hitap şeklimiz olur. (URL kısmını boş bırakabilirsiniz.)

2. Anonim olarak yaptığınız yorumlar "Adsız" olarak gözükmektedir.

3. Türkçe yazım ve dilbilgisi kurallarına uymaya özen gösteriniz.

4. Küfür,hakaret,mail adresi veya konu ile ilgisi olmayan reklam amaçlı website adresi içeren yorumlar yayınlanmamaktadır.

Custom Search

Kafemizde En Son Kim, Ne Demiş?

Kafeyi Dikizleyenler :)

Blog Istatistik

BLOGKAFEM.NET

© Copyright 2008-2016
Sitedeki yazıların her hakkı BLOGKAFEM.NET sitesine aittir.
Kopyalanması halinde lütfen kaynak gösteriniz.
DMCA.com Protection Status
Anasayfa | Hakkımızda | Bizden | Reklam | İletişim