Bilgisayar biliminde, bir mikro çekirdek (İngilizce: microkernel), bir işletim sistemini uygulamak için gereken mekanizmaları minimuma yakın sağlayan işletim sistemi çekirdeği türüdür. Ana çekirdek sadece birimler arası iletişim ve süreçleri sıralama işlerini yapar. Bellek yönetimi, kayıt ortamı yönetimi, sürücüler ve ağ ile ilgili çok sayıda sürec birbirleriyle iletişim kurarak haberleşir. Bu sayede; parçalardan oluşan yapı ve tasarımın sadeleştirilmesi, bir parçadakı hatanın diğer parçaları etkilemesi ve çalışma anında işletim sisteminin güncelleştirilebilmesi mümkün olabilmektedir.
Mikro çekirdek, çekirdek modu olarak adlandırılan en ayrıcalıklı düzeyde çalışan tek yazılım olabilir. Aygıt sürücüleri, dosya sistemleri gibi geleneksel işletim sistemi işlevleri mikro çekirdeğin kendisinden kaldırılır ve bunun yerine kullanıcı alanında (İngilizce: user space) çalışır.
Giriş[değiştir | kaynağı değiştir]
Erken işletim sistemi çekirdekleri, bilgisayar belleği sınırlı olduğu için oldukça küçüktü. Bilgisayarların kapasitesi arttıkça, çekirdeğin kontrol etmesi gereken cihazların sayısı da arttı. Unix'in ilk tarihi boyunca, çeşitli aygıt sürücüleri ve dosya sistemi uygulamaları içermelerine rağmen, çekirdekler genellikle küçüktü. Adres alanları 16 bit'ten 32 bit'e yükseldiğinde, çekirdek tasarımı artık donanım mimarisi tarafından kısıtlanmadı ve çekirdekler büyümeye başladı.
Unix'in Berkeley Yazılım Dağıtımı (BSD), daha büyük çekirdekler çağını başlattı. İşlemci, diskler ve yazıcılardan oluşan temel bir sistemi çalıştırmanın yanı sıra BSD, eksiksiz bir TCP/IP ağ sistemi ve mevcut programların ağ üzerinde 'görünmez bir şekilde' çalışmasına izin veren bir "sanal" cihaz ekledi. Bu büyüme uzun yıllar devam etti ve milyonlarca satır kaynak koduna sahip çekirdeklerle sonuçlandı. Bu büyümenin bir sonucu olarak, çekirdekler hatalara eğilimliydi ve bakımı giderek zorlaştı.
Mikro çekirdek, çekirdeklerin bu büyümesini ve bunun sonucunda ortaya çıkan zorlukları ele almak için tasarlandı. Teoride, mikro çekirdek tasarımı, kullanıcı alanı hizmetlerine bölünmesi nedeniyle kodun daha kolay yönetilmesine izin verir. Bu ayrıca, çekirdek modunda çalışan kod miktarının azalmasından kaynaklanan artan güvenlik ve kararlılık sağlar. Örneğin, bir ağ hizmeti arabellek taşması (İngilizce: buffer overflow) nedeniyle çökerse, yalnızca ağ hizmetinin belleği bozularak sistemin geri kalanı çalışmaya devam eder.
Süreçler arası iletişim[değiştir | kaynağı değiştir]
Süreçler arası iletişim (İngilizce: inter-process communication), ayrı süreçlerin genellikle ileti göndererek birbirleriyle iletişim kurmasını sağlayan bir mekanizmadır. Süreçler arası iletişim, işletim sisteminin, sistemdeki diğer uygulamalar tarafından kullanılan ve süreçler arası iletişim aracılığıyla çağrılan sunucu adı verilen daha küçük uygulamalardan oluşturulmasına izin verir. Çevresel donanım desteğinin çoğu veya tamamı,aygıt sürücüleri, ağ protokol yığınları, dosya sistemleri, grafikler vb. için sunucularla bu şekilde gerçekleştirilir.
Süreçler arası iletişim (IPC) zaman uyumlu (İngilizce: synchronous) veya zaman uyumsuz (İngilizce: asynchronous) olabilir. Zaman uyumsuz IPC, ağ iletişimine benzer: gönderen bir ileti gönderir ve çalışmaya devam eder. Alıcı, mesajın kullanılabilirliğini kontrol eder veya bir bildirim mekanizması aracılığıyla iletiye karşı uyarılır. Zaman uyumsuz IPC, çekirdeğin iletiler için arabellekler ve kuyruklar (İngilizce: queue) tutmasını ve arabellek taşmasıyla ilgilenmesini gerektirir; ayrıca iletilerin çift kopyalanmasını (İngilizce: double copying) gerektirir (göndericiden çekirdeğe ve çekirdekten alıcıya). Zaman uyumlu IPC'de, birinci taraf (gönderen veya alıcı), diğer taraf IPC'yi gerçekleştirmeye hazır olana kadar engellenir. Ara belleğe alma veya birden çok kopya gerektirmez. Çoğu geliştirici zaman uyumsuz göndermeyi ve zaman uyumlu almayı tercih eder.