İşletim Sistemlerinde Proses Kavramı Kaan Aslan 21 Şubat 2006 Program çalıştırılabilen bir dosyanın diskteki durumunu ya da kaynak kodu belirtmek için kullanılan bir terimdir. Çalışmakta olan programlara proses denir. İşletim sistemi çalıştırdığı programların kullandığı kaynakları çeşitli tablolar oluşturarak izler. Program belleğin neresine yüklenmiştir, hangi dosyaları kullanmaktadır, ne kadar süredir çalışmaktadır? Buna benzer pek çok temel sorunun yanıtı işletim sistemi tarafından bilinmek zorundadır.[1] Her işletim sistemi prosesleri izlemek için o prosese ilişkin bilgileri çeşitli veri yapılarında tutar. Biz kitabımızda işletim sistemlerinin prosesleri izlemek için oluşturduğu veri yapısına proses tablosu diyeceğiz. Proses tablosu yerine değişik sistemlerde başka isimlerin kullanıldığına tanık olabilirsiniz. Örneğin başka kaynaklarda proses tablosu yerine proses kontrol bloğu (process control block) ya da process veritabanı (process database) gibi isimlerle karşılaşırsanız şaşırmayınız. Proses tablolarının gerçek veri yapısı sistemler arasında farklılık gösterse de genel hatlarıyla birbirlerine benzer. Örneğin, prosesin yetkisel hakları, prosesin açmış olduğu dosyalara ilişkin bilgiler, prosesin çalışma süresine ilişkin istatistikler pek çok işletim sisteminde şu ya da bu biçimde proses tablosunda tutulmaktadır. İşletim sistemleri tüm proseslerin proses tablolarını belli bir düzen içerisinde (örneğin tipik olarak bağlı listeler biçiminde) tutar. Böylece işletim sistemi gerektiğinde tüm prosesleri gözden geçirebilir, herhangi bir proses üzerinde işlem uygulayabilir. POSIX sistemlerindeki ps kabuk programı sistemdeki proseslere ilişkin bilgileri almakta kullanılır. Aşağıda örnek bir ps çıktısını görüyorsunuz: Çalışmakta olan bir program başka bir programı çalıştırabilir. Başka bir deyişle bir proses başka bir prosesi yaratabilir. Örneğin siz UNIX türevi bir sistemde ya da Windows’da komut satırından bir programı çalıştırdığınızda aslında çalıştırdığınız programı siz değil komut satırı programı (örneğin UNIX türevi sistemde bash gibi bir kabuk program, Windows’da cmd.exe) çalıştırmaktadır. Siz yalnızca çalıştırılacak programı belirlemektesiniz. Ya da IDE kullanarak bir program yazıp çalıştırdığınızı düşünün. Bu durumda da programı siz değil aslında IDE çalıştırıyor durumdadır. Bir prosesin başka bir prosesi oluşturması durumunda oluşturan prosese üst proses (parent process), yeni oluşturulan prosese ise alt proses (child process) denir. Örneğin, disk üzerinde a ve b isimli iki çalıştırılabilir program dosyası bulunuyor olsun. Biz kabuk üzerinden a programını çalıştıralım. Çalışmakta olan a programı da 1 Kaan Aslan Makale Arşivi – www.kaanaslan.net b programını çalıştırıyor olsun. Bu durumda a prosesi b prosesinin üst prosesi, b prosesi de a prosesinin alt prosesidir. UNIX/Linux sistemlerinde prosesler arasında her zaman altlık-üstlük (parent-child) ilişkisi vardır. a prosesini çalıştırmakta kullandığımız kabuk da aslında bir prosestir. Bu durumda a prosesinin üst prosesi de kabuktur. a programı b programını çalıştırdıktan sonra bir de c programını çalıştırsa b ile c prosesleri kardeş prosesler olacaktır. Kabuk prosesi ve init prosesi nasıl yaratılmaktadır? Bu soruların yanıtlarını proseslerin ayrıntılı bir biçimde incelendiği 4. Bölümde bulacaksınız. Şimdilik proseslerin birbirlerini yaratabildiğini ve init prosesi dışında her prosesin bir üst prosesi olduğunu bilmeniz yeterlidir. Ayrıca, UNIX/Linux sistemlerinde proseslerin yaratılmasıyla programların çalıştırılması iki ayrı işlem olarak gerçekleştirilmektedir. Prosesler arasındaki altlık-üstlük ilişkisinin anlamı nedir diye merak edebilirsiniz. Alt proses (İngilizcesiyle çocuk proses) yaratılırken , üst prosesten (İnglizcesiyle ebeveyn proses) bazı özellikleri almaktadır. Pek çok işletim sisteminde prosesin erişim hakları, çalışma dizini (current working directory), dosya betimleyicileri, çevre değişkenleri yaratım sırasında üst prosesten alt prosese aktarılır. Alt proses aktarılan özellikleri daha sonra değiştirmeden kullanabilir ya da değiştirebilir. Windows sistemlerinde altlık-üstlük ilişkisi UNIX/Linux sistemlerinden daha zayıftır. Yani göreli olarak daha az özellik alt prosese aktarılır. Prosesler arasında altlık ve üstlük ilişkisi olduğuna göre kabuk prosesinin de bir üst prosesi var mıdır? Yani kabuk programı da başka bir program tarafından çalıştırılmış mıdır? UNIX/Linux init denilen bir prosesten yaratılmıştır. Kabuk prosesinin üst prosesi init olmasa da prosesleri bir ağaç biçiminde gösterirsek bu ağacın en tepesinde init prosesinin bulunduğunu söyleyebiliriz. sistemlerinde her proses doğrudan ya da dolaylı olarak init prosesinden yaratılmıştır. 2 Kaan Aslan Makale Arşivi – www.kaanaslan.net [1] İnglizce process terimi ile task terimi tamamen aynı anlamda kullanılmaktadır. 3 Kaan Aslan Makale Arşivi – www.kaanaslan.net