Kernel Nedir, Ne İşe Yarar?

Hızlı Bakış

Kernel, bir işletim sisteminin donanım ile yazılım arasındaki kritik bağlantı noktasıdır. Bu temel yapı, programların işlemci ve bellek gibi kaynaklara güvenli şekilde erişmesini sağlıyor. Monolitik mimari tüm sürücüleri tek bir çekirdek alanında toplarken, mikro çekirdek ise temel işlevleri asgari düzeyde tutuyor. Hibrit modeller hız kazanmak için mikro yapıya ek kod enjekte ediyor. Örneğin, Linux ihtiyaç anında modül yükleyerek esnek bir kaynak yönetimi sunuyor. Böylece sistem, uygulama talepleri ve fiziksel donanım arasındaki her etkileşimi sıfır çakışma ile koordine ediyor.

Kernel (Çekirdek), işletim sisteminin temel bir parçası olan bir yazılımdır. Öncelikle çeşitli programlar için bilgisayar donanımına güvenli erişim sağlamaktan sorumludur.

Kernel Tanımı ve Özellikleri

İşletim Sistemlerindeki Kernel Nedir?

Sistem çağrı hizmetleri aracılığıyla kaynakları yönetmekten sorumludur. Ayrıca hangi programın bir donanım cihazı kullanabileceğine ve neyin çoğullama olarak bilinen süreye karar vermekten de sorumludur.

Donanıma doğrudan erişmek gerçekten karmaşık olabilir, bu nedenle çekirdekler genellikle bir dizi donanım soyutlaması uygular.

Bu karmaşıklığı gizler ve altta yatan donanıma temiz ve düzgün bir arabirim sağlayarak geliştiricinin kullanımını kolaylaştırır.

Ne İşe Yarar?

  • Çalışan tüm programlar ve işlemler için bellek yönetimi sağlar.
  • Çalışan programları ve işlemleri kullanan işlemci zaman yönetimi sağlar.
  • Kaynak ve donanım isteyen programlar arasındaki iletişimi sağlar.
  • Bir makinenin farklı bilgisayar programlarının (görevlerinin) yönetimini sağlar.
  • Donanım yönetimini gerçekleştirir.

Kernal Türleri

Bilgisayar kullanmak için bir çekirdeğe ihtiyacınız yoktur. Programlar, herhangi bir donanım soyutlaması veya işletim sisteminden herhangi bir yardım almadan geliştirmeleri istediği sürece doğrudan boş bir bilgisayara yüklenebilir ve çalıştırılabilir.

Bu, her seferinde bilgisayarı yeniden başlatmak ve yeniden yapılandırmak zorunda olduğunuz farklı programları kullanmak için ilk bilgisayarların çoğunu kullanmanın normal yoluydu.

Zamanla, yükleyici ve hata ayıklayıcı gibi küçük yan programlar, farklı çalışmalar arasında bile bellekte bırakıldı veya salt okunur bellekten yüklendi. Onlar geliştikçe, en eski işletim sistemi çekirdeklerinin ne olacağının temeli oldular.

Dört ana kernel türü vardır:

  1. Monolitik Çekirdekler

Altta yatan donanımın gerçekten güçlü ve çeşitli soyutlamalarını sağlar.

  1. Micronuclei Çekirdekler

Küçük bir dizi basit donanım soyutlaması sağlar ve daha fazla işlevsellik sunmak için sunucular adı verilen uygulamaları kullanır.

  1. Hibrit Çekirdekler

Daha hızlı çalışmalarını sağlamak için Kernel alanına ek kod eklemeleri dışında, saf mikro çekirdeklere çok benzerler.

  1. Exonuclei Çekirdekler

Herhangi bir soyutlamayı kolaylaştırmaz, ancak donanıma doğrudan veya neredeyse doğrudan erişim sayesinde daha fazla işlevsellik sağlayan kitaplıkların kullanılmasına izin verir.

Linux Çekirdeği

Önyükleme klasöründe ayrıca initrd.img sürümü, System.map sürümü ve yapılandırma sürümü adı verilen çok önemli dosyalar da olacaktır. İnitrd dosyası, dosyayı geçerli çekirdekten ayıklayan ve yürüten küçük bir RAM diski olarak kullanılır.

