Linux çekirdeği mikro çekirdekli mimarilere kıyasla nasıldır?


38

Bir kez okudum, bir mikro çekirdek mimarisinin bir avantajı, tüm sistemi yeniden başlatmaya gerek kalmadan ağ ve dosya sistemleri gibi temel hizmetleri durdurabileceğiniz / başlatabildiğinizdir. Fakat bugünlerde Linux çekirdeğinin (her zaman böyle miydi?) Aynı etkiyi elde etmek için modülleri kullanma seçeneği sunduğunu düşünürsek, mikro çekirdeğin (kalan) avantajları nelerdir?


5
Mikro çekirdekler ve Linux konusunda, ayrıca “Neden Linux'a monolitik çekirdek denir” sorusuyla ilgili şu çok güzel cevaba bakınız .
Gilles 'SO- kötülük olmayı'

1
Monolitik çekirdek vs MicroKernel tartışmalarını okuyabilirsiniz. oreilly.com/openbook/opensources/book/appa.html Bu makalede, Andrew Tanenbaum Microkernel'i ve Linus Torvalds Monolitik çekirdeği desteklemektedir.
Bhuwan

Yanıtlar:


35

Mikro çekirdekler , en içteki ve en güvenilir modda yekpare çekirdeklerden daha az kod çalıştırılmasını gerektirir . Bunun gibi birçok yönü vardır:

  • Mikro çekirdekler temel olmayan özelliklerin (bağlı olmayan veya kullanılmayan donanıma ait sürücüler gibi) istedikleri zaman yüklenip boşaltılmasını sağlar. Bu, çoğunlukla modüller aracılığıyla Linux'ta gerçekleştirilebilir.
  • Mikro çekirdekler daha sağlamdır: çekirdek olmayan bir bileşen çöktüğünde, tüm sistemi onunla birlikte almayacaktır. Bir buggy dosya sistemi veya cihaz sürücüsü bir Linux sistemini çökertebilir. Linux, kodlama uygulamaları ve sınamaları dışında bu sorunları azaltmanın bir yoluna sahip değildir.
  • Mikro çekirdekler daha küçük güvenilir bir bilgi işlem tabanına sahiptir . Bu nedenle, kötü amaçlı bir aygıt sürücüsü veya dosya sistemi bile tüm sistemi kontrol edemez (örneğin, en son USB aygıtınız için şüpheli kaynaklı bir sürücü sabit diskinizi okuyamaz).
  • Önceki noktanın bir sonucu, sıradan kullanıcıların, monolitik bir çekirdekte çekirdek bileşenleri olacak kendi bileşenlerini yükleyebilmeleridir.

Unix GUI'leri, kullanıcı kodu olan (video aygıtı sürücüsünün bir kısmı hariç) X penceresi aracılığıyla sağlanır. Pek çok modern birim sıradan kullanıcıların FUSE üzerinden dosya sistemi sürücülerini yüklemelerine izin veriyor . Linux ağ paket filtrelemenin bir kısmı kullanıcı alanlarında yapılabilir. Bununla birlikte, aygıt sürücüleri, zamanlayıcılar, bellek yöneticileri ve çoğu ağ protokolü hala yalnızca çekirdektir.

Tanenbaum-Torvalds'ın tartışması klasik (eğer tarihli ise) Linux ve mikro çekirdeği hakkında okur . Yirmi yıl sonra, Linux'un mikro çekirdekli bir yapıya doğru çok yavaş hareket ettiğini söyleyebiliriz (yüklenebilir modüller daha erken ortaya çıktı, FUSE daha yakın zamanda), ancak hala çok uzun bir yol var.

Değişen bir diğer şey ise, masaüstü ve üst seviye gömülü bilgisayarlarda sanallaştırmanın artan ilgisidir : Bazı amaçlar için, ilgili ayrım çekirdek ve kullanıcı alanı arasında değil, hiper yönetici ve konuk işletim sistemleri arasındadır.



1
Hepsi çok güzel teori. Bir cihaz bir şekilde sıkışırsa, sistem kızartılır. Bir işlem sırasında bir sürücü yarı yolda çökerse, sürücüyü yeniden başlatmaya gerek kalmaması sistemi işlevsel duruma getirecektir. Herhangi bir performans elde etmek istiyorsanız, sürücüler çok iş parçacıklı olmalı ... ve "bir zamanlayıcı" nın avantajı tamamen kaybedilmiş olmalı. Performans isteyin, bellek kopyalarından ve bağlam anahtarlarından (giderek daha pahalı) kaçınmalısınız ... ve "modülerlik" kayboluyor. Bazı mikro çekirdeklerin boyutlarını araştırın ; sürücülerin monolitik çekirdeklerle karşılaştırılabilir boyut ve karmaşıklıklarını göreceksiniz .
von

