Process kavramı, Fork ve Fork Bomb Hakkında

İçerik;

1.Process kavramı
2.Process yapısı
3.Fork
4.Fork örnekler
5.Fork bomb
6.Fork bomb örnekler
7:Alınacak önlemler

1. Process kavramı

Genel olarak baktığımızda çalışan her program bir processdir. Bir programı çalıştırdığımızda programın ilgili fonksiyonları hafızaya(RAM) yüklenir ve işlemcide çalıştırılır. Her process’in bir ID değeri vardır(Process identification=PID) ve bir processi sonlandırmak istediğimiz zaman bu değeri kullanırız.Çalışan bir process’den yeni bir process yaratıldığında bilmemiz gereken iki şey var. İlki yeni process’i yaratan parent(ebeveyn) process, ikincisi ise yeni oluşan child(çocuk) process’dir.

Çalışan processleri görmek için Windows da görev yöneticisi , Linux da ise “ps auxf” komutu ile ayrıntılı görebilirsiniz.

 

İlk resimde gördüğünüz üzere “Nvidia Container” adlı program 4 farklı process tarafından çalışıyor. Dikkat ederseniz “Nvidia Web Helper Service” ise tek process tarafından çalışıyor peki bunun bize yararı/zararı ne ?

Bir programın birden fazla process çalıştırmasının iyi ve kötü yanları vardır. iyi yanı; bir programın çalışması için birden çok process in çalışması o programı kısa sürede işleme sokar. kötü yanı; process sayısı arttıkça hafıza(RAM) o kadar sömürülecektir ve işlemci bir program için birden fazla process işleyeceği için bilgisayarı yoracaktır. Bu da tam istediğimiz şey aslında (FORK BOMB!)

 

2.Bir Process’in yapısı

Process’in yapısına baktığımızda bizi Stack,Heap,Data ve Text alanları karşılamaktadır. Peki nedir bunlar ?

Stack yukarıdaki oklardan da anlaşılacağı üzere daha küçük adreslere doğru büyürken heap daha büyük adreslere doğru büyümektedir.

Text: Programın makine kodu bu alanda.
Data: Static verilerin bulunduğu yer (global değişkenler,sabit değişkenler vs.)
Heap: Process çalıştırılacağı zaman dinamik belleğe ihtiyaç duyar. Bu bellek heap yapısında bulunur.
Stack: Geçici bilgiler bu alanda tutulur.

Process’lerin State Information denilen bir bölümü bulunur. Bu bölümde process içinde bulunduğu durumu içeren durum bilgisini de barındırır.

 

3.Ve karşınızda Fork

Çalışan bir process’in kopyasını oluşturur ancak yeni olan process child process’dir.Fork ile handle alanının ve bellek alanının bir kopyası oluşturulur.Hem parent process hemde child process aynı işlemi yapar ve bütün yükü child process üstlenir. fork hakkında daha fazla bilgi almak için “man fork” komutunu kullanabiliriz.

 

 

 

4.Fork örnekler

Örnek bir fork uygulaması:

 

Processler bir değer döndürür. Hangisinin çocuk process hangisinin ebeveyn process olduğunu anlamak için dönüş değerlerini bilmemiz gerekir.child process’e “0” değeri atanır. parent process’e ise “0” dan farklı bir değer atanır.

Örnek uygulama:

 

Görüldüğü gibi parent process ile child process aynı işlemi yapıyor.

 

5.Varsa Fork’un patlayalım Fork’um

Buraya kadar process’lerin ve fork’un nasıl çalıştığını az çok öğrendik şimdi sıra bunu nasıl kullanacağımıza geldi.Eğer basit bir sistemi saniyeler içerisinde kullanım dışı bırakmak istiyorsak fork’u kötüye kullanmalıyız. Peki nasıl ?

Şurayı hatırlamakta fayda var;

Bir programın birden fazla process çalıştırmasının iyi ve kötü yanları vardır. iyi yanı;
bir programın çalışması için birden çok process in çalışması o programı kısa sürede işleme sokar. kötü yanı;
process sayısı arttıkça hafıza(RAM) o kadar sömürülecektir ve işlemci bir program için birden fazla process işleyeceği için bilgisayarı yoracaktır. Bu da tam istediğimiz şey aslında (FORK BOMB!)

İşte bahsettiğim şey bu ! sürekli process oluşturup işlemciyi yorarak bilgisayarın afallamasını sağlayabiliriz.

6.Fork Bomb Örnekler

Linux kullananlar için :

şu basit bash cümlesi ile fork bomb yaratabilirsiniz   :(){ :|:& };:

Veya C kodu ile:

Windows Kullananlar için:

:fork

start
start
start
start
start
start
start

goto fork

 

.bat şeklinde kaydedip görsel şölenin ve fork’un keyfini çıkarabilirsiniz.

7.Alınacak Önlemler

Fork bomb’u engellemek için kullanıcının yada bir grubun çalıştıracağı maksimum process miktarını sınırlandırmamız gerekmektedir.

Bunun için de /etc/security dizini altında bulunan limits.conf dosyasına ufak bir ayar çekmemiz yeterli olacaktır.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Reklama Tıkla Destek Ol!