Mach (çekirdek)

Mach, Carnegie Mellon Üniversitesi'nde öncelikle dağıtık hesaplama ve paralel hesaplama bilgi işlem olmak üzere işletim sistemi araştırmalarını desteklemek için geliştirilen bir işletim sistemi çekirdeğidir. Mach bir mikrokernelin en eski örneklerinden biri olarak sıklıkla bahsedilir. Bununla birlikte, Mach'ın tüm versiyonları mikrokernel değildir. MacOS'un temel aldığı NextStep ve OpenStep, hepsi de daha önce bir mikro çekirdek olmayan Mach içeren XNU işletim sistemi çekirdeğini büyük bir bileşen olarak içerir. Mach türevleri, GNU Hurd ve Apple'ın işletim sistemleri macOS, iOS, tvOS ve watchOS'daki modern işletim sistemi çekirdeklerinin temelini oluşturmaktadır.
Carnegie Mellon'daki proje 1985-1994 yılları arasında gerçek bir mikro çekirdek olan Mach 3.0 ile bitti. Mach, UNIX'in BSD sürümünde çekirdeğin yerine geçecek şekilde geliştirildi, dolayısıyla etrafında yeni bir işletim sistemi tasarlanmasına gerek yoktu. Mach ve türevleri bir dizi ticari işletim sistemi içinde var olmasına rağmen Mach üzerinde deneysel araştırma sona ermiş gibi görünüyor. Mach sanal bellek yönetim sistemi de 4.4BSD'de BSD geliştiricileri tarafından CSRG'de (Bilgisayar Sistemleri Araştırma Grubu) kabul edildi ve FreeBSD gibi modern BSD kaynaklı Unix sistemlerinde görünüyor.
Mach, Carnegie Mellon'un Accent çekirdeğinin mantıksal ardılıdır. Mach projesindeki lider geliştirici Richard Rashid, 1991'den beri Microsoft'da Microsoft Research bölümünde çeşitli üst düzey görevlerde çalışıyor. Orijinal Mach geliştiricilerinden Avie Tevanian, daha önce, Mart 2006'ya kadar Apple'ın baş Yazılım Teknolojisi Sorumlusu olan NeXT'de yazılım başında idi.
Yeni kavramlar
Unix gaydaları, etkileşimli küçük programlardan keyfi karmaşık çözümler üretmek için kullanılabilecek bir kavramsal sistem sundu. Daha küçük olmakla birlikte, bu programların programlanması ve bakımı kolaydı, programlamayı ve hata ayıklamayı basitleştiren iyi tanımlanmış arayüzlere sahipti. Bu nitelikler, küçük boyut ve hatasız performansın son derece önemli olduğu aygıt sürücüleri için daha da değerlidir. Çekirdek kendisini küçük etkileşimli programlarla aynı temelde modellemek için güçlü bir istek vardı.
İşletim sisteminin temeli Rochester Üniversitesi'nde geliştirilen Aleph çekirdeğiydi. Bu, aslında Paylaşılan Bellek uygulaması olan limanlar kavramını getirdi. Aleph'te, çekirdek bellek ve limanlar da dahil olmak üzere donanıma erişim sağlamak için azaltılmışken, port sistemini kullanan geleneksel programlar cihaz sürücülerinden kullanıcı programlarına kadar tüm davranışları uyguluyordu. Bu konsept çekirdeğin boyutunu büyük ölçüde azalttı, kullanıcıların farklı sürücüleri yalnızca onları yükleyerek ve çalışma zamanında birbirine bağlayarak deney yapmalarını sağladı. Bu, aksi halde makinenin yeniden başlatılmasını gerektiren yeni işletim sistemi kodunu geliştirirken oluşan sorunları büyük ölçüde azaltıyordu. Küçük bir çekirdeğin ve harici sürücülerin genel konsepti bir mikrokernel olarak anıldı.
Aleph, Data General Eclipse mini bilgisayarlarda uygulandı ve sıkıca bağlıydı. Programlar arasında kopyalanması gereken önemli bir performans masrafı gerektirdiği için bu makine idealden çok uzaktı. Ayrıca oldukça pahalıydı. Bununla birlikte, Aleph temel sistemin sağlam olduğunu kanıtladı ve bellekleri erken bir Ethernet arabirimi üzerinden kopyalayarak bilgisayar kümesi göstermeye devam etti. Bu kavram, Aleyn'i PERQ iş istasyonuna adapte eden Carnegie-Mellon'da toplandı ve "on-copy-on-write" kullanılarak gerçekleştirildi. Bağlantı noktası başarılıydı, ancak sonuçta ortaya çıkan Accent çekirdeği, mevcut yazılımı çalıştırmadığı için pratik kullanım açısından sınırlıydı. Dahası, Accent, Aleph'in Eclipse'e bağlı olduğu gibi PERQ'ya da sıkıca bağlıydı.
Bu zamana dek yeni nesil merkezi işlemciler (CPU) 32-bit adres alanlarını ve isteğe bağlı olarak bir bellek yönetim birimini (MMU) destekleyen pazara sunuluyordu. MMU, çeşitli programlar tarafından hangi bellek sayfalarının kullanıldığını takip ederek bir sanal bellek (VM) sistemini uygulamak için gereken talimatları ele aldı. Bu, VM tarafından kullanılan yazma mekanizması üzerindeki kopyayı kullanarak, bağlantı noktası kavramına yeni bir çözüm önerdi. Programlar arasında veri kopyalamak yerine, gönderilmesi gereken tek şey, MMU'ya aynı belleğe erişim sağlamak için talimat vermek için gereken veriydi. Bu sistem, işlemler arası iletişim sistemini dramatik olarak daha yüksek performans ile uygulayacaktı.
Gelişim
Mach, başlangıçta mevcut 4.2BSD çekirdeğine yazılan ek kod olarak barındırıldı ve ekibe tamamlanmadan çok önce sistem üzerinde çalışmasına izin verdi. İş, zaten işlevsel olan Accent IPC / port sistemiyle başlamış ve OS, görevler, ipliklerin ve sanal belleğin diğer önemli bölümlerine geçmiştir. Bölümler tamamlandığında, BSD sisteminin çeşitli kısımları Mach çağrısı için yeniden yazılmış ve bu süreçte 4.3BSD'de bir değişiklik yapılmıştır.
1986'ya gelindiğinde, sistem DEC VAX'de kendi başlarına çalışabilme noktasına kadar tamamlandı. Pratik değeri az da olsa yaparak bir mikrokernel yapmak hedefi gerçekleştirildi. Kısa süre IBM PC / RT'de ve Sun Microsystems 68030 tabanlı iş istasyonlarında sistemin taşınabilirliğini kanıtlayan sürümler izledi. 1987 yılına gelindiğinde, Mach, çok işlemcili sistemlerde çalışabilme yeteneğini test eden Encore Multimax ve Sequent Balance makineleri içeriyordu. O yıl bir Halka Açık Release 1 yapıldı ve Release 2 gelecek yıl izledi.
Bu süre boyunca "gerçek" bir mikrokernel sözü henüz teslim edilmedi. Bu erken Mach sürümleri, çekirdekte 4.3BSD'nin çoğunluğunu, yani POE Sunucusu olarak bilinen bir sistemi içeriyordu ve sonuçta aslında dayandığı UNIX'den daha büyük bir çekirdek çıktı. Bununla birlikte, bu düşünce, UNIX katmanını çekirdeğin dışına taşımak, daha kolay üzerinde çalışılabilecek ve tamamen değiştirilebilen kullanıcı alanına taşınmaktı. Maalesef performansın büyük bir problem olduğu ortaya çıktı ve bu sorunu çözmek için bir takım mimari değişiklikler yapıldı. Unwisony UNIX lisanslama sorunları da araştırmacıları mahvediyordu, bu nedenle lisanssız UNIX benzeri bir sistem ortamı sağlama çabası Mach'ın daha da geliştirilmesine devam etti.
Ortaya çıkan Mach 3, 1990 yılında serbest bırakıldı ve yoğun ilgi yarattı. Küçük bir ekip Mach'i inşa etmiş ve onu eski stil çekirdeği için ciddi sorunlara neden olan karmaşık çok işlemcili sistemler de dahil olmak üzere bir dizi platforma taşıdı. Bu durum, bir takım şirketlerin değişen donanım platformlarını düşündüğü ticaret pazarında büyük ilgi yarattı. Mevcut sistem Mach üzerinde çalıştırılacak olursa, altındaki platformun değiştirilmesi kolay olurdu.
Açık Yazılım Vakfı (OSF), Mach 2.5'in gelecekteki OSF / 1 sürümlerine ev sahipliği yapacaklarını ve Mach 3'ü araştırdığında, Mach, görünürlük konusunda büyük bir artış gördü. Mach 2.5, NeXTSTEP sistemi ve çok sayıda çok işlemcili satıcılar için de seçildi. Mach 3, IBM'in Workplace OS'leri ve Apple tarafından klasik Mac OS'un çapraz platform versiyonunu oluşturma çabaları da dahil olmak üzere, mikrokernel için diğer işletim sistemleri parçalarının taşınması için çok sayıda çaba gösterdi.
Mach
Bu deneysel çekirdeklerle Mach arasındaki en büyük değişiklik, Accent ileti geçişi kavramları üzerinde mevcut 4.2BSD çekirdeğinin bir sürümünü yeniden uygulamaya koyma kararıydı. Böyle bir çekirdek mevcut BSD yazılımıyla ikili olarak uyumlu olacak ve sistem yararlı bir deney platformu olmasına rağmen günlük kullanım için hemen yararlı olacaktır. Ek olarak yeni çekirdek, çoklu işlemci mimarilerini (mesajlaşma sistemi) desteklemek için baştan tasarlanacak, hatta heterojen kümelerin oluşturulmasına izin verecekti. Sistemi mümkün olduğunca çabuk bir hale getirmek için, sistem mevcut BSD koduyla başlayarak ve süreçlerarası iletişim temelli (IPC tabanlı) programlar olarak biraz uygulayarak uygulanacaktır. Böylece Mach, mevcut UNIX sistemlerine benzer bir monolitik sistem olarak başlayacak ve zamanla mikrokernel konseptine doğru daha fazla gelişecektir.
Mach, büyük ölçüde UNIX tabanlı, son derece taşınabilir bir Accent oluşturmak için çaba harcamaya başladı. Sonuç jenerik kavramların kısa bir listesiydi:
bir "görev", "iş parçacıkları" nın çalışmasına olanak tanıyan bir dizi sistem kaynağından oluşan bir nesnes
bir "iş parçacığı", tek bir yürütme birimidir, bir görev bağlamında bulunur ve görev kaynaklarını paylaşır
bir "port", görevler arasındaki iletişim için korunan bir mesaj sırasıdır; görevlerin kendi gönderme hakları vardır ve her limana hak edinirler
"Mesajlar", yazılan veri nesnelerinin koleksiyonlarıdır, yalnızca portlara gönderilebilir.
Mach, Accent'in IPC konseptleri üzerine geliştirildi, ancak sistemin doğasında UNIX benzeri bir yapıya kavuştu; UNIX programlarını çok az veya hiç değiştirmeden bile çalıştırabiliyordu. Bunu yapmak için Mach, bir iki yönlü IPC'nin uç noktalarını temsil eden bir bağlantı noktası kavramını başlattı. Ports, UNIX altında dosyalar gibi güvenlik ve haklara sahipti ve UNIX benzeri bir koruma modelinin uygulanmasına izin veriyordu. Buna ek olarak, Mach, kullanıcı alanı programlarının donanım ile etkileşim kurma gibi şeyleri işlemesine izin vermek için herhangi bir programın yalnızca normalde işletim sistemine verilen ayrıcalıkları ele almasına izin verdi.
Mach ve UNIX gibi işletim sistemi yine birincil olarak bir araç koleksiyonu haline gelir. UNIX'de olduğu gibi, Mach da donanımla uğraşmak için bir sürücü kavramını tutar. Bu nedenle, mevcut donanım için tüm sürücüler mikro çekirdek içine dahil edilmelidir. Donanımsal Soyutlama Katmanı veya ekokernellere dayanan diğer mimariler sürücüleri mikrokernelden çıkarabilir.
UNIX ile temel fark, dosyalarla işleyen araçların yerine, herhangi bir "görev" i gerçekleştirebilmesidir. Daha fazla işletim sistemi kodu çekirdekten ve kullanıcı alanına taşınarak çok daha küçük bir çekirdeğe ve mikrokernel teriminin yükselmesine neden oldu. Geleneksel sistemlerin aksine, Mach altında bir süreç veya "görev", bir takım iş parçacıklarından oluşabilir. Modern sistemlerde bu yaygın olsa da, görevler ve konuları bu şekilde tanımlayan ilk sistem Mach'tir. Çekirdek işi aslında işletim sisteminden "yardımcı programları" korumaya ve donanıma erişimi zamanlamaya indirgendi.
Limanların varlığı ve IPC kullanımı belki Mach ve geleneksel çekirdekler arasındaki en temel farktır. UNIX altında çekirdeği çağırmak, sistem çağrısı veya tuzak olarak bilinen bir işlemi içerir. Program, verileri hafızadaki iyi bilinen bir yere yerleştirmek için bir kitaplık kullanıyor ve daha sonra bir hata, bir hata türü neden oluyor. Sistem ilk başlatıldığında çekirdek tüm arızaların "işleyicisi" olarak ayarlanır, bu nedenle program bir arızaya neden olduğunda çekirdek devralır, iletilen bilgiyi inceler ve talimatları yerine getirir.
Mach altında, bunun yerine IPC sistemi kullanıldı. Sistem işlevselliğini çağırmak için, bir program çekirdeğe bir porta erişim isteyip o porta mesaj göndermek için IPC sistemini kullanır. Mesajlar, diğer çekirdeklerde olduğu gibi sistem çağrıları tarafından tetiklenmesine rağmen, Mach altında gerçek talebi işleyen tüm çekirdeklerin çoğu başka bir programa kalmıştı.
Konu ve eşzamanlılık desteği IPC mekanizmalarıyla iletilen mesajdan yararlanıyordu, çünkü görevler şimdi mesaj işleme sırasında Mach'ın donması ve dondurulamayacağı birden çok kod iş parçacıklarından oluşuyordu. Bu, sistemin birçok Mach işlemcisinde olduğu gibi paylaşılan belleği kullanarak birden çok işlemciye dağıtılmasını veya gerekirse iletiyi başka bir işlemciye kopyalamak için kod ekleyerek sistemin dağıtılmasına izin verdi. Geleneksel bir çekirdekte bunu uygulamak zordur; sistem, farklı programların aynı bellekte farklı işlemcilerden yazmaya çalışmadığından emin olmalıdır. Bununla birlikte, Mach bağlantı noktaları, hafıza erişimi süreci, bunu iyi tanımlanmış ve uygulanması kolaylaştırıyor ve bu sistemde birinci sınıf bir vatandaş haline geldi.
IPC sistemi başlangıçta performans sorunları yaşadı, bu nedenle etkiyi en aza indirmek için birkaç strateji geliştirildi. Öncülü Accent gibi Mach, mesajı bir programdan diğerine fiziksel olarak geçirmek için tek bir paylaşımlı bellek mekanizması kullandı. İletiyi fiziksel olarak kopyalamak çok yavaş olur, bu nedenle Mach bir verinin bir programdan diğerine çabucak eşleştirmek için makinenin bellek yönetim birimine (MMU) güvenir. Yalnızca veriler yazılıyorsa, fiziksel kopyalanması gerekir, "yazma sırasında kopyalama" adı verilen bir işlemdir.
Sistemin oluşturduğu birçok programdan birinin çökmesini önlemek için, mesajların çekirdek tarafından geçerliliği de kontrol edildi. Limanlar, UNIX dosya sistemi kavramlarına kasten modellendi. Bu, kullanıcının var olan dosya sistemi gezinme kavramlarını kullanarak bağlantı noktalarını bulmasını ve dosya sisteminde olduğu gibi hak ve izinleri atamasına izin verdi.
Performans sorunları
Mach orijinalde klasik monolitik UNIX'in yerini alması amaçlandı ve bu nedenle birçok UNIX benzeri fikir içeriyordu. Örneğin, Mach, UNIX dosya sisteminde desenli bir izin ve güvenlik sistemi kullandı. Çekirdek, diğer işletim sistemi sunucularına ve yazılımlara göre ayrıcalıklı olduğundan, sisteme zarar verebilecek komutları hatalı veya kötü amaçlı programlar göndermek mümkündür ve bu nedenle çekirdek her iletiyi geçerlilik için kontrol etmiştir. Ek olarak, işletim sistemi işlevselliğinin birçoğu kullanıcı uzayı programlarında yer almaktı, bu nedenle çekirdek bu programları, örneğin donanım üzerinde çalışmak için ek ayrıcalıklar tanımak için bir yol olması gerektiği anlamına geliyordu.
Mach'ın daha ezoterik özelliklerinden bazıları aynı IPC mekanizmasına dayanıyordu. Örneğin, Mach çok işlemcili makineleri kolaylıkla destekleyebildi. Geleneksel bir çekirdekte, farklı işlemciler üzerinde çalışan programlar çekirdeği aynı anda arayabildikçe, onu yeniden giren veya kesilebilir kılmak için kapsamlı çalışmalar yapılmalıdır. Mach altında, işletim sisteminin bitleri, başka herhangi bir programda olduğu gibi herhangi bir işlemcide çalıştırılabilen sunucularda izole edilir. Teorik olarak Mach çekirdeği yeniden girilebilir olmalıydı, pratikte bu bir sorun değil, çünkü yanıt süreleri o kadar hızlı ki sırasıyla bekleyip hizmet edebiliyor. Mach, sadece programları değil, aynı zamanda 1980'lerin sonunda ve 1990'ların başında yoğun bir gelişme alanı olan ağ üzerinden mesajları iletecek bir sunucu içeriyordu. Hemen hemen tüm görevler için IPC kullanımı ciddi bir performans etkisine sahip olduğu ortaya çıktı. 1997 donanımındaki benchmarklar, Mach 3.0 tabanlı UNIX tek sunucu uygulamalarının yerel UNIX'ten% 50 daha yavaş olduğunu gösterdi.
Araştırmalar, bu performans vuruşunun büyük çoğunluğunun bir ölçütle% 73'ünün IPC'nin yükünden kaynaklandığını gösterdi. Bu, işletim sistemini sağlayan tek bir büyük sunucuya sahip bir sistem üzerinde ölçüldü; işletim sisteminin daha küçük sunuculara indirilmesi sorunu daha da kötüye götürecekti. Sunucular topluluğunun hedefinin mümkün olmadığı anlaşıldı.
Mach ve Mach benzeri mikro çekirdeklerin performansını artırmak için birçok girişimde bulunuldu, ancak 1990'ların ortalarından itibaren yoğun ilgi çoktan öldü. IPC tabanlı bir işletim sistemi kavramı ölü gibi göründü, fikrin kendisi de hatalıydı. Aslında, performans sorunlarının kesin doğası üzerine daha fazla çalışma, bir takım ilginç gerçekleri ortaya çıkardı. Birincisi, IPC'nin kendisi değildi: desteklemek için ihtiyaç duyulan bellek eşleştirmesiyle ilgili bir miktar yük vardı, ancak bu, görüşme yapmak için yalnızca küçük bir süre kaldı. Geriye kalan, zamanın% 80'i harcanmıştı, mesajlar çekirdeğin ek görevleri nedeniyle gerçekleşiyordu. Bunların başında, liman hakları kontrolü ve mesaj geçerliliği oldu. 486DX-50'de standart olarak UNIX sistem çağrısı tamamlanması ortalama 21μs (mikrosaniye) alırken, Mach IPC ile eşdeğer işlem 114μs ortalaması aldı. Bunun sadece 18μs'si donanım ile ilgili idi; Geri kalanı, mesaj üzerinde çeşitli rutinleri çalıştıran Mach çekirdeğiydi. Hiçbir şey yapmayan bir sistem çağrısı altında, BSD altında tam bir gidiş-dönüş yaklaşık 40μs gerektirirken, bir kullanıcı-alanı Mach sisteminde ise hemen hemen 500μs alacaktır.
Mach ilk kez 2. x sürümlerinde ciddi olarak kullanıldığında, performans geleneksel monolitik işletim sistemlerinden daha düşük, belki de% 25 gibi daha yüksekti. Bu maliyet, özellikle endişe verici olarak düşünülmedi, çünkü sistem ayrıca çoklu işlemci desteği ve kolay taşınabilirlikli idi. Birçoğu, bunun beklenen ve kabul edilebilir bir ödeme maliyeti olduğunu düşünüyordu. Mach 3 işletim sisteminin çoğunu kullanıcı alanına taşımaya çalışırken yük daha da yükseldi: MIPS R3000'de Mach ve Ultrix arasındaki benchmarklar bazı iş yüklerinde% 67 gibi büyük bir performans vuruşu gösterdi.
Örneğin, sistem saatinin alınması, sistem saatini tutan kullanıcı alanı sunucusuna yapılan bir IPC çağrısını içerir. Arayan ilk olarak çekirdek içine kapanıp, bir bağlam anahtarı ve bellek eşlemesine neden olur. Çekirdek daha sonra arayanın erişim haklarına sahip olduğunu ve mesajın geçerli olduğunu kontrol eder. Varsa, kullanıcı alanı sunucusundaki aramayı tamamlamak için başka bir bağlam anahtarı ve bellek eşlemesi var. Ardından, toplam dört içerik anahtarı ve bellek eşlemesi ve artı iki ileti doğrulaması ekleyerek sonuçları döndürmek için işlem tekrarlanmalıdır. Bu yük daha çok sunuculardan geçen kod yollarının olduğu daha karmaşık hizmetler ile hızla oluşur.
Performans sorunlarının tek kaynağı bu değildi. Bir diğeri, fiziksel hafıza azalıp sayfalama yapılması durumunda hafızayı düzgün bir şekilde kullanmaya çalışmanın problemleri üzerine odaklandı. Geleneksel monolitik işletim sistemlerinde yazarlar, çekirdeğin hangi kısmının hangi kişilere çağrıldığının doğrudan tecrübesine sahipti; bu da, daha önce kullanılacak kodu çağırma kodundan kaçınmak için çağrı cihazlarını ince ayarlamalarını sağladı. Mach altında bu mümkün olmadı, çünkü çekirdek işletim sisteminin neye ait olduğunu bilmiyordu. Bunun yerine, performans sorunlarına eklenen tek bir boyutta uyan tek bir çözüm kullanmaları gerekiyordu. Mach 3, daha iyi uzmanlık için kullanıcı alanı çağrı cihazlarına dayanan basit bir çağrı cihazı sağlayarak bu soruna hitap etmeye çalıştı. Ama bu çok az etkiye sahip olduğu ortaya çıktı. Pratikte, sahip olduğu tüm avantajlar, onu aramak için gereken pahalı IPC tarafından silinmişti.
Diğer performans sorunları, Mach'ın çoklu işleme sistemlere olan desteği ile ilgiliydi. 1980'lerin ortalarından 1990'lı yılların başına kadar, emtia işlemcileri yılda yaklaşık% 60 oranında performans göstermiş, ancak hafıza erişim hızı yılda yalnızca% 7 oranında büyümüştür. Bu, belleğe erişmenin maliyetinin bu dönemde muazzam bir biçimde büyüdüğü anlamına gelir ve Mach, programlar arasında bellek haritalamaya dayandığı için, herhangi bir "cache miss", IPC çağrılarını yavaşlatır.
Mach yaklaşımının avantajlarından bağımsız olarak, bu tür gerçek dünya performans vuruşları kabul edilemezdi. Diğer takımlar aynı sonuçları bulduklarında, erken Mach heyecanı hızla kayboldu. Kısa bir süre sonra, kalkınma topluluğunda birkaçı, bir işletim sisteminin temeli olarak IPC'yi kullanma konseptinin tamamının hatalı olduğu sonucuna varmış görünüyordu.
Potansiyel çözümler
Mach 3 sistemleri için IPC yükü önemli bir sorundur. Bununla birlikte, çoklu sunucu işletim sistemi kavramı hala umut vericidir, ancak yine de biraz araştırma gerektirmektedir. Geliştiricilerin, sunucudan sunucuya çağrı yapılmayan modüllere kod ayırmak için dikkatli olmaları gerekir. Örneğin, ağ kodunun çoğunluğu tek bir sunucuya yerleştirilir, böylece normal ağ görevleri için IPC'yi en aza indirir.
Çoğu geliştirici, işletim sistemi işlevselliğini sağlayan tek bir büyük sunucunun orijinal POE konseptini sıkıştı. Geliştirmeyi kolaylaştırmak için, işletim sistemi sunucusunun kullanıcı alanında veya çekirdek alanında çalışmasına izin verdiler. Bu, kullanıcı alanlarında gelişmelerine, orijinal Mach fikrinin tüm avantajlarına sahip olmalarına ve ardından daha iyi bir performans elde etmek için hata ayıklanmış sunucuyu çekirdek alanına taşıdıklarına izin verdi. Ardından Lite, MkLinux, OSF / 1 (Digital Unix) ve NeXTSTEP / OPENSTEP / macOS gibi co-location olarak bilinen bu yöntemi kullanarak çeşitli işletim sistemleri kuruldu. ChorusOS mikrokerneli, sunucuları yerleşik mekanizmaları kullanarak çekirdek alanına yükseltmek için bunu temel sistemin bir özelliği yaptı.
Mach 4, bu kez daha radikal bir yükseltme seti ile bu sorunları çözmeye çalıştı. Özellikle, program kodunun genellikle yazılabilir olmadığı, dolayısıyla yazma sırasında kopyalama nedeniyle potansiyel isabetlerin düşük olduğu bulundu. Bu nedenle, IPC için programlar arasında hafızayı haritalamak değil, bunun yerine kullanılan program kodunu programın yerel alanına geçirmek mantıklıydı. Bu, "mekik" kavramının ortaya çıkmasına neden oldu ve performans düzelmiş gibi görünüyordu, ancak geliştiriciler yarı kullanılabilir bir durumda sistemle ilerlemişti. Mach 4 aynı zamanda çekirdeğin kendisinin bir parçası haline getiren dahili eş konum ilkellerini tanıttı.
1990'ların ortalarından itibaren mikrokernel sistemlerinde yapılan çalışmalar büyük oranda durdu, ancak piyasa genel olarak tüm modern işletim sistemlerinin 1990'lı yıllara dayanan mikrokernel olacağına inandığını belirtti. Mach çekirdeğinin birincil olarak kalan yaygın kullanımı, Apple'ın macOS'udur. OSF / 1'de de kullanılan "XNU" olarak adlandırılan yoğun bir şekilde değiştirilmiş bir hibrid Open Software Foundation Mach Çekirdeği'nin (OSFMK 7.3) üstünde çalışan kardeşi iOS'tur. XNU'da dosya sistemleri, ağ yığınları, işlem ve bellek yönetimi işlevleri çekirdekte uygulanır; ve dosya sistemi, ağ iletişimi ve bazı işlem ve bellek yönetimi işlevleri mesaj geçirmeden ziyade sıradan sistem çağrıları yoluyla kullanıcı modundan çağrılır. XNU Mach mesajları, kullanıcı modu süreçleri arasındaki iletişim için ve bazı istekler için kullanıcı modu kodundan çekirdeğe ve çekirdekten kullanıcı modu sunucularına kullanılır.
İkinci nesil mikro çekirdekler
Daha fazla analiz, IPC performans sorununun göründüğü kadar açık olmadığını göstermiştir. Aynı sistemde çalışan tek bir tarafın BSD'nin altında 20μs, Mach için de 114μs sürdürdü. 114'ün 11 tanesi, BSD'ye benzer bağlam anahtarı yüzünden vardı. Kullanıcı-alanı ve çekirdek alanı arasında mesajın haritalandırılması için MMU tarafından ek 18 bulundu. Bu, geleneksel sistem çağrılarından daha uzun olmakla birlikte yalnızca 29μs'ye kadar artırır, ancak çok fazla değildir.
Gerisi, asıl sorunun büyük kısmı, çekirdeğin liman erişim haklarını kontrol etmek gibi görevleri yerine getirmesi nedeniyle meydana gelmiştir. Bu, önemli bir güvenlik kaygısı gibi görünse de, aslında mantıklıdır. Örneğin, bir cep telefonunu veya robotu çalıştıran tek kullanıcılı bir işletim sistemi, bu özelliklerden hiçbirine ihtiyaç duymayabilir ve Mach'ın seçim ve seçme işletim sisteminin en değerli olacağı bir türden sistemdir. Aynı şekilde Mach, işletim sistemi tarafından bellek taşındığında sorunlara neden oldu, başka bir görev de sistemin birden fazla adres alanına sahip olması durumunda gerçekten mantıklı geliyor. DOS ve eski Mac OS, tüm programlar tarafından paylaşılan tek bir geniş adres alanına sahiptir, bu nedenle bu sistemlerde haritalama hiçbir fayda sağlamaz.
Bu gerçekleştirmeler, sistemin karmaşıklığını daha da düşüren ve kullanıcı alanına neredeyse tüm işlevselliği yerleştiren bir dizi ikinci nesil mikro çekirdeğin ortaya çıkmasına neden oldu. Örneğin, L4 çekirdeği (sürüm 2) yalnızca yedi sistem çağrısını içerir ve 12k bellek kullanır, Mach 3 ise yaklaşık 140 işlev içerir ve yaklaşık 330k bellek kullanır. Bir 486DX'de L4 altında IPC çağrıları -50 aynı sistemde bir UNIX sistem çağrısından daha hızlıdır, sadece 5 μs sürer ve Mach'ın 20 katından daha hızlıdır. Tabii ki bu, L4'ün izin veya güvenlikle uğraşmadığını göz ardı eder; ancak bunu kullanıcı alanı programlarına bırakarak, ihtiyaç duydukları kadar yük kadar veya az yük seçebilirler.
L4'ün potansiyel performans kazançları, kullanıcı-alanı uygulamalarının sıklıkla çekirdek tarafından daha önce desteklenen işlevlerin birçoğunu sunması gerektiği gerçeğine dayanır. Uçtan uca performansı test etmek için, birlikte konumlandırılmış modda MkLinux, kullanıcı alanında çalışan bir L4 portuyla karşılaştırıldı. L4, Mach'ın% 15'ine kıyasla, yaklaşık% 5 ila% 10 ek yük getirdi, çift bağlamlı anahtarlar gerekli görüldüğünde ilginçti. Bu yeni mikro çekirdekler endüstriyi bir bütün olarak yeniden canlandırdı ve sonuç olarak GNU Hurd gibi projeler yeni bir ilgi gördü.
Mach üzerin yazılımlar
Mach ve işletim sistemlerinden türetilmiş işletim sistemi çekirdeklerinin Mach'in türemiş çekirdekli listesi: