JustPaste.it

Kernel (Çekirdek) Hakkında Neler Biliyoruz?

Merhaba Linux severler! yine hoşlanacağınızı umduğumuz bomba bir içerik ile sizlerleyiz. Hiç şöyle düşündüğünüz oldu mu? Evet, ben açık dünya projesinde yer alan bir bireyim ve belki de yaptığım marjinal tercihimden dolayı şu an Cmd ekranıyla değil, Uçbirim (terminal) ile karşı karşıyayım. Ama bir dakika... Her şey iyi güzelde tüm bunlar nasıl gerçekleşiyor? yani bunun yapı taşını oluşturan, meydana getiren bir faktör mutlaka vardır. "Evet tam olarak böyle düşündüğüm oldu" dediğinizi duyar gibiyim, hatta duydum.

Tahmininiz doğru, örnekleme yaparak anlatacak isek; Windows'ta bu işe dahil olmak üzere elbette Linux'unda bir çekirdek hiyerarşisi bulunmakta. Öncelikle değerli arkadaşlarım, bilmemiz gereken bazı hususlar mevcut. Kernel, olmazsa olmazdır... Dikkat edin, burada "Ayrılsakta beraberiz" vurgusu yapmıyorum. Linux, yapısı gereği başlı başına bir çekirdektir zaten. Bizler toplumsal duyularımızdan kaynaklı işletim sistemi olarak algılasakta, bilirsiniz ki doğrular ve olgular tektir değişmezler. Çekirdek, Linux'ta daima birinci faktörü oluşturur ve dosya sisteminin yapısından öncelikli olarak karşımıza çıkar. Şimdi gelin kendimizi test edelim, neler biliyoruz sınamasını yapalım.

Kernel nasıl bir yapıya sahip?

Arka plana gizlenmiş ve el maharetleri yüksek bir penguen düşünün... Açık gözle birebir göremiyorsunuz ama, o sizi görüyor. Görmekle yetinmiyor makinenizin düzenini gözetiyor. Yazılım bileşenlerinizden tutun ki donanımınıza kadar, hatta sisteminizin dış kaynakları ve entegre hafızasına uzanıyor. Kernelin yazılım dilinin ayrıca "C" olduğunu bilmekte yarar vardır.

Ne işime yarayabilir?

İnanın ki çok işinize yarayacak bir elementten bahsediyoruz... Şöyle ki, zaten Kernel'e Linux'un bir işletim sistemi yapısına bürünebilmesi için ihtiyaç duyacaksınız. "Çekirdeksiz Linux" ikilemesi size de saçma geliyordur eminim. Yani, doğal olarak özgür dağıtımınız beraberinde çekirdeğiniz ile de tanışmış olacaksınız. 

Bir upgrade (yükseltme) mantığı kernel için geçerli mi?

Evet, her zaman diğer yazılarımızda bahsettiğimiz gibi. Ne kadar yükseltmeye ve güncellemeye meraklı olursanız o kadar doğru olur, o kadar güvenli kalırsınız. Dolayısıyla güncelleme mantığı kernel içinde geçerlidir. Güncellemek, güncel sistem kullanmak her zaman sizlere cazip gelmeyebilir fakat büyük faydalarının olduğu kesin. Ufak bir çözümleme ile düşünelim isterim... Çok eski bir işletim sistemi kullanıyor olun, bunu farz-ı misal'e denk getirmek istemiyorum sürekli aslında. Bu "X" işletim sistemi olsun. Değerli dostlarım, eski bir sistemin içerisinde barındırdığı yöntemlerde güncelliğini yitirmiş olacaktır ayrıca size kazanç değil zarar getirecektir. İlk sırada güvenlik alanındaki değeri ele alın, sonra stabilitasyonu, ve son olarak kullanımı ele alın. Güvenliği bu sıralamada baş köşeye oturttuk zira sizi riske sokacak en önemli faktördür.

Madem ki yükseltme olanağımız var, o zaman nasıl yapacağım bunu?

