Monolitik bir çekirdek, tüm hizmetlerin (dosya sistemi, VFS, aygıt sürücüleri vb.) Yanı sıra çekirdek işlevselliğinin (zamanlama, bellek ayırma, vb.) Aynı alanı paylaşan sıkı bir örgü grubu olduğu bir çekirdektir. Bu doğrudan bir mikro çekirdeğe karşıdır .
Bir mikro çekirdek, temel işlevlerin sistem hizmetlerinden ve aygıt sürücülerinden (temelde yalnızca sistem hizmetleri olan) izole edildiği bir yaklaşımı tercih eder. Örneğin, VFS (sanal dosya sistemi) ve blok aygıt dosya sistemleri (örn. Minixfs), çekirdek, diğer hizmetler ve kullanıcı süreçleriyle iletişim kurmak için IPC kullanan çekirdek alanının dışında çalışan ayrı işlemlerdir. Bir eğer Kısacası, modül Linux, şey hizmet izole bir süreç gösteren bir mikroçekirdeğini içinde.
Modüler çekirdek terimini monolitik olmaktan başka bir şeyle karıştırmayın . Bazı monolitik çekirdekler modüler olarak derlenebilir (örneğin Linux), önemli olan modülün çekirdek işlevselliği (çekirdek alanı) ile aynı alana takılması ve bu alandan çalıştırılmasıdır.
Bir mikro çekirdeğin avantajı, herhangi bir başarısız hizmetin kolayca yeniden başlatılabilmesidir, örneğin, kök dosya sistemi bir iptal atarsa çekirdek durması olmaz. Bu da bir dezavantaj olarak görülebilir, çünkü oldukça kritik hataları gizleyebilir (veya çok kritik olmayan görünmelerini sağlayabilir, çünkü sorun sürekli olarak kendini düzeltiyor gibi görünüyor). Bir şeyi konuşlandırıldıktan sonra kolayca düzeltemeyeceğiniz senaryolarda büyük bir avantaj olarak görülür.
Bir mikro çekirdeğin dezavantajı, asenkron IPC mesajlarının, özellikle fibriller uygulandığında hata ayıklamanın çok zor olabileceğidir . Ayrıca, yalnızca bir FS / yazma sorununu izlemek, kullanıcı alanı sürecini, blok cihazı hizmetini, VFS hizmetini, dosya sistemi hizmetini ve (muhtemelen) PCI hizmetini incelemek anlamına gelir. Bu konuda bir boşluk varsa, IPC servisine bakma zamanı. Monolitik bir çekirdekte bu genellikle daha kolaydır. GNU Hurd bu hata ayıklama sorunlarından muzdariptir ( referans ). Karmaşık mesaj kuyruklarıyla uğraşırken kontrol noktasına bile girmeyeceğim. Mikro çekirdekler kalbin zayıflığı için değildir.
Çalışan, istikrarlı bir çekirdeğe giden en kısa yol yekpare yaklaşımdır. Her iki yaklaşım da, çekirdeğin tasarımının herhangi bir tasarım üzerinde çalıştırmak için kod yazmak isteyen biri için çok az ilgi çektiği bir POSIX arayüzü sunabilir.
Üretimde Linux (monolitik) kullanıyorum. Ancak, çekirdek gelişimini öğrenmem, hacklemem veya müdahalelerimin çoğu mikro çekirdeğe, özellikle de HelenOS'a gider .
Düzenle
Bu kadar uzun soluklu cevabımdan geçtiyseniz, muhtemelen ' Çekirdek tasarımıyla ilgili Büyük Torvalds-Tanenbaum tartışmasını ' okumaktan biraz keyif alacaksınız . 2013'te okumak, hatta yayıldıktan 20 yıl sonra bile daha komik. En komik kısım, Linus'un son mesajlardan birindeki imzasıydı:
Linus "my first, and hopefully last flamefest" Torvalds
Açıkçası, bu Tanenbaum'un x86'nın yakında eski olacağı tahmininden daha fazla gerçekleşmedi.
NB:
"Minix" dediğimde, Minix 3'ü ima etmiyorum. Ayrıca, HURD'den bahsettiğimde, (çoğunlukla) Mach mikro çekirdeğine atıfta bulunuyorum. Niyetim başkalarının son çalışmalarını küçümsemek değil.