Mikro çekirdek - Microkernel

Sırasıyla monolitik ve mikro çekirdek tabanlı işletim sistemlerinin yapısı

İçinde bilgisayar Bilimi, bir mikro çekirdek (genellikle şu şekilde kısaltılır: μ-çekirdek) minimuma yakın miktardır yazılım uygulamak için gereken mekanizmaları sağlayabilen işletim sistemi (İŞLETİM SİSTEMİ). Bu mekanizmalar, düşük seviyeli adres alanı yönetim Konu Yönetim ve arası iletişim (IPC).

Donanım birden fazla yüzükler veya CPU modları Mikro çekirdek, en ayrıcalıklı düzeyde çalışan tek yazılım olabilir ve buna genellikle gözetmen veya çekirdek modu. Gibi geleneksel işletim sistemi işlevleri aygıt sürücüleri, protokol yığınları ve dosya sistemleri, genellikle mikro çekirdekten çıkarılır ve bunun yerine Kullanıcı alanı.[1]

Kaynak kod boyutu açısından, mikro çekirdekler genellikle daha küçüktür. monolitik çekirdekler. MINIX 3 örneğin mikro çekirdek yalnızca yaklaşık 12.000 satır koda sahiptir.[2]

Tarih

Mikro çekirdekler köklerini Danimarkalı bilgisayar öncüsüne kadar izler Brinch Hansen için ve Danimarka bilgisayar şirketindeki görev süresi Regnecentralen RC 4000 bilgisayarı için yazılım geliştirme çalışmalarına liderlik etti.[3]1967'de Regnecentralen, Polonya'daki bir gübre fabrikasına RC 4000 prototipi kuruyordu. Puławy. Bilgisayar, tesisin ihtiyaçlarına göre uyarlanmış küçük bir gerçek zamanlı işletim sistemi kullandı. Brinch Hansen ve ekibi, RC 4000 sisteminin genelliği ve yeniden kullanılabilirliğinin olmamasıyla ilgilenmeye başladı. Her bir kurulumun farklı bir işletim sistemi gerektireceğinden korktular, bu yüzden RC 4000 için yeni ve daha genel yazılım oluşturma yollarını araştırmaya başladılar.[4]1969'da, çabaları, RC 4000 Çoklu Programlama Sistemi. Çekirdeği, bir seferde 8'i birbirinden korunan 23 ayrıcalıksız süreç için mesaj geçişine dayalı süreçler arası iletişim sağladı. Ayrıca paralel olarak yürütülen programların zaman dilimlerinin planlamasını, diğer çalışan programların talebi üzerine program yürütmenin başlatılmasını ve kontrolünü ve çevre birimlere veya çevre birimlerden veri aktarımlarının başlatılmasını gerçekleştirdi. Bu temel mekanizmaların yanı sıra, program yürütme ve kaynak tahsisi için yerleşik bir stratejisi yoktu. Bu strateji, ana süreçlerin alt süreçler üzerinde tam kontrole sahip olduğu ve işletim sistemleri gibi davrandığı bir çalışan programlar hiyerarşisi tarafından uygulanacaktı.[5][6]

Brinch Hansen'ın çalışmalarını takiben, mikro çekirdekler 1970'lerden beri geliştirildi.[7] Mikro çekirdek terimi ilk olarak 1981'den sonra ortaya çıktı.[8] Mikro çekirdekler, bilgisayar dünyasındaki değişikliklere ve mevcut olanı uyarlayan çeşitli zorluklara bir yanıt olarak düşünülmüştür "tek çekirdekler "bu yeni sistemlere. Yeni aygıt sürücüleri, protokol yığınları, dosya sistemleri ve diğer düşük seviyeli sistemler sürekli geliştiriliyordu. Bu kod normalde monolitik çekirdekte bulunuyordu ve bu nedenle üzerinde çalışmak için önemli bir çalışma ve dikkatli kod yönetimi gerekiyordu. Mikro çekirdekler, tüm bu hizmetlerin diğerleri gibi kullanıcı-uzay programları olarak uygulanacağı düşüncesiyle geliştirildi ve diğer programlar gibi monolitik olarak çalıştırılıp başlatılıp durdurulacaktı, bu sadece bu hizmetlerin olmasına izin vermeyecekti. üzerinde daha kolay çalıştı, ancak aynı zamanda istenmeyen yan etkiler konusunda endişelenmeden ince ayar yapılmasına izin vermek için çekirdek kodunu ayırdı.Ayrıca, tamamen yeni işletim sistemlerinin ortak bir çekirdek üzerinde "oluşturulmasına" izin vererek işletim sistemi araştırmalarına yardımcı olur.

Mikro çekirdekler, ilk kullanılabildiği 1980'lerde çok sıcak bir konuydu. yerel bölge ağları tanıtıldı.[kaynak belirtilmeli ]. AmigaOS Yürütme çekirdek erken bir örnekti, 1986'da tanıtıldı ve göreceli ticari başarıya sahip bir PC'de kullanıldı. Diğer açılardan bir kusur olarak kabul edilen bellek korumasının olmaması, bu çekirdeğin çok yüksek mesaj geçirme performansına sahip olmasına izin verdi çünkü kullanıcı alanı programları arasında mesaj alışverişi yaparken veri kopyalamasına gerek yoktu.[9]

Çekirdeğin kullanıcı alanına dağıtılmasına izin veren aynı mekanizmalar, sistemin ağ bağlantıları arasında dağıtılmasına da izin verdi. Özellikle ilk mikro çekirdekler Mach, hayal kırıklığı yaratan bir performansa sahip olduğunu kanıtladı, ancak içsel avantajlar o kadar büyük görünüyordu ki, 1990'ların sonlarına doğru önemli bir araştırma hattıydı.[kaynak belirtilmeli ] Bununla birlikte, bu süre zarfında, bilgisayarların hızı ağ sistemlerine göre büyük ölçüde arttı ve performanstaki dezavantajlar, geliştirme açısından avantajları bastırmaya başladı.[kaynak belirtilmeli ] Mevcut sistemleri daha iyi performansa sahip olacak şekilde uyarlamak için birçok girişimde bulunuldu, ancak ek yük her zaman önemliydi ve bu çabaların çoğu kullanıcı alanı programlarının çekirdeğe geri taşınmasını gerektiriyordu. 2000 yılına gelindiğinde, büyük ölçekli (Mach benzeri) çabaların çoğu sona erdi, ancak Apple'ın Mac os işletim sistemi, 2001'de piyasaya sürülen bir karma çekirdek aranan XNU, yoğun şekilde değiştirilmiş (karma) bir OSFMK BSD UNIX kodlu 7.3 çekirdek,[10][11] ve bu çekirdek aynı zamanda iOS, tvOS, ve watchOS. 2012'den itibarenMach tabanlı GNU Hurd aynı zamanda işlevseldir ve test sürümlerine dahildir Arch Linux ve Debian.