System.map dosyası Kernel tam olarak yüklenmeden önce bellek yönetimi için kullanılır ve yapılandırma dosyası çekirdeğe başlangıçta hangi seçeneklerin ve yükleme modüllerinin çalıştırılacağını bildirir.

Linux Çekirdek Mimarisi

Linux çekirdeği monolitik olduğundan, diğer Kernel türlerinden daha karmaşıktır.

Bu, Linux’un ilk günlerinde biraz tartışılan bir tasarım özelliğiydi ve hala monolitik çekirdeklerin sahip olduğu tasarım kusurlarından bazılarına sahiptir.

Linux çekirdeği geliştiricilerinin bu kusurları aşmak için yaptıkları bir şey, çalışma zamanında yüklenip indirilebilen Kernel modüllerini yapmaktır, yani çekirdeğinize anında özellikler ekleyebilir veya kaldırabilirsiniz.

Bu, düşük seviyeli canlandırma gibi sunucu işlemlerini çalıştıran modüller ekleyerek çekirdeğe donanım işlevselliği eklemenin ötesine geçebilir, ancak bazı durumlarda bilgisayarın gereksiz yere yeniden başlatılmasına neden olarak çekirdeğin tamamen değiştirilmesine izin verebilir.

Çekirdek Modülleri

LKM (loadable kernel modules/yüklenebilir çekirdek modülleri)’ler, kullanılabilir tüm belleği tüketmeden tüm donanımlarla çalışmasını sürdürmek için gereklidir.

Bir modül genellikle çekirdeğin aygıtlar, dosya sistemleri ve sistem çağrıları gibi işlevlerini artırır. LKM’lerin uzantısı var. Normalde /lib/modules dizininde saklanır.

Modüler doğası gereği, yükleme modüllerini ayarlayarak veya ayarlayarak, menuconfig komutuyla önyükleme sırasında veya /boot/config dosyasını düzenleyerek çekirdeğinizi kolayca özelleştirebilir veya modprobe ile modülleri anında yükleyebilir ve indirebilirsiniz.

Üçüncü taraf ve kapalı kaynak modüller Ubuntu gibi bazı dağıtımlarda bulunur ve modüllerin kaynak kodu kullanılamadığından varsayılan olarak yüklenemez.

Yazılım geliştirme şirketleri kaynak kodu sağlamaz, aksine kendi modüllerini oluşturur ve dosyalarını derler.

Bu modüller biradaki gibi serbest olmasına rağmen, konuşmadaki gibi özgür değildirler ve bu nedenle bazı dağıtımlara dahil edilmezler, çünkü koruyucular özgür olmayan yazılım sağlayarak çekirdeği kirlettiklerini düşünürler.

Windows Kernel & Çekirdeği

Windows, zaten ayrıcalıklı bir konuma sahip olan Unix gibi diğerleriyle pazarda rekabet edebilen bir işletim sistemidir, sonuçlar açısından, o yeri kazanmasına izin veren bir dizi özelliğe sahiptir.

Kernel Modu

HAL (Hardware Abstraction Layer/Donanım Soyutlama Katmanı) donanım ve işletim sisteminin geri kalanı arasındaki bir arabirimdir. Bir DLL olarak uygulanır ve sistemin geri kalanını kesme sürücüleri, giriş/çıkış arayüzleri gibi donanım özelliklerinden korumaktan sorumludur.

Bu soyutlama sistemi daha taşınabilir hale getirir, çünkü sistemin geri kalanı hangi platformda çalıştığı konusunda endişelenmek zorunda değildir.

Sistemin çalıştığı her platformun belirli bir HAL’ye ihtiyacı vardır. Tasarım, Windows yeni işlemci mimarisine taşındığında, HAL yeni işlemci için yeniden yazılır, ancak sistemin geri kalanının yeniden derlenmesi gerekir.

Micro Kernel

Sistem üzerinde yapılan tüm eylemlerden sorumludur ve sistemin hemen hemen tüm fonksiyonları sistemden geçer.

Mikro Kernel, Windows’un kalbinde yer alır, HAL ile çok yakın çalışır, iş parçacıklarının yürütülmesini planlar ve işlemlerin kesintilerini ve istisnalarını manipüle eder.

