Linux neden monolitik çekirdek olarak adlandırılır?


208

Linux'un monolitik bir çekirdek olduğunu okudum. Monolitik çekirdek, tüm çekirdek kodunu bir çalıştırılabilir dosyaya derlemek ve bağlamak anlamına mı geliyor?

Linux modülleri destekleyebiliyorsa, neden tüm alt sistemleri modüllere ayırıp gerektiğinde yüklemeyesiniz? Bu durumda, çekirdek başlangıçta tüm modülleri yüklemek zorunda değildir ve modüldeki işlevlerin bir dizinini koruyabilir ve gerektiğinde bunları yükleyebilir.

Yanıtlar:


290

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.


5
İlginçtir ki Linus Torvalds, Andew Tanenbaum'un MINIX'i Linux'u oluştururken büyük ölçüde etkilendi. Bununla birlikte, MINIX bir mikro çekirdek tasarımına dayanırken, Linux monolitik bir çekirdek kullanır.
Martin Liversage

2
@Martin Liversage: Etkilenden daha sinirli :) Bunu yansıtmak için cevabımı düzenledim.
Tim Post

25
@DigitalRoss: Buna cevap verdikten sonra gelen kutumu görmelisin, Linus Minix ve Mach meraklılarına kıyasla uysal.
Tim Post


3
@p_l Bence mikro, monolitik ve melez arasındaki farklar hakkında konuşmamız gereken zamana oldukça yakın. Bu oldukça iyi bir soru olabilir :)
Tim Post

15

Monolitik çekirdek, tüm işletim sisteminin çekirdek modunda çalıştığı anlamına gelir (yani donanım tarafından çok ayrıcalıklıdır). Yani, işletim sisteminin hiçbir kısmı kullanıcı modunda çalışmaz (daha düşük ayrıcalık). Yalnızca işletim sisteminin üstündeki uygulamalar kullanıcı modunda çalışır.

Windows gibi monolitik olmayan çekirdek işletim sistemlerinde, işletim sisteminin kendisinin büyük bir kısmı kullanıcı modunda çalışır.

Her iki durumda da, işletim sistemi oldukça modüler olabilir.


9
Windows kesinlikle monolitik bir çekirdektir.
Adam Rosenfield

7
@Adam: Kabul etmiyorum. Eski stil 16-bit Windows idi gibi Windows 95 ve olarak, monolitik çekirdek. Ancak, tüm Server sürümleri ve Vista ve 7 dahil olmak üzere Windows'un NT tabanlı sürümleri, kullandığınız "mikro çekirdek" tanımına bağlı olarak açıkça mikro çekirdektir veya belki de melezdir.
CesarGon

8
Yazıcı sürücülerinin ring0 içinde çalışmadığı için mikro çekirdeği oluşturmaz :)
caf

7
@caf: en.wikipedia.org/wiki/Windows_NT_kernel ve en.wikipedia.org/wiki/Comparison_of_operating_system_kernels adresine göz atmanızı öneririm . Windows NT ve Vista, 7 ve Sunucular da dahil olmak üzere ardıllarının "karma çekirdek" olarak tanımlandığını göreceksiniz. İşletim sisteminin iki büyük alt sistemi, yalnızca bir yazıcı sürücüsü değil, kullanıcı modunda tam olarak çalışır. :-)
CesarGon

7
Yorumum biraz yanaktaydı - "melez" atama işe yaramayacak kadar bilgi içermiyor gibi görünüyor.
caf

10

; tl-dr - Hayır, Linux her zaman monolitiktir.

Linux modülleri bir anlamda modüler anlamına gelebilir . Diğerlerinin de belirttiği gibi, monolitik genellikle monolitik bir çekirdeğe karşı bir mikro çekirdeği temsil eder . Geleneksel bir mikro çekirdek sadece bu özelliklere sahiptir,

  1. Zamanlama
  2. Bellek yönetimi
  3. İşlemler arası iletişim

Hiçbir vardır donanım sürücüleri , protokol yığınları , dosya sistemleri , / devam askıya alma , saati yönetim ana çekirdekte vb. Bunlar , herhangi bir kullanıcı görevi ile aynıdır (MMU / zamanlayıcı aracılığıyla farklı ayrıcalıklara sahip olsalar da).


Tanenbaum'un tahminleri

  1. Mikro çekirdekler gelecek
  2. x86 ölecek ve RISC mimarileri pazara hakim olacak
  3. (Ondan 5 yıl sonra) herkes ücretsiz bir GNU işletim sistemi yönetecek

PC ve sunucu programcıları gülebilir, ancak iki ve üçü mevcut cep telefonlarının çoğu için kesinlikle doğrudur. BlackBerry QNX başarılı olsaydı Tanenbaum tüm hesaplarda haklı olurdu.

Ayrıca, birçok L1 hipervizörünün altında bir mikro çekirdek vardır . Çünkü hiper-vizör genellikle bağlam anahtarının yanında pek bir şey yapmaz .

Görünüşe göre üç Linux başarısını tahmin ediyor. ;-)


Mikro çekirdekler için bir argüman , tüm monolitik alt sistemlerin aynı anda birden fazla değeri senkronize etmesi gerektiğidir. Bunu yapmak için kilit kullanmalılar ve paralel mimarilere genişletildiklerinde Amdahl yasasına maruz kalacaklar . Sayaç, mikro çekirdeklerin çok sayıda IPC mesajıyla sonuçlanmasıdır.

