[linux-ileri] Re: kernel!!!!

---------

New Message Reply About this list Date view Thread view Subject view Author view

From: Baris Metin (baris@metin.org)
Date: Tue 31 Dec 2002 - 06:59:31 EET


Selamlar,

Mon, Dec 30, 2002 at 03:40:38PM +0200 , onur simsek :
>
> oncelikle herkesin yeni yili kutlu olsun.

Mutlu yillar !

> ufak:) bir sorunum var.bildigim kadariyla processler "fork" system komutuyla
> cagriliyor,o da "do_fork" fonksiyonunu cagiriyor.processler oldurulurken de
> benzer sekilde "do_exit" fonksiyonu cagriliyor.bunlarin disinda process
> creation/deletion yontemi varmi,

_Unix_ (sys v) sistemlerde bir _kullanicinin_ yeni bir surec basatmasinin
tek yolu fork() (ve benzeri) cagrilari kullanmaktir. Cagirilan fonksyon
ne olursa olsun uygulayacagi algoritma fork algoritmasidir.

Simdi "o zaman calisan ilk surec nasil calisiyor?" sorusu sorulmalidir.
Bunu anlayabilmek icin sys V Unix'lerin (Linux'de boot sirasinda sys V
gibi davranir) boot islemi sirasinda nasil davrandiklarina goz atmak
gerekir. Hani heryerde duyarsiniz, "init ilk process'dir" , "kernel
init'i baslatir" vs. tarzinda aciklamalari... Kernel init'i baslatir ama
nasil baslatir ?

Acilis islemleri baslamasindan kernel'in calistirilmasina kadar olan
bolumu atliyorum. Bu asamaya kadar bilmek istedikleriniz var ise yine
listeye yazabilirsiniz.

Kernel bellege yuklendikten sonra boot programi kontrolu kernel'a
aktarir ve kernel calismaya baslar. Daha sonra kernel icsel veri
yapilarini olusturur (detaya girmiyorum), root "/" file system'i mount
eder ve process 0 (sifir) icin bir ortam hazirlar.

Process 0 icin ortam hazirlandiginda, sistem Process 0 olarak
calismaktadir. Kernel seviyesinde calisan process 0 fork algoritmasini
direk olarak kernel icerisinde uygulayarak fork eder. Yine kernel
seviyesinde calisan yeni surec Process 1'dir. Process 1 user
seviyesine gecemek icin bir data-region ayirir (allocate) ve kendi
adress alanina o alani baglar (attach). Alani kendi boyutu kadar
genisletir ve kendi kodunu kernel adress alanindan (adress space) yeni
alana tasir (User level). Process 1 daha once kayit ettigi bilgilerini
de alarak kernel space'den kopyaladigi kodu calistirir. Process 1 bir
user level surectir.

Bu calisan yeni surec "exec sistem cagrisi" ni cagiran bir kod icerir.
Bu sayede exec'i cagirarak normal yollar ile bir programi calistirir.
Calistirilan yeni program init'tir. Bildiginiz gibi exec ile pid
numarasi da degismediginden genellike Process 1 direk olarak init
kabul edilir/bilinir.

Yine sorulabilecek sorular vardir. Mesela init neden direk olarak kernel
seviyesindeyken exec edilmedi? Mutlaka bir user-level programa mi
ihtiyac var exec yapabilmek icin ? Tabi ki yok, yalniz bu sekilde bir
yontem uygulama (implementation) acisindan cok daha kolay olmustur.
Yani kernel seviyesinden de bir process baslatilabilir ama uygulamada
zorlanildigi icin kernel seviyesindeki kod kendisini user seviyesine
kopyalayarak burada exec'i uygular.

Linux icin ise, surec baslatma ve sonlandirma konulari icin
http://www.tldp.org/LDP/lki/lki-2.html#ss2.2 adresindeki dokuma
okunabilir. Orada ilk surecin (init) nasil baslatilgina dair bilgi
olmadigi icin ben yazmak istedim.

iyi calismalar,

-- 
Baris Metin
http://metin.org

-- Attached file included as plaintext by Ecartis --

-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQE+ESQzQY59PDyY1JsRAiyuAJ4sMI5dtvlEAhmVsecNs15Yo4PRPwCfYcR5 SlqPduxwlyHhNLBQUwaq6yg= =9pjw -----END PGP SIGNATURE-----


New Message Reply About this list Date view Thread view Subject view Author view

---------

Bu arsiv hypermail 2b29 tarafindan uretilmistir.