Mikro çekirdekler üzerindeki büyük çalışmalar büyük ölçüde sona ermiş olsa da, deneyciler geliştirmeye devam etti.[kaynak belirtilmeli ] O zamandan beri, önceki tasarımların performans problemlerinin çoğunun konseptin temel bir sınırlaması olmadığı, bunun yerine tasarımcının bu hizmetlerin mümkün olduğunca çoğunu uygulamak için tek amaçlı sistemleri kullanma arzusundan kaynaklandığı gösterilmiştir.[kaynak belirtilmeli ] Soruna daha pragmatik bir yaklaşım kullanmak, montaj kodu ve normalde yazılımda desteklenen kavramları uygulamak için işlemciye güvenmek, önemli ölçüde geliştirilmiş performansa sahip yeni bir mikro çekirdek serisine yol açtı.

Mikro çekirdekler aşağıdakilerle yakından ilgilidir: ekzokerneller.[12]Ayrıca birçok ortak yönleri var hipervizörler,[13]ancak ikincisi asgari düzeyde olduğunu iddia etmez ve destekleme konusunda uzmanlaşmıştır. Sanal makineler; gerçekten L4 mikro çekirdek genellikle bir hiper yönetici kapasitesinde kullanım bulur.

Giriş

İlk işletim sistemi çekirdekleri, kısmen bilgisayar belleğinin sınırlı olmasından dolayı oldukça küçüktü. Bilgisayarların kapasitesi arttıkça, çekirdeğin kontrol etmesi gereken cihaz sayısı da arttı. Erken tarih boyunca Unix çeşitli çekirdekler içerse bile genellikle küçüktü aygıt sürücüleri ve dosya sistemi uygulamalar. Adres alanları 16'dan 32 bite çıktığında, çekirdek tasarımı artık donanım mimarisi tarafından kısıtlanmıyordu ve çekirdekler büyümeye başladı.

Berkeley Yazılım Dağıtımı (BSD) / Unix daha büyük çekirdekler çağını başlattı. BSD, CPU, diskler ve yazıcılardan oluşan temel bir sistemi çalıştırmanın yanı sıra, TCP / IP ağ sistemi ve mevcut programların ağ üzerinde "görünmez" çalışmasına izin veren bir dizi "sanal" cihaz. Bu büyüme yıllarca devam etti ve milyonlarca satırlık çekirdeklerle sonuçlandı. kaynak kodu. Bu büyümenin bir sonucu olarak, çekirdekler hatalara eğilimliydi ve bakımı gittikçe zorlaştı.

Mikro çekirdek, bu çekirdek büyümesini ve bunun sonucunda ortaya çıkan zorlukları ele almayı amaçlıyordu. Teorik olarak, mikro çekirdek tasarımı, bölünmesi nedeniyle kodun daha kolay yönetilmesine izin verir. Kullanıcı alanı Hizmetler. Bu aynı zamanda daha az miktarda kod çalıştırılmasından kaynaklanan artan güvenlik ve kararlılık sağlar. çekirdek modu. Örneğin, bir ağ hizmeti, arabellek taşması, yalnızca ağ hizmetinin belleği bozulur ve sistemin geri kalanı hala çalışır durumda kalır.

Arası iletişim

Arası iletişim (IPC), ayrı işlemlerin genellikle göndererek birbirleriyle iletişim kurmasına izin veren herhangi bir mekanizmadır. mesajlar. Paylaşılan hafıza kesinlikle tanımlanır, aynı zamanda süreçler arası bir iletişim mekanizmasıdır, ancak IPC kısaltması genellikle yalnızca mesaj geçişine atıfta bulunur ve özellikle mikro çekirdeklerle ilgili olan ikincisidir. IPC, işletim sisteminin, IPC aracılığıyla çalıştırılan, sistemdeki diğer programlar tarafından kullanılan sunucular adı verilen bir dizi küçük programdan oluşturulmasına izin verir. Çevresel donanım desteğinin çoğu veya tamamı, aygıt sürücüleri için sunucularla bu şekilde ele alınır, ağ protokol yığınları, dosya sistemleri, grafikler vb.

IPC eşzamanlı veya eşzamansız olabilir. Eşzamansız IPC, ağ iletişimine benzer: gönderen bir mesaj gönderir ve uygulamaya devam eder. Alıcı kontrol eder (anketler ) mesajın mevcudiyeti için veya bazı bildirim mekanizmalarıyla kendisine uyarılır. Eşzamansız IPC, çekirdeğin mesajlar için arabellekleri ve kuyrukları korumasını ve arabellek taşmalarıyla ilgilenmesini gerektirir; aynı zamanda mesajların çift kopyalanmasını gerektirir (göndericiden çekirdeğe ve alıcıya çekirdekten). Senkronize IPC'de, birinci taraf (gönderen veya alıcı), diğer taraf IPC'yi gerçekleştirmeye hazır olana kadar bloke eder. Arabelleğe alma veya birden çok kopya gerektirmez, ancak örtük buluşma programlamayı zorlaştırabilir. Çoğu programcı eşzamansız göndermeyi ve eşzamanlı almayı tercih eder.

