2 puan yazan GN⁺ 2025-04-06 | Henüz yorum yok. | WhatsApp'ta paylaş
  • 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/kevent olay 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 client arayü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; launchd gibi 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_pager kullanı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
    • sepOS adlı 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.kext gibi ö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ı; exclave ise 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.

Henüz yorum yok.