Mach (çekirdek)
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.