Birinci nesil mikro çekirdekler tipik olarak eşzamanlı ve eşzamansız IPC'yi destekledi ve zayıf IPC performansından muzdaripti. Jochen Liedtke IPC mekanizmalarının tasarımı ve uygulanmasının bu zayıf performansın altında yatan neden olduğunu varsaydı. Onun içinde L4 mikro çekirdek IPC maliyetlerini düşüren yöntemlere öncülük etti. büyüklük sırası.[14] Bunlar, bir göndermenin yanı sıra bir alma işlemini destekleyen, tüm IPC'yi eşzamanlı hale getiren ve kayıtlarda mümkün olduğunca fazla veri ileten bir IPC sistem çağrısını içerir. Ayrıca, Liedtke, doğrudan işlem anahtarı, bir IPC yürütme sırasında bir (eksik) bağlam anahtarı doğrudan göndericiden alıcıya gerçekleştirilir. L4'te olduğu gibi, mesajın bir kısmı veya tamamı kayıtlara geçirilirse, bu mesajın kayıt içi kısmını hiçbir kopyalamadan aktarır. Ayrıca, programlayıcıyı çağırmanın ek yükünden kaçınılır; bu özellikle IPC'nin bir uzaktan prosedür çağrısı (RPC) tür modası, bir sunucuyu çağıran bir istemci tarafından. Başka bir optimizasyon, tembel zamanlama, IPC sırasında bloke olan iş parçacıkları hazır kuyruğunda bırakarak, IPC sırasında zamanlama kuyruklarının geçişini önler. Programlayıcı çağrıldığında, bu tür iş parçacıklarını uygun bekleme kuyruğuna taşır. Çoğu durumda olduğu gibi, bir sonraki zamanlayıcı çağrılmasından önce bir iş parçacığı engeli kaldırılır, bu yaklaşım önemli iş tasarrufu sağlar. O zamandan beri benzer yaklaşımlar QNX ve MINIX 3.[kaynak belirtilmeli ]

Chen ve Bershad bir dizi deneyde hafızayı karşılaştırdı talimat başına döngü (MCPI) monolitik Ultrix mikro çekirdeğinkilerle Mach ile birlikte 4.3BSD Unix sunucu çalışıyor Kullanıcı alanı. Elde ettikleri sonuçlar, Mach'ın daha yüksek MCPI ile daha düşük performansını açıkladı ve IPC'nin tek başına sistem ek yükünün çoğundan sorumlu olmadığını gösterdi, bu da yalnızca IPC'ye odaklanan optimizasyonların sınırlı etkiye sahip olacağını öne sürdü.[15] Liedtke daha sonra, Ultrix ile Mach MCPI arasındaki farkın büyük kısmının kapasiteden kaynaklandığını gözlemleyerek Chen ve Bershad'ın sonuçlarını rafine etti. önbellek eksikleri ve bir mikro çekirdeğin önbellek çalışma kümesini büyük ölçüde azaltmanın sorunu çözeceği sonucuna varmak.[16]

Bir istemci-sunucu sisteminde, tipik işlem bir istemcinin bir sunucuyu çağırması ve ardından bir yanıt beklemesi olduğundan, çoğu iletişim, eşzamansız ilkeller kullanılıyor olsa bile, esasen eşzamanlıdır. Aynı zamanda kendisini daha verimli bir uygulama için ödünç verdiğinden, çoğu mikro çekirdek genellikle L4'ün liderliğini takip etti ve yalnızca senkronize bir IPC ilkelliği sağladı. Eşzamansız IPC, yardımcı iş parçacıkları kullanılarak üstte uygulanabilir. Bununla birlikte, deneyimler, eşzamanlı IPC'nin faydasının şüpheli olduğunu göstermiştir: eşzamanlı IPC, çok iş parçacıklı bir tasarımı aksi takdirde basit sistemlere zorlar ve sonuçta ortaya çıkan senkronizasyon karmaşıklıkları. Ayrıca, RPC benzeri bir sunucu çağrısı, istemci ve sunucuyu sıralı hale getirir; bu, ayrı çekirdeklerde çalışıyorlarsa bundan kaçınılması gerekir. Ticari ürünlere yerleştirilen L4 sürümleri, bu nedenle, eşzamansız iletişimi daha iyi desteklemek için bir eşzamansız bildirim mekanizması eklemeyi gerekli bulmuştur. Bu sinyal benzeri mekanizma veri taşımaz ve bu nedenle çekirdek tarafından arabelleğe alınmasını gerektirmez. İki tür IPC'ye sahip olmakla, yine de asgari olma ilkesini ihlal etmişlerdir. L4'ün diğer versiyonları tamamen asenkron IPC'ye geçmiştir.[17]