Bunun rolü, işlemcileri olabildiğince meşgul tutmaktır. Genel olarak, tüm işletim sisteminin iş parçacığı yürütme, çok işlemcili senkronizasyon ve donanım kesintilerinin ele alınması işlevlerinden sorumludur.

Windows çekirdeği, mikro çekirdeğin neredeyse her zaman doğrudan ele alınamayacak kadar meşgul olması nedeniyle tüm sistem için hayati önem taşıyan önemli görevlerle ilgilenir.

Nesne Yöneticisi, Windows Executor’u oluşturan tüm sistemler tarafından kullanılan nesneleri oluşturmak, değiştirmek ve silmek için kullanılır.

Ayrıca tüm İşletim Sistemine nesnelerin durumu hakkında bilgi sağlar.

İşlem Yöneticisi

İşlem Yöneticisi, tüm işlemlerin ve iş parçacıklarının durumlarını oluşturmak, kaldırmak ve değiştirmekle sorumludur. Ayrıca, sistemin geri kalanına işlemlerin ve iş parçacıklarının durumu hakkında bilgi sağlar.

Sanal Bellek Yöneticisi

VMM (Virtual Memory Manager/Sanal Bellek Yöneticisi) sistemin sanal bellek yönetimini sağlar. Sanal bellek, sayfaları kullanılmadıklarında diske taşıyan ve gerektiğinde onları kurtaran sistemin fiziksel belleği yerine diskin kaynaklarını kullanmanızı sağlayan bir şemadır.

Bu, sistemdeki fiziksel bellek miktarından endişe etmeden her bir işleme 32 bit adres alanı ayıran Windows’un ayrılmaz bir parçasıdır.

Yerel Prosedürler Hizmetleri

LPC (Local Procedure Call Facility/Yerel Prosedürler Hizmetleri), Windows istemci/sunucu tasarımına entegre edilmiştir. Bu, sistemde yerel olarak çalışan tüm istemci ve sunucu işlemleri arasındaki arabirimdir.

Güvenlik İzleyicisi

SRM (Security Reference Monitor/Güvenlik Referans İzleyicisi), Windows sistemindeki tüm güvenliğin yatağıdır ve yerel bilgisayardaki tüm güvenlik ilkelerinin uygulanmasından sorumludur.

Giriş-Çıkış Yöneticisi

Input-Output Manager (Giriş-Çıkış Yöneticisi), her sürücünün nasıl müdahale etmesine gerek kalmadan, tüm sürücülerin homojen bir şekilde işlenmesine izin veren iyi tanımlanmış bir arabirim uyguladığı farklı aygıt sürücüleri arasındaki iletişimin yönetilmesinden sorumludur.

Win32 Alt Sistemi

Bu alt sistem, istemci olarak çalışan ve API çağrılarını uygun Win32 API’lerine çeviren Windows’ta desteklenen tüm diğer ortam alt sistemleri için bir sunucu görevi görür.

Win32 alt sistemi tüm girdi ve çıktılardan sorumludur. Ekran, klavye ve fare kontrolüne sahiptir. OS/2 veya POSIX gibi diğer alt sistemlerin bu aygıtlardan faydalanması gerektiğinde, Win32 alt sisteminden hizmet ister.

Önceki sürümlerde yapılan uygulamalarla uyumluluğu sağlamak için belirlenmiş hedeflerden bazıları:

  • DOS üzerinde yapılan programların değişiklik yapmadan çalışmasına izin verir.
  • Çoğu 16-bit Windows uygulamasını değiştirmeden çalıştırma yeteneği sağlar.
  • Sistemi ve diğer 32 bit uygulamaları 16 bit ve DOS uygulamalarından gelen parazitlerden korur.
  • 16 bitlik ve DOS Windows uygulamalarını çalıştırmak için RISC platformlarına izin verir.

POSIX

Windows NT geliştirme aşamasındayken Microsoft Subsystem farklı açık sistem standartlarına çok dikkat etti.

Açık sistemleri desteklemenin değerini, piyasadaki yeni gelişmiş işletim sistemlerini kabul etmenin bir yöntemi olarak kabul ettiler.