15

Bir mikro çekirdek, sistemin çekirdek modunda kaldığı süreyi, kullanıcı alanının aksine mümkün olan asgari düzeyde sınırlar.

Çekirdek modunda bir çökme olursa, çekirdeğin tamamı düşer ve bu, tüm sistemin kapandığı anlamına gelir. Kullanıcı modunda bir kilitlenme olursa, sadece bu işlem geçer. Linux bu konuda sağlamdır, ancak herhangi bir çekirdek alt sisteminin, herhangi bir kasıtlı veya yanlışlıkla, başka bir çekirdek alt sisteminin belleği üzerine yazması hala mümkündür.

Mikro çekirdek kavramı, ağ ve aygıt sürücüleri gibi geleneksel olarak çekirdek modu olan birçok şeyi kullanıcı alanına yerleştirir. Mikro çekirdek çok fazla sorumlu olmadığından, bu daha basit ve daha güvenilir olabileceği anlamına gelir. IP protokolünün basit ve aptalca olmasının yollarını düşünün, karmaşıklığı kenarlara iterek ve çekirdeği zayıf ve ortalama bırakarak gerçekten sağlam ağlara yol açar.


5

Materyal okuma linklerini gönderdiğiniz için teşekkür ederiz! Brent W'in soyuttaki noktası sağlam ve bir dereceye kadar, Christoph L'nin mikro çekirdek senkronizasyon mekanizmalarındaki aşırı karmaşıklık konusundaki endişeleri ile empati duyuyorum; Ancak, ikinci raporun mesaj tabanlı olay döngülerine bakabileceğini düşünüyorum. Olay döngüleri hafızayı birbirleriyle paylaşmadığından, kilit gerekli değildir ve (IMO) kendilerini bildirimsel kodlama stiline ödünç verdiklerinden, tutarlı bir algoritma açıkça tanımlanabilir (lambda hesabının noktası ...) - Genelde uygulamaları kodlarım, ancak bu Q eğlenceli bir öğrenme deneyimi oldu
antropik android

1

Sadece x86 mimarisine bir bakın - monolitik çekirdek sadece 0 ve 3 numaralı halkaları kullanır . Ancak, daha az bağlam değişikliği nedeniyle, daha hızlı olabilir.

x86 yüzük


X86 halka yapısı sadece mühendislik üzerinedir. Pratik kullanım yok (sanal makineler hariç, ancak giderek daha fazla kullanılıyor ...)
vonbrand

1
  1. Monolitik çekirdek, mikro çekirdekten çok daha eskidir . 1980'lerin sonunda mikro çekirdek fikri ortaya çıkarken Unix'te kullanılıyor .

  2. Monolitik çekirdeğe sahip olan OS'lerin örnekleri UNIX, LINUX iken, mikro çekirdeğe sahip olan OS'ler QNX, L4, HURD ve başlangıçta Mach (MacOS X değil) daha sonra hibrit çekirdeğe dönüştürülmüşlerdir. MINIX bile saf bir mikro çekirdek değil, çünkü aygıt sürücüleri çekirdeğin bir parçası olarak derleniyor.

  3. Monolitik çekirdekler mikro çekirdeklerden daha hızlıdır . İlk Mach mikro çekirdeği monolitik çekirdekten% 50 daha yavaştır. L4 gibi daha sonraki sürümler monolitik çekirdekten yalnızca % 2 veya% 4 daha yavaştır .

  4. Monolitik çekirdekler genellikle hacimlidir, ancak saf mikro çekirdeğin küçük boyutta olması gerekir , hatta işlemcinin ilk düzey önbelleğine (birinci nesil mikro çekirdek) sığar.

  5. Monolitik çekirdeklerde, aygıt sürücüleri çekirdek alanında , mikro çekirdek aygıt sürücüleri ise kullanıcı alanında bulunur .

  6. Aygıt sürücüleri çekirdek alanında bulunduğundan, monolitik çekirdeği mikro çekirdeğe göre daha az güvenli kılar (Sürücüdeki hatalar çökmeye neden olabilir). Mikro çekirdekler monolitik çekirdeklerden daha güvenlidir , bu nedenle birçok askeri cihazda kullanılırlar.

  7. Monolitik çekirdekler , IPC'yi sağlamak için sinyalleri ve soketleri kullanırken, mikro çekirdek yaklaşımı ileti kuyruklarını kullanır . 1 st onlar bağlam anahtarları üzerinde yavaş böylece mikro çekirdeği gen kötü IPC uyguladı.

  8. Bir monolitik sisteme yeni özellikler ekleme anlamına bütün çekirdeği derlemeye yeni özellik veya yamaları ekleyebilir ise yeniden derleme olmadan