Eşzamanlı IPC birinci tarafı diğer taraf hazır olana kadar engellediğinden, sınırsız kullanım kolayca kilitlenmelere yol açabilir. Ayrıca, bir müşteri kolayca bir hizmet reddi bir istek göndererek ve asla yanıtı almaya çalışmayarak bir sunucuya saldırı. Bu nedenle, senkronize IPC, belirsiz engellemeyi önlemek için bir yol sağlamalıdır. Birçok mikro çekirdek şunları sağlar: zaman aşımları Engelleme süresini sınırlayan IPC çağrılarında. Pratikte, mantıklı zaman aşımı değerlerini seçmek zordur ve sistemler neredeyse kaçınılmaz olarak istemciler için sonsuz zaman aşımı ve sunucular için sıfır zaman aşımı kullanır. Sonuç olarak, eğilim keyfi zaman aşımları sağlamamaya yöneliktir, ancak yalnızca ortak hazır değilse IPC'nin derhal başarısız olması gerektiğini belirten bir işarettir. Bu yaklaşım, sıfır ve sonsuz olmak üzere iki zaman aşımı değeri arasından etkili bir seçim sağlar. L4 ve MINIX'in son sürümleri bu yoldan gitmiştir (L4'ün eski sürümleri zaman aşımlarını kullanmıştır). QNX, istemcinin mesaj gönderme çağrısının bir parçası olarak yanıt arabelleğini belirtmesini gerektirerek sorunu önler. Sunucu yanıt verdiğinde çekirdek, istemcinin yanıtı açıkça almasını beklemek zorunda kalmadan verileri istemcinin arabelleğine kopyalar.[18]

Sunucular

Mikro çekirdek sunucuları esasen arka plan programı Çekirdeğin bazılarına fiziksel bellek bölümleriyle etkileşime girme ayrıcalıkları vermesi dışında diğerleri gibi programlar. Bu, bazı sunucuların, özellikle aygıt sürücülerinin donanımla doğrudan etkileşime girmesine izin verir.

Genel amaçlı bir mikro çekirdek için temel bir sunucu kümesi, dosya sistemi sunucularını, aygıt sürücüsü sunucularını, ağ sunucularını, görüntü sunucuları ve kullanıcı arabirimi aygıt sunucuları. Bu sunucu kümesi ( QNX ) kabaca bir Unix tarafından sunulan hizmetleri sağlar monolitik çekirdek. Gerekli sunucular sistem başlangıcında başlatılır ve normal uygulama programlarına dosya, ağ ve cihaz erişimi gibi hizmetler sağlar. Bir kullanıcı uygulamasının ortamında çalışan bu tür sunucularla, sunucu geliştirme, çekirdek geliştirme için gereken oluşturma ve önyükleme sürecinden ziyade sıradan uygulama geliştirmeye benzer.

Ek olarak, birçok "kilitlenme" basit bir şekilde düzeltilebilir sunucuyu durdurma ve yeniden başlatma. Ancak, sistem durumunun bir kısmı arızalı sunucuyla kaybolur, bu nedenle bu yaklaşım, uygulamaların başarısızlıkla başa çıkmasını gerektirir. İyi bir örnek, aşağıdakilerden sorumlu bir sunucudur: TCP / IP Bağlantılar: Bu sunucu yeniden başlatılırsa, uygulamalar ağa bağlı bir sistemde normal bir durum olan "kayıp" bir bağlantıyla karşılaşır. Diğer hizmetler için, başarısızlık daha az beklenir ve uygulama kodunda değişiklik yapılmasını gerektirebilir. QNX için, yeniden başlatma özelliği QNX Yüksek Kullanılabilirlik Araç Kiti olarak sunulur.[19]

Aygıt sürücüleri

Aygıt sürücüleri sık sık icra etmek Doğrudan bellek erişimi (DMA) ve bu nedenle çeşitli çekirdek veri yapıları dahil olmak üzere fiziksel belleğin rastgele konumlarına yazabilir. Bu tür sürücüler bu nedenle güvenilir olmalıdır. Bunun çekirdeğin bir parçası olmaları gerektiği anlamına geldiği yaygın bir yanılgıdır. Aslında, bir sürücü, çekirdeğin bir parçası olduğu için doğası gereği az ya da çok güvenilir değildir.

Bir aygıt sürücüsünü kullanıcı alanında çalıştırmak, hatalı çalışan bir sürücünün neden olabileceği hasarı mutlaka azaltmazken, pratikte buggy (kötü niyetli değil) sürücülerin varlığında sistem kararlılığı için faydalıdır: sürücü kodunun kendisi tarafından bellek erişim ihlalleri ( aygıtın tersine) hala bellek yönetimi donanımı tarafından yakalanabilir. Dahası, birçok cihaz DMA uyumlu değildir, sürücüleri kullanıcı alanında çalıştırılarak güvenilmez hale getirilebilir. Son zamanlarda, artan sayıda bilgisayar özelliği IOMMU'lar, bunların çoğu bir aygıtın fiziksel belleğe erişimini kısıtlamak için kullanılabilir.[20] Bu ayrıca kullanıcı modu sürücülerinin güvenilmez hale gelmesine de izin verir.

Kullanıcı modu sürücüleri aslında mikro çekirdeklerden önce gelir. Michigan Terminal Sistemi (MTS), 1967'de, bu özellik ile tasarlanan ilk işletim sistemi olan kullanıcı alanı sürücülerini (dosya sistemi desteği dahil) destekledi.[21]Tarihsel olarak, aygıtların sayısı az ve güvenilir olduğu için sürücüler daha az sorunluydu, bu nedenle bunların çekirdekte bulunması tasarımı basitleştirdi ve potansiyel performans sorunlarını önledi. Bu, Unix'in geleneksel çekirdekte sürücü stiline yol açtı.[22] Linux ve Windows NT Çeşitli çevre birimlerinin çoğalmasıyla birlikte, artan sürücü kodu miktarı ve modern işletim sistemlerinde kod boyutunda çekirdeğe hakimdir.

Temel bileşenler ve minimumluk

Bir mikro çekirdek, keyfi işletim sistemi hizmetlerinin oluşturulmasına izin vermesi gerektiğinden, bazı temel işlevler sağlamalıdır. En azından şunları içerir:

Bu minimal tasarımın öncüsü Brinch Hansen 's Çekirdek ve IBM'in hipervizörü VM. O zamandan beri Liedtke'de resmileştirildi asgarilık ilkesi:

Mikro çekirdek içinde bir kavram, ancak onu çekirdeğin dışına taşımak, yani rekabet eden uygulamalara izin vermek, sistemin gerekli işlevselliğinin uygulanmasını engelliyorsa tolere edilir.[16]

Kullanıcı programları olarak uygulanan aygıt sürücüleri, bazı işlemci mimarilerinde G / Ç donanımına erişmek için özel ayrıcalıklar gerektirse de, diğer her şey bir kullanıcı modu programında yapılabilir.

Minimumluk ilkesiyle ilgili olan ve mikro çekirdek tasarımı için eşit derecede önemli olan, mekanizma ve politika ayrımı, minimal bir çekirdeğin üzerine keyfi sistemlerin kurulmasını sağlayan şey budur. Çekirdeğe yerleştirilmiş herhangi bir politika kullanıcı düzeyinde üzerine yazılamaz ve bu nedenle mikro çekirdeğin genelliğini sınırlar.[12]Kullanıcı düzeyindeki sunucularda uygulanan ilke, sunucuları değiştirerek (veya uygulamanın benzer hizmetler sunan rakip sunucular arasında seçim yapmasına izin vererek) değiştirilebilir.

Verimlilik için çoğu mikro çekirdek, minimumluk ilkesini ve politika-mekanizma ayrımı ilkesini ihlal ederek zamanlayıcılar içerir ve zamanlayıcıları yönetir.

Başlatmak (önyükleme ) mikro çekirdek tabanlı bir sistemin aygıt sürücüleri, çekirdeğin parçası olmayan. Tipik olarak bu, önyükleme görüntüsünde çekirdek ile paketlendikleri ve çekirdek, sürücülerin nasıl konumlandırılacağını ve başlatılacağını tanımlayan bir önyükleme protokolünü desteklediği anlamına gelir; bu geleneksel önyükleme prosedürüdür L4 mikro çekirdekler. Bazı mikro çekirdekler, bazı önemli sürücüleri çekirdeğin içine yerleştirerek bunu basitleştirir (minimumluk ilkesini ihlal ederek), LynxOS ve orijinal Minix örneklerdir. Hatta bazıları bir dosya sistemi önyüklemeyi basitleştirmek için çekirdekte. Mikro çekirdek tabanlı bir sistem, çoklu önyükleme uyumlu önyükleyici ile önyüklenebilir. Bu tür sistemler genellikle ilk önyükleme yapmak veya önyüklemeye devam etmek için bir işletim sistemi görüntüsü monte etmek için statik olarak bağlantılı sunucular yükler.

Mikro çekirdeğin önemli bir bileşeni, IPC kullanıcı modu sunucularında güvenli bir şekilde sayfa hatası işlemeyi ve değiştirmeyi uygulamaya izin veren sistem ve sanal bellek yöneticisi tasarımı. Tüm hizmetler kullanıcı modu programları tarafından gerçekleştirildiğinden, programlar arasında verimli iletişim araçları, monolitik çekirdeklerden çok daha önemlidir. IPC sisteminin tasarımı bir mikro çekirdeği oluşturur veya kırar. Etkili olabilmesi için, IPC sisteminin yalnızca düşük ek yüke sahip olması değil, aynı zamanda CPU planlamasıyla da iyi etkileşime girmesi gerekir.

Verim

Çoğu ana işlemcide, mikro çekirdek tabanlı bir sistemde bir hizmet elde etmek, monolitik bir sistemden doğal olarak daha pahalıdır.[12] Monolitik sistemde hizmet, iki sistem çağrısı gerektiren tek bir sistem çağrısı ile elde edilir. mod anahtarları (işlemcinin değişiklikleri yüzük veya CPU modu ). Mikro çekirdek tabanlı sistemde hizmet, bir sunucuya bir IPC mesajı gönderilerek ve sunucudan başka bir IPC mesajında ​​sonucun alınmasıyla elde edilir. Bu gerektirir bağlam anahtarı sürücüler süreçler olarak uygulanıyorsa veya prosedür olarak uygulanıyorsa bir işlev çağrısı yapıyorsa. Ek olarak, gerçek verilerin sunucuya ve geri gönderilmesi fazladan kopyalama ek yüküne neden olabilirken, monolitik bir sistemde çekirdek, istemcinin tamponlarındaki verilere doğrudan erişebilir.

Bu nedenle performans, mikro çekirdek sistemlerinde potansiyel bir sorundur. Nitekim, birinci nesil mikro çekirdeklerin deneyimi Mach ve ChorusOS onlara dayalı sistemlerin çok kötü performans gösterdiğini gösterdi.[15] Ancak, Jochen Liedtke Mach'ın performans sorunlarının kötü tasarım ve uygulamadan kaynaklandığını, özellikle Mach'ın önbellek ayak izi.[16]Liedtke kendi başına gösteri yaptı L4 mikro çekirdek dikkatli tasarım ve uygulama yoluyla ve özellikle minimumluk ilkesini takip ederek, IPC maliyetlerinin Mach'a kıyasla bir mertebeden daha fazla azaltılabileceğini. L4'ün IPC performansı, bir dizi mimaride hala yenilmez.[23][24][25]

Bu sonuçlar, birinci nesil mikro çekirdeklere dayalı sistemlerin zayıf performansının L4 gibi ikinci nesil çekirdekler için temsili olmadığını gösterirken, bu mikro çekirdek tabanlı sistemlerin iyi performansla oluşturulabileceğine dair hiçbir kanıt oluşturmuyor. L4'e taşınan monolitik bir Linux sunucusunun, yerel Linux'a göre yalnızca yüzde birkaç ek yük sergilediği gösterilmiştir.[26]Bununla birlikte, böyle bir tek sunuculu sistem, mikro çekirdeklerinin işletim sistemi işlevselliğini ayrı sunuculara yapılandırarak sağlaması beklenen avantajlardan, varsa, çok azını sergiler.

Bir dizi ticari çoklu sunucu sistemi mevcuttur, özellikle gerçek zamanlı sistemler QNX ve Bütünlük. Bu çok sunuculu sistemler için monolitik sistemlerle ilgili kapsamlı bir performans karşılaştırması yayınlanmamıştır. Dahası, performans bu ticari sistemler için öncelikli bir sorun olarak görünmüyor, bunun yerine güvenilir bir şekilde hızlı kesinti işleme yanıt sürelerini (QNX) ve sağlamlık uğruna basitliği vurguluyor. Yüksek performanslı çok sunuculu bir işletim sistemi oluşturma girişimi, IBM Sawmill Linux projesiydi.[27]Ancak bu proje hiçbir zaman tamamlanmadı.

Bu arada, kullanıcı düzeyindeki aygıt sürücülerinin, Gigabit Ethernet gibi yüksek verimli, yüksek kesintili aygıtlar için bile çekirdek içi sürücülerin performansına yaklaşabileceği görülmüştür.[28] Bu, yüksek performanslı çok sunuculu sistemlerin mümkün olduğunu ima ediyor gibi görünüyor.

Güvenlik

Mikro çekirdeklerin güvenlik yararları sıklıkla tartışılmıştır.[29][30] Güvenlik bağlamında, mikro çekirdeklerin asgari ilkesi, bazılarının iddia ettiği gibi, doğrudan en az ayrıcalık ilkesi buna göre tüm kodun yalnızca gerekli işlevselliği sağlamak için gereken ayrıcalıklara sahip olması gerekir. Minimum olma, bir sistemin güvenilir bilgi işlem tabanı (TCB) minimum düzeyde tutulmalıdır. Çekirdek (donanımın ayrıcalıklı modunda çalışan kod) herhangi bir veriye beklenmedik bir erişime sahip olduğundan ve bu nedenle bütünlüğünü veya gizliliğini ihlal edebileceğinden, çekirdek her zaman TCB'nin bir parçasıdır. Güvenlik odaklı bir tasarımda en aza indirmek doğaldır.

Sonuç olarak, mikro çekirdek tasarımları, aşağıdakiler de dahil olmak üzere yüksek güvenlikli uygulamalar için tasarlanmış sistemler için kullanılmıştır. KeyKOS, EROS ve askeri sistemler. Aslında ortak kriterler (CC) en yüksek güvence seviyesinde (Değerlendirme Güvence Seviyesi (EAL) 7), karmaşık bir sistem için gerçek güvenilirliği tesis etmenin pratikte imkansızlığının bir kabulü olan, değerlendirme hedefinin "basit" olması konusunda açık bir gerekliliğe sahiptir. Ne yazık ki, yine, "basit" terimi yanıltıcı ve yanlış tanımlanmıştır. En azından Savunma Bakanlığı Güvenilir Bilgisayar Sistemi Değerlendirme Kriterleri, B3 / A1 sınıflarında biraz daha kesin ifadeler getirdi:

"TCB, tam ve kavramsal olarak basit koruma mekanizmalarını kesin olarak tanımlanmış anlamlarla [uygulayacaktır]. Önemli sistem mühendisliği, TCB'nin karmaşıklığını en aza indirmeye ve ayrıca koruma açısından kritik olmayan modülleri TCB'den hariç tutmaya yönlendirilecektir."

— Savunma Bakanlığı Güvenilir Bilgisayar Sistemi Değerlendirme Kriterleri

2018'de, Asya-Pasifik Sistemler Konferansı'nda sunulan bir makale, yayınlanan tüm kritik öneme sahip verileri araştırarak mikro çekirdeklerin monolitik çekirdeklerden bariz şekilde daha güvenli olduğunu iddia etti. CVE'ler için Linux o anda çekirdek. Çalışma, sorunların% 40'ının resmi olarak doğrulanmış bir mikro çekirdekte hiç meydana gelemeyeceği ve sorunların yalnızca% 4'ünün böyle bir sistemde tamamen ortadan kaldırılmayacağı sonucuna vardı.[31]

Üçüncü nesil

Mikro çekirdeklerle ilgili daha yeni çalışmalar, çekirdek API'sinin resmi özelliklerine ve API'nin güvenlik özelliklerinin ve uygulama doğruluğunun resmi kanıtlarına odaklanmaktadır. Bunun ilk örneği, EROS API'nin basitleştirilmiş bir modeline dayanan, EROS'taki hapsetme mekanizmalarının matematiksel bir kanıtıdır.[32] Daha yakın zamanlarda (2007'de), koruma modelinin özelliklerinin makine tarafından kontrol edilen kapsamlı bir ispatı seti gerçekleştirildi. seL4, bir L4 sürümü.[33]

Bu, olarak adlandırılan şeye yol açtı üçüncü nesil mikro çekirdekler,[34]tarafından kontrol edilen kaynak erişimi ile güvenlik odaklı bir API ile karakterize yetenekler, sanallaştırma birinci sınıf bir ilgi olarak, çekirdek kaynak yönetimine yeni yaklaşımlar,[35]ve uygunluk için bir tasarım hedefi resmi analiz, her zamanki yüksek performans hedefinin yanı sıra. Örnekler Coyotos, seL4 Nova[36][37]Redoks ve Fiasco.OC.[36][38]

SEL4 durumunda, uygulamanın tam resmi doğrulaması sağlanmıştır,[34] yani, çekirdeğin uygulamasının resmi belirtimiyle tutarlı olduğuna dair matematiksel bir kanıt. Bu, API ile ilgili kanıtlanan özelliklerin gerçekte gerçek çekirdek için geçerli olduğunu garanti eder, bu da CC EAL7'nin bile ötesine geçen bir güvence derecesidir. (Bunun hala% 100 garanti olmadığını unutmayın, çünkü tüm matematiksel kanıtlar yalnızca kendileri kadar geçerli, kendileri de kanıtlanmamış, aksiyomlar ve güvenilirlik için hala gerçek dünyada bilimsel doğrulama gerektirmektedir. Görmek: Gödel'in eksiklik teoremi ) Bunu, API'nin güvenlik uygulama özelliklerinin kanıtları ve yürütülebilir ikili kodun, derleyiciyi TCB'den çıkaran C uygulamasının doğru bir çevirisi olduğunu gösteren bir kanıt izledi. Birlikte ele alındığında, bu kanıtlar çekirdeğin güvenlik özelliklerinin uçtan uca kanıtını oluşturur.[39]

Nanokernel

Dönem Nanokernel veya picokernel tarihsel olarak:

  • Toplam çekirdek kodu miktarının, yani donanımın ayrıcalıklı modunda çalıştırılan kodun çok küçük olduğu bir çekirdek. Dönem picokernel bazen küçük boyutu daha fazla vurgulamak için kullanıldı. Dönem Nanokernel gazetede Jonathan S. Shapiro tarafından icat edildi KeyKOS NanoKernel Mimarisi. Alaycı bir tepkiydi Mach bir mikro çekirdek olduğunu iddia ederken Shapiro onu monolitik, esasen yapılandırılmamış ve değiştirmeye çalıştığı sistemlerden daha yavaş olarak değerlendirdi. Picokernel madeni para kullanımı da dahil olmak üzere terimin daha sonra yeniden kullanılması ve yanıtlanması, noktanın büyük ölçüde gözden kaçırıldığını göstermektedir. Her ikisi de Nanokernel ve picokernel daha sonra mikro çekirdek terimi ile ifade edilen aynı anlama sahip olmuştur.
  • Daha doğru bir şekilde bir işletim sistemi olarak adlandırılan bir sanallaştırma katmanı hipervizör.
  • Bir donanım soyutlama katmanı bir çekirdeğin en alt düzey bölümünü oluşturan, bazen sağlamak için kullanılan gerçek zaman normal işletim sistemlerinde işlevsellik, örneğin Adeos.

Nanokernel teriminin küçük bir çekirdeğe değil, bir çekirdeğe atıfta bulunmak için kullanıldığı en az bir durum da vardır. nanosaniye saat çözünürlüğü.[40]

Ayrıca bakınız

Referanslar

  1. ^ Herder, Jorrit N. (23 Şubat 2005). "Gerçek Bir Mikro Çekirdek İşletim Sistemine Doğru" (PDF). minix3.org. Alındı 22 Haziran 2015.
  2. ^ "daha fazla oku". Alındı 20 Aralık 2016.
  3. ^ "2002 Bilgisayar Öncü Ödülü Sahibi". IEEE Bilgisayar Topluluğu. Alındı 13 Eylül 2016.
  4. ^ Brinch Hansen, Per (2004). Bir Programcının Hikayesi: Bir Bilgisayar Öncüsünün Hayatı. Alındı 13 Eylül 2016.
  5. ^ Brinch Hansen, Per (Nisan 1969). RC 4000 Yazılımı: Çoklu Programlama Sistemi (PDF) (Teknik rapor). Regnecentralen. Alındı 13 Eylül 2016.
  6. ^ Brinch Hansen, Per (1970). "Çoklu Programlama İşletim Sisteminin Çekirdeği" (PDF). ACM'nin iletişimi. 13 (4): 238–250. CiteSeerX  10.1.1.105.4204. doi:10.1145/362258.362278. S2CID  9414037.
  7. ^ .Wulf, William; Cohen, Ellis; Corwin, William; Jones, Anita; Levin, Roy; Pierson, C .; Pollack, Fred (Haziran 1974). "HYDRA: Çok İşlemcili İşletim Sisteminin Çekirdeği". ACM'nin iletişimi. 17 (6): 337–345. doi:10.1145/355616.364017. S2CID  8011765.
  8. ^ Rashid, Richard; Robertson, George (Aralık 1981). Vurgu: İletişim odaklı bir ağ işletim sistemi çekirdeği. SOSP '81 İşletim sistemleri ilkeleri üzerine sekizinci ACM sempozyumunun bildirileri. Pacific Grove, Kaliforniya, ABD. sayfa 64–75. doi:10.1145/800216.806593.
  9. ^ Sassenrath, Carl (1986). Amiga ROM Kernel Referans Kılavuzu. Yürüt.
  10. ^ Jim Magee. WWDC 2000 Oturum 106 - Mac OS X: Kernel. 14 dakika içinde.
  11. ^ "UNIX / Linux Uygulamalarını Mac OS X'e Taşıma". elma. Alındı 26 Nisan 2011.
  12. ^ a b c Liedtke, Jochen (Eylül 1996). "Gerçek Mikro Çekirdeklere Doğru". ACM'nin iletişimi. 39 (9): 70–77. doi:10.1145/234215.234473. S2CID  2867357.
  13. ^ Heiser, Gernot; Uhlig, Volkmar; LeVasseur, Joshua (Ocak 2006). "Sanal Makine Monitörleri Mikro Çekirdekler Doğru Yapıldı mı?" (PDF). ACM SIGOPS İşletim Sistemleri İncelemesi. ACM. 40 (1): 95–99. doi:10.1145/1113361.1113363. S2CID  7414062.
  14. ^ Liedtke, Jochen (Aralık 1993). IPC'yi çekirdek tasarımıyla iyileştirme. İşletim Sistemi İlkeleri 14. ACM Sempozyumu. Asheville, NC, ABD. sayfa 175–88. CiteSeerX  10.1.1.40.1293.
  15. ^ a b Chen, J. Bradley; Bershad Brian N. (Aralık 1993). İşletim Sistemi Yapısının Bellek Sistemi Performansına Etkisi (PDF). SOSP '93 On dördüncü ACM, İşletim sistemleri ilkeleri sempozyumunun bildirileri. Asheville, NC, ABD. s. 120–133. doi:10.1145/168619.168629.
  16. ^ a b c Liedtke, Jochen (Aralık 1995). Μ-Kernel Yapısında. SOSP '95 Onbeşinci ACM Sempozyumunun İşletim sistemleri ilkeleri üzerine bildirileri. Copper Mountain Resort, CO, ABD. s. 237–250. doi:10.1145/224056.224075.
  17. ^ Elphinstone, Kevin; Heiser, Gernot (Kasım 2013). L3'ten seL4'e: 20 Yıllık L4 Mikro Çekirdeklerinde Neler Öğrendik?. SOSP '13, İşletim Sistemleri İlkeleri Üzerine Yirmi Dördüncü ACM Sempozyumu Bildirileri. Farmington, PA, ABD. s. 133–150. doi:10.1145/2517349.2522720.
  18. ^ "Eşzamanlı Mesaj Aktarımı". Alındı 14 Temmuz 2019.
  19. ^ "QNX Yüksek Kullanılabilirlik Araç Seti" (PDF). Arşivlenen orijinal (PDF) 24 Ağustos 2005.
  20. ^ Wong, William (27 Nisan 2007). "G / Ç, G / Ç, Gittiğimiz Sanal İşe Kapalı". Elektronik Tasarım. Alındı 8 Haziran 2009.
  21. ^ Alexander, Michael T. (1971). Michigan Terminal Sisteminin "Organizasyonu ve Özellikleri". 16-18 Kasım 1971, Güz Ortak Bilgisayar Konferansı Bildirileri. 40: 589–591. doi:10.1145/1478873.1478951. S2CID  14614148.
  22. ^ Lions, John (1 Ağustos 1977). Kaynak Kodu ile UNIX 6. Baskı üzerine Aslanların Yorumu. Eşler Arası İletişim. ISBN  978-1-57398-013-5.
  23. ^ Liedtke, Jochen; Elphinstone, Kevin; Schönberg, Sebastian; Härtig, Hermann; Heiser, Gernot; İslam, Nayeem; Jaeger, Trent (Mayıs 1997). Elde edilen IPC performansı (hala genişletilebilirliğin temeli). 6. İşletim Sistemlerinde Güncel Konular Çalıştayı. Cape Cod, MA, ABD: IEEE. s. 28–31.
  24. ^ Gray, Charles; Chapman, Matthew; Chubb, Peter; Mosberger-Tang, David; Heiser, Gernot (Nisan 2005). Itanium - bir sistem uygulayıcı hikayesi. USENIX Yıllık Teknik Konferansı. Annaheim, CA, ABD. s. 264–278.
  25. ^ van Schaik, Carl; Heiser, Gernot (Ocak 2007). ARM ve segmentli mimarilerde yüksek performanslı mikro çekirdekler ve sanallaştırma. Gömülü Sistemler için Mikro Çekirdekler üzerine 1. Uluslararası Çalıştay. Sidney, Avustralya: NICTA. sayfa 11–21. Arşivlenen orijinal 26 Nisan 2007'de. Alındı 1 Nisan 2007.
  26. ^ Härtig, Hermann; Hohmuth, Michael; Liedtke, Jochen; Schönberg, Sebastian (Ekim 1997). "Μ-çekirdek tabanlı sistemlerin performansı". İşletim Sistemleri İlkeleri On Altıncı ACM Sempozyumu Bildirileri: 66–77. doi:10.1145/268998.266660. ISBN  0-89791-916-5. S2CID  1706253.
  27. ^ Gefflaut, Alain; Jaeger, Trent; Park, Yoonho; Liedtke, Jochen; Elphinstone, Kevin J .; Uhlig, Volkmar; Tidswell, Jonathon E .; Deller, Luke; et al. (2000). Kereste fabrikası çoklu sunucu yaklaşımı. 9. ACM SIGOPS Avrupa Çalıştayı. Kolding, Danimarka. s. 109–114. CiteSeerX  10.1.1.25.8376.
  28. ^ Leslie, Ben; Chubb, Peter; FitzRoy-Dale, Nicholas; Götz, Stefan; Gray, Charles; Macpherson, Luke; Potts, Daniel; Shen, Yueting; Elphinstone, Kevin; Heiser, Gernot (Eylül 2005). "Kullanıcı düzeyinde aygıt sürücüleri: elde edilen performans". Bilgisayar Bilimi ve Teknolojisi Dergisi. 20 (5): 654–664. doi:10.1007 / s11390-005-0654-4. S2CID  1121537.
  29. ^ Tanenbaum, Andrew S. "Tanenbaum-Torvalds tartışması, bölüm II".
  30. ^ Tanenbaum, A., Herder, J. ve Bos, H. (Mayıs 2006).
  31. ^ Biggs, Simon; Lee, Damon; Heiser, Gernot (2018). "Jüri Var: Monolitik İşletim Sistemi Tasarımı Kusurlu: Mikro Çekirdek Tabanlı Tasarımlar Güvenliği Artırıyor". 9. Asya-Pasifik Sistemler Çalıştayı Bildirileri. Jeju Adası, Kore Cumhuriyeti: Computing Machinery Derneği. s. 1–7. doi:10.1145/3265723.3265733.
  32. ^ Shapiro, Jonathan S .; Weber, Samuel. EROS Hapsetme Mekanizmasının Doğrulanması. IEEE Güvenlik ve Gizlilik Konferansı. Arşivlenen orijinal 3 Mart 2016.
  33. ^ Elkaduwe, Dhammika; Klein, Gerwin; Elphinstone Kevin (2007). SeL4 Microkernel'in Doğrulanmış Koruma Modeli. yayınlanmak üzere gönderildi.
  34. ^ a b Klein, Gerwin; Elphinstone, Kevin; Heiser, Gernot; Andronick, Haziran; Cock, David; Derrin, Philip; Elkaduwe, Dhammika; Engelhardt, Kai; Kolanski, Rafal; Norrish, Michael; Sewell, Thomas; Tuch, Harvey; Winwood, Simon (Ekim 2009). seL4: Bir işletim sistemi çekirdeğinin resmi doğrulaması (PDF). 22. ACM İşletim Sistemi İlkeleri Sempozyumu. Big Sky, MT, ABD.
  35. ^ Elkaduwe, Dhammika; Derrin, Philip; Elphinstone, Kevin (Nisan 2008). Fiziksel belleğin yalıtımı ve güvencesi için çekirdek tasarımı. 1. Gömülü Sistemlerde İzolasyon ve Entegrasyon Çalıştayı. Glasgow, İngiltere. doi:10.1145/1435458. Arşivlenen orijinal 24 Nisan 2010'da. Alındı 17 Ağustos 2009.
  36. ^ a b "TUD Home: Operating Systems: Research: Microkernel & Hypervisor". Bilgisayar Bilimleri Fakültesi. Technische Universität Dresden. 12 Ağustos 2010. Alındı 5 Kasım 2011.
  37. ^ Steinberg, Udo; Kauer, Bernhard (April 2010). NOVA: A Microhypervisor-Based Secure Virtualization Architecture. Eurosys 2010. Paris, France. s. 209–222. doi:10.1145/1755913.1755935.
  38. ^ Lackorzynski, Adam; Warg, Alexander (March 2009). Taming Subsystems – Capabilities as Universal Resource Access Control in L4. IIES'09: Second Workshop on Isolation and Integration in Embedded Systems. Nürnberg, Almanya. CiteSeerX  10.1.1.629.9845.
  39. ^ Klein, Gerwin; Andronick, June; Elphinstone, Kevin; Murray, Toby; Sewell, Thomas; Kolanski, Rafal; Heiser, Gernot (February 2014). "Comprehensive Formal Verification of an OS Microkernel". ACM Transactions on Computer Systems. 32 (1): 2:1–2:70. doi:10.1145/2560537. S2CID  4474342.
  40. ^ David L. Mills and Poul-Henning Kamp (28 November 2000). "The Nanokernel" (PDF). Alındı 28 Ağustos 2017.

daha fazla okuma