Bunun için, The Linux Kernel Archives'ten yardım alabiliriz. Bu bahsi geçen linkte, genel olarak Linux çekirdekleri, sürümleri ele alınır. Sayfa içersinde gezinirken bazı sürüm numaraları ile karşılaşıyoruz, bunlar hangi çekirdeğin hangi güncel sürümde olduğunu bize gösteriyor. Örneğin; bugünün tarihi Perşembe, 10 Ocak 2019, ve sayfada yer alan eşzamanlı çekirdek sürümümüz stable: 4.20.1" imiş. Yani, buradan çıkarımımız Linux için halihazırda bulunan 4.20.1 versiyonuna ait stabil bir çekirdek sürümü bulunduğu. Burada yine dikkat edilmesi gereken bir konu ve karışıklıklara sebep olan durum var ki o da, stabil çekirdek dahi olmuş olsa bile her sürümün sizin kullandığınız dağıtıma, distroya göre farklılık göstereceğidir. Mainline (ana), stable (stabil), longterm (uzun vade) her sürüm size uygun olmayabilir... O meşhur "Kernel Panic" hatası vardır hani. Canlı canlı görmek istemezsiniz değil mi o blue screen vari hatayı? buna benzer şeylerle karşılaşmak istemiyorsanız bilmeniz gerekenler var demektir. Siz herhangi bir GNU/Linux dağıtımı ile yola çıktığınızda, sisteminize tanımlı bir kernel ve beraberinde bir yazılım güncelleme sistemi ile bu yolu sürdürüyorsunuz. Dolayısıyla yukarıda verdiğim adres, "Çekirdek derlemesi" denilen hususun konusudur. Bu kernel meselesi için ileri boyuttur ve tahmin edeceğiniz üzere teferruatlıdır. O yüzden çekirdek derlemek şu an bizim konumuz değil. Gelecek olan istek ve talep doğrultusunda bu konuya da ileride değinebiliriz.

Bu çekirdeklerin çeşitleri var mı, varsa neler?

Evet, kerneller yapıları içerisinde çeşitlendirilebilirler. Bunun sadece Linux'a has olmadığını, birçok sistemde kullanıldığını artık biliyoruz. O halde söz konusu tipleri, çeşitleri olacaktır. Hadi şu çeşitlere göz gezdirelim...

Monolithic kernel (monolitik çekirdek): "Tek" işlemden yola çıkılmış işletim sistemi çekirdeği manasındadır. Birçok işlevi toparlayarak tek kısımda işler, analiz eder. Parçalanmış bir yapıya sahip değildir. İşlenen veri son sürattir ve kullanıcıyı bekletmez. Ayrıca Linux'ta var olan geleneksel çekirdek şeklidir kendisi.

Modular kernel (modüler çekirdek): Bu çekirdek tipinde modüller konuşur, bu yüzden de modüler yapıya sahip olduğu belirtilir. Monolik çekirdeğe nazaran, işlediği çoklu verilerin ve fonksiyonların sistemin performansına eksi olarak döndüğü rivayet edilmekte. Zira modüler çekirdek'te süreç işlemesi adına veriler bekletilir.

Hybrid kernel (melez çekirdek): Windows ve MacOS'un daimi yardımcısıdır. Monolitik kernel'da olan tek tip çalışma modu, hybrid için geçerli değildir. Yani, user modları ve admin modları şeklinde ilerlediğini görürüz. Server modların ise otomatik admin'e tanımlandığına şahit oluruz. 

Çekirdek türlerinide böylece incelemiş olduk. Şimdi gelin sizler karar verin hangisinin daha cezbedici olduğuna. 

The linux kernel archives'te bulunan sürüm numaraları neyi ifade ediyor?

Gelin, bu soruyu cevaplamak için ilk önce makinemizde tanımlı (dağıtımımıza ait) çekirdeğimizi ve sürümünü öğrenelim. Seçeneklerimiz;

1.# "uname -r" (tırnaksız) komutu ile uçbirimde öğrenmek

Örneğin, terminalde ki çıktınız şu şekilde olsun> 4.15.0-43-generic bu durumda;

4: Kernel version (çekirdek versiyonu)

15: Major release (major sürümü, revizyonu)

0: Minor release (minör sürümü, revizyonu)

43: Bug release (hata düzeltme sürümü)

generic: (genel manada, dağıtıma ait vurgusu)

2.# "uname -a" size daha detaylı bilgi sunabilir. Uçbirimde örnek çıktısı;

Linux HopeMint 

4.15.0-43-generic #46-Ubuntu SMP Thu Dec 6 14:45:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

3.# "/proc/version yolunda" belirtilen dosya yolunda çıktıya ulaşmak için uçbirimde bu komutu kullanırız.

Hope@Mint:~$ cat /proc/version

Linux version 4.15.0-43-generic (buildd@lgw01-amd64-001) (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #46-Ubuntu SMP Thu Dec 6 14:45:28 UTC 2018

uname -a parametresinden daha detaylı bilgi edinebiliyoruz desek doğru olur.

4.# Yine bu komutlara alternatif olarak "dmesg | grep" kullanılabilir. Açık dünyada bir sınırınız yok... Ek olarak "uname"'in man sayfasına göz gezdirdiğinizde çıktılar için daha fazla komut kullanabileceğinizi ve aynı anda hangi komutları uygulayabileceğinizi görebileceksiniz. 

Değerli okurlar... Yazıyı toparlamak saatlerimi aldı fakat yine de değer diyorum ve sizlere şimdilik veda ediyorum. Diğer yazılarda görüşmek üzere, sabredip sonuna kadar okuduysanız mutluyumdur efendim, esen kalın ve Linux'la kalın. 

SDN/Forum adına hazırlanmıştır, alıntı değildir.

Hazırlayan: Umut YAZGAN