Önemli bir gelişme, monolitik bir çekirdeğe çekişmeyi önlemek için kilitsiz programlama kullanılmasıdır. Bu, monolitik bir çekirdekte kilitlenmeyi önlerken IPC yükünü de azaltır. Son zamanlarda tüm CPU'lar ISA'larını kilitsiz algoritmalar için daha iyi ilkeller içerecek şekilde genişletiyorlar . Dolayısıyla Linux muhtemelen bir süre monolitik bir çekirdek olarak kalacaktır.


1
Evet, Tanenbaum'un Hurd demek istediğini biliyorum. Ancak GNU Linux'a geçti, böylece ifade komikti.
sanatsız gürültü

Mobil cihazlar için neden x86 kullanım eksikliği var? Diğer mimarileri avantajlı yapan nedir?
Abdul


Evet, bunlar önemli. Bir x86 SOC (çip üzerinde sistem) yapmak zordur. Bir SOC satıcısının (Broadcom, Freescale, vb.) Satın alabileceği bir x86 yapmak için standart HDL kodu yoktur.
sanatsız gürültü

9

Gönderen Vikipedi :

Monolitik bir çekirdek, tüm işletim sisteminin çekirdek alanında ve yalnızca yönetici modu olarak çalıştığı bir çekirdek mimarisidir. Diğer mimarilerden farklı olarak, yekpare çekirdek, süreç yönetimi, eşzamanlılık ve bellek yönetimi gibi tüm işletim sistemi hizmetlerini uygulamak için bir dizi ilkel veya sistem çağrısı ile bilgisayar donanımı üzerinde tek başına bir üst düzey sanal arabirim tanımlar. aygıt sürücüleri modül olarak.

Diğer yandan, Windows'un son sürümlerinde bir Hibrit çekirdek kullanılır .

Hibrit çekirdek, bilgisayar işletim sistemlerinde kullanılan mikro çekirdek ve monolitik çekirdek mimarilerinin özelliklerini birleştiren bir çekirdek mimarisidir. Monolitik çekirdeğe benzerlik nedeniyle kategori tartışmalıdır; bu terim bazıları tarafından basit pazarlama olarak reddedildi. Geleneksel çekirdek kategorileri monolitik çekirdekler ve mikro çekirdeklerdir (nanokernellerin ve ekokernellerin mikro çekirdeğin daha aşırı sürümleri olarak görüldüğü).


7
Çekirdek alanda bir şey yaparsam, bir yerlerde "hybric kerkel" kullanmayı hatırlamalıyım. SCNR ;-)
Jürgen A. Erhard

1
Windows NT her zaman karma bir sistemdi. Çekirdek tam olarak hibrid olmayabilir, ancak bunun bir parçası olarak neyi saydığınızı soruyorsunuz (örneğin, winapi, kullanıcı alanı hizmeti olarak uygulanmaktadır)
p_l

5

Bu bağlamda 'yekpare', tek bir büyük yürütülebilir dosyanın söz konusu olduğu anlamına gelmez ve dediğiniz gibi Linux, çekirdek modüllerinin çalışma zamanında dinamik yüklenmesini destekler. Çekirdekler hakkında konuşurken, 'yekpare', yalnızca en az düzeyde bir 'mikro çekirdek' gibi bir tür çekirdek kullanan diğer işletim sistemi türlerinin aksine, tüm işletim sisteminin 'ayrıcalıklı' veya 'denetleyici' modunda çalıştığı anlamına gelir. işlevsellik kümesi ayrıcalıklı modda çalışır ve işletim sisteminin çoğu kullanıcı alanında çalışır.

Mikro çekirdeğin savunucuları bunun daha iyi olduğunu söylüyor çünkü daha küçük kod daha az hata anlamına geliyor ve yönetici modunda çalışan hatalar kullanıcı alanı kodundan çok daha fazla soruna neden olabilir (örneğin güvenlik açıklarına veya toplam sistem çökmeleri 'çekirdek paniği'). Bazı mikro çekirdekler, 'resmi olarak doğrulanabilmeleri' için yeterince minimaldir, yani bir spesifikasyona göre çekirdeğin 'doğru' olduğunu matematiksel olarak kanıtlayabilirsiniz. L4 bunun iyi bir örneğidir.


Kaynaklarınızı kontrol edin. Wikipage açıklanmamış. www2.cs.uh.edu/~rzheng/course/COSC6397sp2008/…
monksy

2

Monolitik çekirdek, tamamen tek bir adres alanında çalışan tek bir büyük işlemdir. Tek bir statik ikili dosyadır. Tüm çekirdek hizmetleri çekirdek adres alanında bulunur ve yürütülür. Çekirdek işlevleri doğrudan çağırabilir. Monolitik çekirdek tabanlı işletim sistemi örnekleri Linux, Unix'tir.

Bence bu yazı konsepti daha iyi anlamanıza yardımcı olacak.

http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html


Bu bağlantı soruyu cevaplayabilse de, cevabın temel kısımlarını buraya eklemek ve bağlantıyı referans olarak sağlamak daha iyidir. Bağlantı verilen sayfa değişirse, yalnızca bağlantı yanıtları geçersiz olabilir.
Scott
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.