Apple Darwin OS ve XNU çekirdeğinin derinlemesine analizi
(tansanrao.com)- Apple'ın Darwin işletim sistemi, macOS, iOS ve diğer modern Apple işletim sistemlerinin temelini oluşturan Unix tabanlı çekirdek bileşenidir
- Bunun merkezinde, adı "X is Not Unix" olan hibrit bir çekirdek olan XNU bulunur
- Mach mikroçekirdeğinin yapısını BSD Unix unsurlarıyla birleştirerek performans ile modülerliği dengeli biçimde hayata geçirir
- Bu yazı, Mach ve BSD'nin kökenlerinden başlayıp Apple Silicon üzerindeki en güncel evrimine kadar Darwin ve XNU'nun yapısal gelişim sürecini açıklar
- Çekirdeğin temel bileşenlerini (IPC, zamanlama, bellek yönetimi, sanallaştırma vb.) ve modern donanıma uyumunu analiz eder
Mach mikroçekirdeğinin kökeni (1985–1996)
- Mach, 1985 yılında Carnegie Mellon University'de Richard Rashid ve Avie Tevanian tarafından başlatıldı
- UNIX çekirdeğinin karmaşıklığını azaltmak için yalnızca temel işlevleri sunan bir mikroçekirdek olarak tasarlandı
- Bellek yönetimi, thread tabanlı zamanlama, mesaj tabanlı IPC gibi yalnızca düşük seviyeli işlevleri sunar; dosya sistemi, ağ gibi bileşenleri ise kullanıcı alanı sunucularına ayırır
- Mach 2.5, performansı iyileştirmek için bazı BSD çekirdek kodlarıyla birlikte çekirdek alanında çalıştı
- Mach 3.0, gerçek bir mikroçekirdeğe dönüşürken BSD'nin bellek yönetimini de etkiledi
- Mach, task ve thread kavramlarını tanıttı ve verimli bir sanal bellek modeli uyguladı
- NeXT (1985'te Steve Jobs tarafından kuruldu), Mach 2.5 + 4.3BSD tabanlı NeXTSTEP OS'yi geliştirdi
- NeXTSTEP'in çekirdeği, Mach ve BSD'yi çekirdek alanında birleştirerek hibrit bir yapı oluşturdu
- Sürücüler, Objective-C tabanlı DriverKit ile geliştirildi ve nesne yönelimli bir yaklaşım denendi
- Apple, 1996'da NeXT'i satın alarak NeXTSTEP ile Mach/BSD tabanlı XNU çekirdeğini devraldı
- Mac OS X'in ilk sürümleri (Rhapsody), NeXT'in çekirdek yapısı temel alınarak geliştirildi
Mac OS X'in ilk evrimi (1997–2005)
- Apple, OSFMK 7.3 tabanlı Mach 3.0 kodunu XNU'ya entegre etti ve BSD katmanını FreeBSD ile 4.4BSD kodlarıyla güncelledi
- Performans iyileştirmesi ve daha geniş donanım desteği için BSD ve Mach işlevlerini gömülü tutan hibrit yapı korundu
- Yeni sürücü çatısı I/O Kit tanıtıldı: Objective-C yerine C++ tabanlı yapı kullanılarak performans optimize edildi ve hot-plug desteği sağlandı
- Başlıca sürüm özellikleri özeti:
- 10.1 Puma (2001): Gerçek zamanlı thread desteği, performans iyileştirmeleri
- 10.2 Jaguar (2002): IPv6, IPSec, Bonjour, HFS+ journaling eklendi
- 10.3 Panther (2003): FreeBSD 5 tabanlı çekirdek iyileştirmeleri, çok çekirdek desteği için fine-grained locking eklendi
- XNU, PowerPC'yi yerel olarak desteklerken gelecekteki geçişe hazırlanmak için x86 destek kodunu da korudu
- 10.4 Tiger (2005): UNIX 03 sertifikası alındı, Intel geçişinin temeli hazırlandı,
kqueue/keventolay sistemi eklendi
64 bit, çok çekirdek ve iPhone OS dönemi (2005–2010)
- 10.5 Leopard (2007):
- x86_64 desteği ve 64 bit sürücü imkânı
- ASLR, sandbox, DTrace gibi güvenlik ve hata ayıklama özellikleri güçlendirildi
- PowerPC için son resmî destek
- iPhone OS 1 (2007):
- Darwin 9 tabanlı, XNU'nun ARM'e taşınmış hali
- Bellek yetersizliği durumlarına karşı Jetsam mekanizması eklendi
- Tam uygulama sandbox'ı ve zorunlu kod imzalama getirildi
- 10.6 Snow Leopard (2009):
- Yalnızca Intel, tamamen 64 bit çekirdek desteği
- Grand Central Dispatch eklendi: çekirdekle birlikte çalışan, kullanıcı alanı görev paralelleştirme çatısı
- OpenCL entegrasyonu ve GPU hesaplama desteği
- iOS 4 (2010):
- Çoklu görev ve öncelik tabanlı zamanlama eklendi (arka plan/ön plan ayrımı)
macOS ve iOS'un modernleşmesi (2011–2020)
- 10.8~10.9 (2012–2013):
- RAM kullanımını optimize etmek için Compressed Memory eklendi
- Timer Coalescing ile CPU güç tasarrufu güçlendirildi
- App Nap, QoS gibi enerji verimliliği odaklı zamanlama geliştirmeleri yapıldı
- 10.10~10.11 (2014–2015):
- SIP (System Integrity Protection) eklendi: root yetkisiyle bile sistem dosyaları değiştirilemez hale geldi
- watchOS, tvOS gibi farklı cihazlarda XNU'nun genişletilebilirliği sağlandı
- ARM64 desteği ve 32 bit ARM'in kaldırılmasına hazırlık başladı
- 10.12~10.14 (2016–2018):
- Dosya sistemi APFS (Apple File System)'e geçirildi
- Snapshot, cloning ve şifreleme desteği eklendi
- kext güvenliği sıkılaştırıldı: kullanıcı onayı zorunlu oldu, kod imzalama denetimleri güçlendirildi
- 10.15 Catalina (2019):
- DriverKit tanıtıldı: sürücüler kullanıcı alanında çalıştırılmaya başlandı (mikroçekirdek felsefesine dönüş)
- Sistem birimi salt okunur olarak ayrılarak güvenlik güçlendirildi
Apple Silicon dönemi (2020–günümüz)
-
macOS 11 Big Sur (2020):
- ARM64 tabanlı Apple Silicon (M1) desteği
- big.LITTLE CPU zamanlama desteği: QoS temelli olarak verimlilik/performans çekirdeklerine dağıtım
- Mach VM yapısı birleşik bellek mimarisi için uygun hale geldi
-
Güvenlik ve sanallaştırmanın güçlendirilmesi:
- PAC (pointer authentication), MTE (memory tagging) gibi ARM donanım güvenlik özellikleri destekleniyor
- Apple Silicon'ın hypervisor yeteneklerine dayalı yeni bir sanallaştırma çatısı tanıtıldı
- macOS üzerinde geliştiriciler için hafif VM'ler çalıştırılabiliyor (kullanıcı alanı denetimiyle)
-
Birleşik platform yapısı:
- XNU, macOS, iOS, watchOS, tvOS, bridgeOS, visionOS dahil tüm Apple platformlarında çekirdek olarak kullanılıyor
- Mach'ın platform soyutlama yapısı sayesinde farklı CPU mimarilerine kolayca uyum sağlanabiliyor
XNU'nun başlıca tarihçesinin özeti
- 1989 - NeXTSTEP 1.0 - Mach 2.5 + BSD tabanlı XNU hibrit yapısı tanıtıldı
- 1996 - Apple, NeXT'i satın aldı - Mach 3.0 + FreeBSD tabanlı Rhapsody geliştirmesi başladı
- 2001 - Mac OS X 10.0 - XNU çekirdek yapısı oturdu ve ilk performans iyileştirmeleri yapıldı
- 2005 - 10.4 Tiger - UNIX sertifikası, Intel geçişine hazırlık
- 2007 - 10.5 Leopard - 64 bit desteği, güvenlik özelliklerinin güçlendirilmesi, iPhone OS'nin ortaya çıkışı
- 2009 - 10.6 Snow Leopard - Tam Intel geçişi ve GCD'nin eklenmesi
- 2011 - 10.7 Lion - 64 bit çekirdeğin zorunlu hale gelmesi, sandbox kullanımının genişlemesi
- 2013 - 10.9 Mavericks - Bellek sıkıştırma ve QoS zamanlamasının eklenmesi
- 2015 - 10.11 El Capitan - SIP'in eklenmesi, watchOS gibi cihazlara genişleme
- 2017 - 10.13 High Sierra - APFS'nin varsayılan hale gelmesi, kext güvenliğinin güçlendirilmesi
- 2019 - 10.15 Catalina - DriverKit ile sürücülerin kullanıcı alanında çalıştırılması
- 2020 - 11 Big Sur - Apple Silicon desteği, yeni sanallaştırma yapısının eklenmesi
- 2022 - 13 Ventura - M1 Max gibi yüksek performanslı çekirdeklere uygun zamanlama iyileştirmeleri
- 2024 - 14 Sonoma - M2/M3 optimizasyonları ve Memory Tagging desteği
XNU çekirdeğinin yapısı ve tasarımı
Hibrit çekirdek tasarımı: Mach + BSD entegrasyonu
- XNU, hem mikroçekirdek (Mach) hem de monolitik çekirdek (BSD) özelliklerini taşıyan hibrit bir çekirdek yapısına sahiptir
- Mach, düşük seviyeli işlevleri (thread, bellek, IPC vb.) soyutlayıp modüler hale getirirken BSD, tüm UNIX sistem çağrılarını ve API'leri doğrudan çekirdek alanında çalıştırır
- BSD ve Mach, tek bir çekirdek ikilisi olarak linklenir ve aynı adres alanında çalışır
- Çekirdek içinde Mach işlevleri ve BSD işlevleri mesajlaşma olmadan doğrudan çağrılır; UNIX sistem çağrıları diğer Unix çekirdekleriyle benzer performans düzeyinde işlenir
- Örnek:
read()sistem çağrısı yapıldığında BSD dosya sistemi kodu doğrudan çekirdek içinde çalışır
Mach'ın rolü
- Thread, task yönetimi, context switch, zamanlama kuyrukları, timer gibi çekirdeğin temel altyapısını sağlar
- Mach portları üzerinden mesaj tabanlı IPC sunar (süreçler arası bellek paylaşımı ve büyük buffer aktarımı desteğiyle)
- Bellek nesneleri, copy-on-write optimizasyonu, adres alanı soyutlaması gibi gelişmiş sanal bellek yönetimi işlevlerini uygular
BSD'nin rolü
- Süreç ve PID, sinyal, kullanıcı kimliği, POSIX API, dosya sistemi, ağ yığını, UNIX IPC gibi UNIX işlevlerini sağlar
- FreeBSD tabanlı BSD kodundan türemiştir; OpenBSD/NetBSD işlevleri de içerir
- Güvenlik çatılarında (KAuth, MAC), sandbox, SIP, kod imzası doğrulama gibi güvenlik politikalarını uygular
- Sistem çağrılarının uygulanması:
fork()için Mach üzerinde VM kopyalanırken BSD tarafında dosya tanımlayıcıları kopyalanır - VFS, ağ, signal işleme, POSIX thread gibi UNIX işlevlerinin büyük kısmını üstlenir
I/O Kit
- Çekirdek alanında çalışan nesne yönelimli bir sürücü çatısıdır (C++ Embedded Subset kullanır)
- Aygıt hiyerarşisini tanımlar ve her sürücü bunu miras alarak uygular
- Kullanıcı alanından erişilebilen
user clientarayüzü sağlar - Çekirdek senkronizasyonu ve thread denetimi için Mach işlevlerini kullanır; dosya sistemi ve ağ sürücüleri BSD ile bağlanır
- Sürücüler Kext olarak dinamik biçimde yüklenebilir ve Mach-O biçiminde çekirdek belleğine alınır
Mach IPC ve mesaj aktarımı
- Mach portları, çekirdek ile kullanıcı alanı arasında veya kullanıcı süreçleri arasında başlıca IPC mekanizmasıdır
- Her süreç Mach portları üzerinden denetlenebilir;
launchdgibi sistem daemon'ları süreçleri portlar aracılığıyla kontrol eder - Grand Central Dispatch, XPC gibi macOS'un gelişmiş özellikleri Mach mesajları temelinde uygulanır
- Mach mesajları, port yetki sistemi sayesinde yüksek güvenlik sağlar; port aktarımı ve paylaşımlı bellek aktarımı mümkündür
- MIG (Mach Interface Generator), çekirdek ile kullanıcı arasında mesaj tabanlı RPC kodunu otomatik üretmek için kullanılır
- DriverKit, çekirdek ile kullanıcı alanı sürücüleri arasındaki iletişimi Mach IPC tabanlı olarak uygular
Zamanlayıcı ve thread yönetimi
- Mach tabanlı öncelik tabanlı round-robin zamanlayıcıdan evrilmiştir
- Her CPU'nun ayrı bir Run Queue'su vardır ve thread'ler öncelik temelli olarak zamanlanır
- iOS'un gelişiyle birlikte uygulama rolüne (arka plan/ön plan) göre zamanlama politikaları eklendi
- QoS (Quality of Service) sınıfı tabanlı zamanlama: kullanıcı etkileşimli, arka plan gibi iş türlerine göre öncelik ayarlanır
- Apple Silicon'da thread'ler QoS'e göre verimlilik çekirdeklerine veya yüksek performans çekirdeklerine atanır
- Gerçek zamanlı thread'ler (ör. ses işleme) gerçek zamanlı kuyruk üzerinden öncelikli çalışır; macOS 10.4'ten itibaren deadline scheduling desteklenir
- Güç yönetimiyle iş birliği: idle thread, timer birleştirme, düşük güç durumuna geçiş gibi yöntemlerle mobil performans optimize edilir
Bellek yönetimi ve sanal bellek
- Mach VM, XNU bellek sisteminin merkezindedir ve güçlü, esnek bir tasarıma sahiptir
- Sanal adres alanı copy-on-write temellidir;
fork()sırasında verimli bellek kopyalama sağlar - Bellek nesnesi (Memory Object) ve pager yapısı:
dynamic_pagerkullanıcı alanı daemon'u swap alanını yönetir- Dosya eşleme işlemleri çekirdek içinde vnode pager üzerinden yürütülür
- Mavericks'ten itibaren compressed memory eklendi: bellek yetersizliğinde sayfalar diske swap etmek yerine sıkıştırılarak tutulur
pmap: her mimari için fiziksel bellek ve page table'ları yöneten makineye bağımlı katman- Çekirdeğin ayrı bir adres alanı vardır; bazı bölgeler sabitlenmiş (
wired) bellek olarak ayarlanır - macOS, hata ayıklama amaçlı guard page, zero-fill allocation, bölmeli koruma gibi mekanizmalarla bellek güvenliğini güçlendirir
- Mach VM, paylaşımlı bellek ve inheritance ayarlarıyla framework paylaşımı gibi durumları verimli biçimde ele alır
- Apple Silicon'da GPU ile bellek alanı birleşiktir; bu nedenle Mach VM, bellek özelliklerine göre tahsisi optimize eder
Sanallaştırma desteği
- XNU'nun ilk dönemlerinde hypervisor işlevi yoktu, ancak OS X 10.10'dan itibaren Hypervisor.framework üzerinden sanallaştırma desteği başladı
- Intel tabanlı sistemlerde VT-x kullanılarak kullanıcı alanında VM çalıştırmak mümkün hale geldi
- ARM tabanlı Apple Silicon'da EL2 sanallaştırma yetenekleri Virtualization.framework ile kullanılır
- Çekirdek içindeki hypervisor, sanal bellek, vCPU trap işleme, zamanlama gibi görevleri üstlenir
- XNU'nun thread ve Mach task yapısı kullanılarak vCPU'lar host thread'ler olarak işlenir
- macOS, Rosetta 2 gibi x86 emülasyon işlevleri de sunar; syscall çevirisi ve ABI uyumluluğu sağlar
- iOS 15'ten itibaren sınırlı biçimde iOS'ta da sanallaştırmaya izin verilir (developer mode gerekir)
Güvenli işlem mimarisi
- Secure Enclave:
- Apple SoC içine entegre bağımsız bir güvenlik alt sistemidir
sepOSadlı ayrı bir mikroçekirdek çalıştırır ve biyometrik veriler, şifreleme anahtarları gibi verileri korur- Ana çekirdek tehlikeye girse bile yalıtılmış güvenlik işleme yapısını korur
- Exclaves:
- macOS 14.4 ve iOS 17'den itibaren eklenen yeni bir yalıtım alanıdır
- Apple ID kimlik doğrulaması, ses buffer'ları, sensör verileri gibi hassas kaynakları ana çekirdeğin dışındaki bir alana ayırır
ExclaveKextClient.kextgibi özel Kext'ler ve framework'lerle denetlenir- Çekirdek tehlikeye girse bile exclave alanı bağımsız olarak korunur
enclave, sistem içine dahil olan bir alanı;exclaveise sistem dışına bağlı ayrılmış bir alanı ifade eder
Sonuç
- XNU, mikroçekirdek ile monolitik çekirdeğin avantajlarını uzlaştıran pratik bir hibrit çekirdek yapısına sahiptir
- Mach'ın soyutlama katmanı, farklı CPU mimarilerine geçişi ve sistem genişlemesini mümkün kılarken BSD, POSIX uyumluluğu ve kararlı bir Unix ortamı sunar
- Apple, gerektiğinde işlevleri kullanıcı alanına ayırmak için Mach IPC'yi kullanırken çekirdek içini verimlilik için doğrudan bağlantılı tutar
- Sürücüler (user-space DriverKit), sanallaştırma (Hypervisor.framework), zamanlayıcı (QoS), bellek yönetimi (Compressed Memory) gibi çok katmanlı mimari sayesinde modern sistem gereksinimlerine esnek biçimde yanıt verir
- Darwin ve XNU, NeXTSTEP'ten başlayıp yüz milyonlarca Apple cihazının çekirdeğine dönüşmüş ve evrilmeyi sürdürmektedir
Henüz yorum yok.