Windows tarafından desteklenen en yaygın olarak belirtilen standartlardan biri, Taşınabilir İşletim Sisteminin arabirimini temsil eden ve IEEE (Elektrik ve Elektronik Mühendisleri Enstitüsü) tarafından bir yöntem olarak geliştirilen POSIX (Unix tabanlı Taşınabilir İşletim Sistemi Arabirimi) ‘dir. UNIX platformlarında yapılan uygulamalara taşınabilirlik sağlar.

Ancak POSIX, UNIX dışı birçok sisteme entegre edilmiştir. OS/2 Alt Sistemi, tıpkı POSIX alt sistemi gibi UNIX uygulamaları için bir ortam sağlar, bu alt sistem OS/2 uygulamalarını destekler.

Grafik arayüz ve sistem çağrıları sağlar; çağrıları Windows Executor yardımı ile sunulur.

Bir Kernel herhangi bir bilgisayarın düzgün çalışması için tamamen gereklidir. Linux çekirdeği, çekirdek seviyesi sürücüleri içerdiği ve çok daha fazlasını yaptığı için OS X ve Windows’dan farklıdır.

Kernel (Çekirdek) Hakkında SSS

Bir bilgisayar, işletim sisteminin çekirdeğine ihtiyaç duymadan çalışabilir miydi?

Doğrusu ilk bilgisayarlar tam olarak böyle çalışıyordu. Programlar doğrudan boş bir makineye yüklenir, hiçbir soyutlama katmanı olmadan donanıma emir verirdi. Farklı bir yazılım kullanmak istediğinizde bilgisayarı tamamen yeniden başlatmanız gerekirdi. Bu süreç son derece zahmetli ve hataya açıktı.
Sonra küçük yardımcı programlar devreye girdi. Yükleyici ve hata ayıklayıcı gibi araçlar bellekte kalıcı olmaya başladı. İşte bu minik yapılar zamanla evrimleşerek günümüz çekirdeklerinin temelini attı. Donanıma güvenli erişim sağlamak çok karmaşık bir işti.
Tek bir satır kod bile yazsanız, bugün o eski yönteme dönmeniz imkansız. Çekirdek size temiz bir arayüz sunuyor. Geliştiriciler alttaki karmaşayı düşünmeden kod yazabiliyor. Kısacası bilgisayar çalışır ama siz verimli bir şey yapamazdınız.

Monolitik ve mikro çekirdek arasındaki hararetli tasarım tartışmasını hangi taraf kazandı?

Aslında bu savaştan net bir galip çıkmadı, iki taraf da kirli numaralar öğrendi. Monolitik yapı devasa bir güç sunar; donanımın tüm soyutlamalarını tek bir blokta toplar. Mikro mimari ise sadeliği över, en kritik işleri küçük bir çekirdeğe bırakır. Geri kalan hizmetleri kullanıcı alanında koşan sunuculara havale eder.
Linux gibi sistemler monolitik yolu seçti. Zamanla bu tasarımın getirdiği şişkinlik ve kararlılık sorunları baş gösterdi. Neyse ki imdadımıza yüklenebilir modüller yetişti. Bu sayede sistemi yeniden başlatmadan anında sürücü ekleyip çıkarabiliyorsunuz.
Piyasa gerçekleri hibrit çözümleri doğurdu. Modern Windows ve macOS çekirdekleri, mikro yapının zarafetini monolitiğin hızıyla birleştirir. Bana sorarsanız saf ideolojiler öldü, kullanıcıya en hızlı performansı veren pragmatik canavarlar yükseldi.

Windows'un HAL katmanı, donanım farklılıklarını nasıl görünmez bir hale getiriyor?

HAL, işletim sisteminin geri kalanını donanım kaosundan koruyan bir kalkandır. Bu donanım soyutlama katmanı, bir DLL dosyası olarak uygulanır. Giriş/çıkış arayüzleri ve kesme sürücüleri gibi tüm pis detayları içine gömer.
Peki bu ne işe yarar? Sistemin üst katmanları belirli bir anakart veya işlemci için özel kod yazmak zorunda kalmaz. Windows yeni bir mimariye taşındığında sadece HAL parçasını yeniden yazmanız yeterlidir. Diğer tüm sistem dosyaları aynı kalır.
Somut bir örnek vereyim. Aygıt sürücünüz diske erişmek istediğinde doğrudan kontrolcüye emir göndermez. HAL’a yalvarır. HAL da arka planda marka model fark etmeksizin o isteği donanımın anlayacağı dile çevirir. İşte gerçek taşınabilirliğin sırrı buradadır.

