Bilim, organize edilmiş bilgidir.

Herbert Spencer

İşletim Sistemleri, Çekirdekler ve Dağıtımlar

    İşletim sistemleri birer kaynak yönetici program olarak ele alınabilir. Bellek, işlemci, disk, ağ kartları ve diğer çevre birimleri işletim sistemlerinin yönettiği kaynaklardır. İşletim sistemlerinin donanımsal kaynakları yöneten kısmına çekirdek (kernel) denir. Proses ve thread’lerin çizelgelenmesi, belleğin ve dosya sisteminin yönetilmesi, çekirdeğin ana görevlerindendir. Çekirdeğin dışında işletim sistemleri başka katmanlara da sahip olabilirler. Örneğin pek çok sistemde çekirdek yüklenebilen modüllerle belli kurallara uyularak genişletilebilmektedir. Nasıl bilgisayarlara kart takılarak onlara yeni donanımsal birimler eklenebiliyorsa işletim sistemlerinin temel çekirdek yapılarının üzerine de çekirdek düzeyinde işlev görecek çeşitli modüller eklenerek çekirdeğin işlevleri genişletilebilmektedir. Çekirdeğe eklenen bu modüllere çekirdek modülleri (kernel modules) ve aygıt sürücüler (device drivers) denir. Çekirdek modülleri ve aygıt sürücüler sistemin başlatılması sırasında ya da daha sonra yüklenebilirler.[1]

    Çekirdek ve çekirdek modüllerinin dışında bir de işletim sistemlerinin kullanıcı ile etkileşen kabuk (shell) kısımları vardır. Kabuk kullanıcı ile komut satırı aracılığıyla etkileşen metin tabanlı bir biçimde olabileceği gibi grafik tabanlı da olabilir.

   
