Üye Kayıt Üye Giriş

Unix/Linux Sistemlerinde Process Hiyerarşisi (Yaratılma Aşamaları)


Unix/Linux Sistemlerinde Process Hiyerarşisi (Yaratılma Aşamaları)

 

Tipik bir Unix türevi sistemde process’ler belirli bir sıraya göre yaratılmaktadır. Kullanıcının
login olması işlemine kadar bir dizi process yaratılır.


Çekirdek yüklenirken ismine swapper ya da sched denilen ve temel process’ler arası geçiş
mekanizması için kullanılan 0 ID’ye sahip bir process yaratılmaktadır.


swapper process’i fork ve exec ile init process’ini yaratır. init process’inin ID değeri 1’dir.
init process’i zombie durumda olan process’lere üst process görevi yapar ve onları
sonlandırır. init terminal işlemleri için genellikle getty diye isimlendirilen (çeşitli
sistemlerde buna benzer çeşitli isimler kullanılmaktadır) terminal oluşturan programı fork ve
exec fonksiyonlarıyla çalıştırır. getty programı genellikle sistemde terminal özelliklerinin
bulunduğu bir dosyaya başvurur. Yani bu program komut satırı argümanı olarak yaratılacak
terminale ilişkin bilgilerin bulunduğu dosyanın ismini almaktadır. Terminal bilgileri
genellikle /etc/ttys gibi bir dizin altında bulunmaktadır. Terminal yalnıza monitör anlamına
gelen bir kavram değildir, monitör ve klavyeden oluşan bir kavramdır. Bundan sonra getty
open fonksiyonuyla /dev dizini altında bulunan ilgili terminal dosyasını önce read modunda,
sonra write modunda açar. Sonra 1 numaralı betimleyiciye dup işlemini uygular. Böylece
getty programı stdin, stdout ve stderr dosyalarına ilişkin betimleyicileri oluşturmuş olur.
Terminal Unix sistemlerinde bir dosya gibi işlem görür. Örneğin programcı isterse /dev
dizininin altında bir terminali getty’nin yaptığı gibi açabilir.


Bu işlemden sonra getty setenv fonksiyonuyla TERM gibi terminallere ilişkin çeşitli çevre
değişkenlerini oluşturur.


Artık sıra login işlemine gelmiştir. getty programı bu aşamada username yazısını çıkartarak
kullanıcı ismini sorar. Bundan sonra getty username bilgisini komut satırı argümanı yaparak
fork ve exec fonksiyonuyla login programını çalıştırır. Artık login programı çalışmaktadır.
login programı kullanıcıdan password ister, password’ü encrypt fonksiyonuyla şifreler. login
getpwnam fonksiyonu ile kullanıcı ismine karşılık passwd dosyasından kullanıcı bilgilerini
çeker. passwd dosyasındaki password şifrelenmiş olduğuna göre şifre uyuşumunu kontrol
edebilir. Eğer şifre uyuşumu sağlanmamışsa login kendisini exit(1) ile sonlandırır.


Bu sırada getty sonlanmıştır. init aynı işlemleri yeniden yaparak aynı noktaya getirir. Aslında
pek çok Unix sisteminde getty programının login yerine başka bir programı çalıştırması
sağlanabilir. Örneğin /etc/gettytab gibi bir dosyadan pek çok sistemde bunu değiştirmek
mümkündür.


login password uyuşumunun sağlandığını görmüş olsun. Bu noktada gerçek ve etkin kullanıcı
ID’si root’tur. login setuid ve setgid fonksiyonlarını kullanarak passwd dosyasında belirtilen
kullanıcı ve grup ID’lerini set eder. Bu noktada process artık root değil sıradan bir process
haline gelmiştir.



Bundan sonra login programı HOME, SHELL, USER, LOGNAME, PATH gibi çevre
değişkenlerini set eder. Sonra chdir fonksiyonu ile passwd dosyasında belirtilmiş olan home
dizinine geçer. Artık login fork ve exec fonksiyonlarını kullanarak passwd dosyasında
belirtilen shell programını çalıştırır.


Bundan sonra shell çeşitli başlangıç script dosyalarını (Dos’ta autoexec.bat gibi) çalıştırır.
Örneğin tipik bir Unix sisteminde bu dosyalar bsh için .login, bash için .login_bash
biçimindedir. shell çalıştırıldığında artık login ve getty programları sonlanmıştır. logout
komutuyla shell sonlanır ve init programı terminal için yeniden aynı işlemleri yapar.
Pek çok sistemde burada anlatılanlarda küçük değişiklikler olabilmektedir. Örneğin shell’in
çalışmış olduğu durumda getty sonlanmış, ama login sonlanmamış olabilir. Böylece shell’de
logout yapıldığında dönüş yeri init değil login olabilir.

Bilgisayar Dershanesi Ders Sahibi;
Bilgisayar Dershanesi

Yorumlar

Yorum Yapabilmek İçin Üye Girişi Yapmanız Gerekmektedir.

ETİKETLER