(4) 'te elma ve karpuzları karşılaştırıyorsunuz. Mikro çekirdeğin kendisi (tasarım gereği) sadece minimal işlevsellik içerir, monolitik çekirdek daha fazlasını içerir. (6) güzel bir teoridir, parçaların ne kadar yetkin bir şekilde geliştirildiğine ve gerçek IPC mekanizmasının ne kadar sızıntılı olduğuna bağlıdır (performans için, gerçek bir "mesaj iletme" olamaz). Not (7) , "mesaj kuyruklarının" çok karmaşık bir şekilde ele alınması anlamına gelir , bu nedenle çoğunlukla avantajlarını göz ardı eder. (8) için, örneğin Linux durumunda, çekirdekten bağımsız bir modülü derlemek kesinlikle mümkündür. Bu aslında sürücü gelişimi için düzenli olarak yapılır.
von

0

Windows NT (şu anki Windows sistemlerin altında yatan çekirdek) oldukça vanilyalı bir mikro çekirdek tasarımı olarak başladı. Performans sorunları nedeniyle, “kullanıcı alanı” kodunun gittikçe daha fazla “micokernel” e taşındığı ... bugün mikrokernel yapı artık rastlantısaldır.


-1

Durum şu ki, linux çekirdeği monolitik ve mikro çekirdeğin bir melezidir. Saf bir monolitik uygulamada çalışma zamanında yükleme yapan modül yoktur.


9
değil. Modüllerin dinamik olarak yüklendiği gerçeği, tam çekirdek ayrıcalıklarıyla çalıştıkları ve monolitik çekirdeğin bir parçası olarak oldukları gerçeğini değiştirmez.
vartec

3
Hibrit tasarım için bazı sürücülerin (USB, Tarayıcılar, Yazıcılar ve grafikler için) çekirdekten ziyade kullanıcı alanında kullanılması daha önemli olacaktır. Bu ayrım açık değildir ve Linux libusb, sane, cup ve mesa olduğu gibi hibrit çekirdek olarak ifade edilebilir - çünkü insmod ve rmmod yoktur.
Maciej Piechotka

-1

Şartlar monolithic kernelve microkernelbunlar çekirdek tasarımı farklı yönlerini (yapı genel boyutu) da tarif edildiği gibi ciddi karşılaştırılamaz.

Tipik bir monolitik çekirdek SunOS-4.x çekirdeğiydi ve Linux hala benzerdir, çünkü temel çekirdeğin içeriğini el ile yapılandırırsınız.

Solaris çekirdeği (1992'den itibaren 2.1 ile başlayan), tüm sürücüler talep üzerine otomatik olarak yüklendiğinden ve ilk önyükleme sırasında yalnızca küçük bir parça yüklendiğinden artık monolitik olarak adlandırılamaz.

SunOS-4.x ve Solaris (SunOS-5.x) ve Linux, hepsi tek bağlam uygulamalarıdır. Kodlarının tamamı tek bir MMU bağlamında çalışır.

Mac OS X, Mach tabanlıdır ve MMU bağlamları ile ayrılan çeşitli işlemlerle çok bağlamlı bir uygulama olarak çalışır. Bu kavramda, sürücüler ayrı işlemlerde ve ayrı MMU bağlamlarındadır.

Pek çok kişi Mac OS X'e "mikro çekirdek sistemi" diyor, ancak temel çekirdeğin Solaris'teki temel çekirdekten daha küçük olmadığı söylenebilir.

Bu yüzden single context kernelsvs hakkında konuşmak daha iyi olacak gibi görünüyor multi context kernels.


1
MacOS (esasen monolitik) bir BSD şimini bir mikro çekirdek üzerinde çalıştırır. Gerçek bir mikro çekirdek tasarımı değil, orada ayrı işlemlere ayrılmak yok .
von

1
Yani en az iki tane çekirdek işlemi kullanan bir tasarım kabul ediyorsunuz. Terim microkernelzaten çağrılması gereken bir şey için kullanıldığı için yine de yanlıştır multi context kernel.
schily
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.