İşletim sistemlerinin çekirdek yapısı bakımından mikro ve tek parçalı (monolithic) olmak üzere ikiye ayırabiliriz. Mikro çekirdek mimarisinde çekirdek en temel gereksinimleri karşılayacak biçimde çok küçük tutulur. Diğer sistem etkinlikleri yüklenebilen modüller ve aygıt sürücülerle sağlanır. Bu tür sistemlerde aygıt sürücüler bile kullanıcı modunda çalışırlar. Tek parçalı çekirdeklerde ise çekirdek göreli olarak büyüktür. Bazı aygıt sürücüler çekirdeğin içine gömülmüştür. Ancak bu tür sistemlerin bir bölümünde yine sistem açıldıktan sonra dinamik olarak aygıt sürücü yüklemek mümkündür. Dinamik olarak yüklenen bu aygıt sürücüler yine çekirdek modunda çalışırlar. Genel olarak mikro çekirdek mimarisinin daha esnek ve güvenilir, buna karşılık tek parçalı çekirdek mimarisinin daha hızlı olduğunu söyleyebiliriz. Tabi bir sistem bu iki mimarinin karışımı (hybrid) biçiminde de olabilir.

   
Bugün dünyada pek çok işletim sistemi çekirdeği kullanılmaktadır. Çekirdeklerin çoğu var olanların çeşitli biçimlerde değiştirilmesi ve geliştirilmesiyle elde edilmiştir. Örneğin MAC OS X çekirdeği Mach ve BSD tabanına,  BSD çekirdeği UNIX tabanına dayanmaktadır.  Bazen bir çekirdeğin diğerinden kopyalanarak üzerinde küçük değişikliklerin yapıldığını da görürüz. Bu tür sistemler özgün olarak değerlendirilemeyeceği için bunlara klon sistemler demek daha doğrudur.

   
İşletim sistemi ile dağıtım (distribution) kavramları da birbirlerine karıştırılmaktadır. Dağıtım bir işletim sistemi çekirdeğini alarak çekirdek dışı öğeler üzerinde değişikliklerin yapılmasıyla oluşturulan bir uyarlamasıdır. Özellikle Linux işletim sistemi için pek çok dağıtım bulunmaktadır. Linux dağıtımları ya hiç çekirdek farklılığı içermezler ya da çok az farklılık içerirler. Ancak sistemin kurulumundan bakımına kadar süreçte dağıtımlar arasında önemli farklılıklar söz konusu olabilmektedir. Örneğin o anda sisteminizde kurulu bulunan yazılımların kontrolü ve yönetilmesine yönelik etkinliklerin çekirdekle bir ilgisi yoktur. Çeşitli dağıtımlar bunları farklı paket yöneticileri ile sağlayabilirler. Sisteminizin yönetimine ilişkin araçlar ve bunların kullanım biçimleri ve hatta grafik arayüz bile dağıtımdan dağıtıma değişebilir. Dağıtımlar arasındaki çekirdek farklılıkları yok denecek kadar azdır. Eğer Linux sistemlerinde çalışıyorsanız Red Hat, Ubuntu, Suse, Debian gibi Linux dağıtımlarının hangisinin makinanızda kurulu olduğu sistem programlama etkinliği için önemli değildir. Zaten dağıtımların kurulum sırasında size sağladığı araçların da büyük çoğunluğu özgür ya da açık kaynak kodlu yazılımlardır ve siz bunların yeni sürümlerini isterseniz yükleyebilirsiniz.[2]

   
İşletim sistemleri daha kolay kullanılabilir ve yönetilebilir hale getirilirken aynı zamanda teknik anlamda gittikçe daha karmaşık bir yapıya bürünüyorlar. Eskiden ek özellikler gibi ele alınan pek çok alt sistem artık modern işletim sistemlerinin olmazsa olmaz parçaları haline geldi. Örneğin Microsoft’un DOS işletim sistemi komut satırından idare edilebilen tek prosesli basit bir sistemdi. Windows 3.X ve daha sonra 32 bitlik ve 64 bitlik Windows sistemleri karmaşık pek çok alt sistem içeriyorlar.

   
Belli bir sisteminin çekirdeği üzerinde uzmanlaşmak sanıldığından zor bir süreçtir. Çekirdekleri sistem programlama bakımından incelemek ve çözümlemek için alt sistemlere ayrıştırmak kaçınılmaz gibi görünüyor. Önce bütünsel yapıyı ana hatlarıyla incelemek, daha sonra proses yönetimi, bellek yönetimi, dosya sistemi gibi alt sistemlere yoğunlaşmak ve daha sonra da bu alt sistemler arasındaki ilişkiler üzerinde çalışarak sentez yapmak bir yol olabilir. Pek çok çekirdek geliştiricisi çekirdeğin bütünsel davranışını ana hatlarıyla bilir fakat belli bir alt sistem üzerinde uzmanlaşmıştır. Bunu tıptaki uzman hekimlik yaklaşımına benzetebiliriz. Örneğin bir göz doktoru genel sistemi ana hatlarıyla bilirken özel olarak görme alt sistemi üzerinde uzmanlaşmıştır. Siz de örneğin Linux çekirdeğini genel olarak bilirken bellek yönetimi ya da proses yönetimi üzerinde uzmanlaşabilirsiniz.



[1]
Çekirdek modülü (kernel module) ve ayggıt sürücü (device driver) kavramları bazı sistemlerde birbirleri yerine kullanılabiliyor. Ancak kitabımızda aygıt sürücüyü kullanıcı modundan (user mode) doğrudan çağrılabilen fonksiyonlara sahip olan ve temel hedefi donanımı yönetmek olan çekirdek modülleri olarak ele alacağız. Yani her aygıt sürücü birer çekirdek modüldür fakat her çekirdek modülü birer aygıt sürücü olmak zorunda değildir.

[2] Ülkemizde de Tübitak tarafından Pardus isminde Linux’un Türkçe bir dağıtımı oluşturulmuştur. Fakat ne yazık ki bu dağıtımın duyurusu sanki Türkiye’ye özgü yeni bir işletim sistemi çekirdeği oluşturulmuş gibi yanlış bir biçimde yapılmaktadır. Kanımızca “ulusal bir işletim sistemi oluşturduk” diyebilmek için özellikle çekirdek düzeyini de kapsayacak biçimde çok daha büyük bir mühendislik katkının ortaya konulması gerekir. Zaten tüm dünyada yapılan faaliyete dağıtım oluşturmak denilmektedir.
 

Haftanın Böceği Yukarı