Yüklenebilir çekirdek modülleri olmasaydı Linux bugünkü esnekliğe kavuşabilir miydi?

Kesinlikle hayır, muhtemelen hantal bir dev olarak kalırdı. Linux özünde monolitik bir kernel olsa da, gücünü modüler yapısından alır. Çalışma zamanında sisteme yeni dosya sistemi desteği ya da aygıt sürücüsü ekleyebilirsiniz. Bunları kullanmadığınızda ise bellekten atarsınız.
Aksi halde her seferinde çekirdeği derleyip makineyi yeniden başlatmanız gerekirdi. Bir sunucunun sırf yeni bir ekran kartı taktınız diye saatlerce kapalı kaldığını düşünün. Üstelik tüm donanım desteğini içeren devasa bir çekirdek, kullanılabilir tüm RAM’i tüketirdi.
Menü yapılandırması veya modprobe komutlarıyla bu iş artık çocuk oyuncağı. Kapalı kaynaklı sürücülerde bile bu mekanizma çalışıyor. Ubuntu gibi dağıtımlar bazen özgür olmayan modülleri varsayılan olarak sunmasa da kapıyı tamamen kapatmaz. Sistemin kalbi yerinde dururken damarları anında değiştirebilirsiniz.

İşletim sisteminin kalbindeki bu yazılım bir anlığına hata verirse neden tüm bilgisayar çöküyor?

Zira bu yapı en yüksek ayrıcalık seviyesinde, yani tanrı modunda çalışır. Donanımla konuşma yetkisi sadece ona aittir. Bir kullanıcı programı patlarsa işletim sistemi onu zarifçe sonlandırır. Ama çekirdek kodu geçersiz bir bellek adresine dokunursa ortada onu durduracak bir üst otorite kalmaz.
Windows’un Mikro Kernel’i sürekli iş parçacıklarını zamanlar ve kesintileri yönetir. Bu işleyişte bir nanosaniyelik aksama bile felakettir. Ekran donar, fare hareket etmez, klavye yanıt vermez. Halk arasında mavi ekran dediğimiz şey, aslında sistemin kendini korumak için tüm operasyonu dondurmasıdır.
Mesela bozuk bir sürücü yüzünden çekirdek modunda bellek sızıntısı olduğunu düşünün. Sanal bellek yöneticisi şaşırır, İşlem Yöneticisi kilitlenir. Kullanıcı modundaki uygulamalar sadece bu kaosu izleyebilir. Sonuçta güvenlik referans monitörü bile felç olduğu için kurtuluş yoktur, reset atmak şarttır.

Sanal bellek yöneticisi olmadan çoklu görev yapmaya kalkışmak neye benzerdi?

Fiziksel RAM miktarınız kaderiniz olurdu, hepsi bu. Birkaç sekme açtığınızda tarayıcı çökerdi. Çünkü her program belleğin tamamına sahip olduğunu sanır. İşte çekirdek, bu kaostan düzeni yaratır. Her uygulamaya kocaman, özel bir sanal adres alanı sunar.
Windows’un Sanal Bellek Yöneticisi sayfaları diske taşıyarak illüzyonu sürdürür. Kullanılmayan veriler sabit diske yollanır, ihtiyaç anında geri çağrılır. Fiziksel bellek miktarından bağımsız olarak 32 bitlik dev bir alanda oynarsınız. Hiçbir süreç diğerinin bellek bölgesine izinsiz giremez.
Haliyle bu yönetici olmadan modern işletim sistemleri var olamazdı. Aynı anda müzik dinleyip kod yazamazdınız. Güvenlik Referans İzleyicisi de bu sayede kötü niyetli yazılımların başka belleklere sızmasını engeller. Sistemin kalbi, işleri hem paralel hem de izole yürütme konusunda gerçek bir illüzyonisttir.

Bu Rehberi Keşfettikleri İçin Sana Teşekkür Edecekler!

Sadece bir tıkla sevdiklerine dev bir iyilik yapmaya hazır mısın? Bilgi paylaştıkça devleşir.

İlk yorumu sen paylaş