# XNU
XNU, MacOS işletim sisteminde kullanılmak üzere Aralık 1996'dan beri Apple'da geliştirilen ve Darwin işletim sisteminin bir parçası olarak ücretsiz ve açık kaynaklı yazılım olarak piyasaya sürülen bilgisayar işletim sistemi çekirdeğidir. Ayrıca, iOS, tvOS ve watchOS işletim sistemlerinin çekirdeği olarak da kullanılır. XNU, "X is Not Unix"'in bir kısaltmasıdır.
NextStep işletim sistemi için NeXT tarafından geliştirilen XNU, Carnegie Mellon Üniversitesi'nde geliştirilen Mach çekirdeğinin 2.5 sürümünü 4.3BSD bileşenleri ve Driver Kit adlı sürücüleri yazmak için bir Objective-C API'si ile birleştiren karma bir çekirdekti.
Apple, NeXT'yi satın almasının ardından, Mach bileşeni OSF'den OSFMK 7.3'e yükseltildi, BSD bileşenleri FreeBSD projesinden alınan kodla yükseltildi ve Sürücü Kiti, G/Ç Kiti adı verilen sürücüleri yazmak için bir C++ API ile değiştirildi.


## Çekirdek tasarımı.
XNU hem monolitik çekirdeklerin hem de mikro çekirdeklerin özelliklerini içeren, her iki teknolojiden en iyi şekilde yararlanmaya çalışan melez bir çekirdektir; mikrokernellerin mesajlaşma yeteneği daha büyük modülerlik sağlar ve işletim sisteminin daha büyük bölümleri hafıza korumasından yararlanabilir.
2007 itibarıyla, XNU hem bir işlemci, hem de simetrik çoklu işlem (SMP) modelleri olan ARM, IA-32 ve x86-64 işlemciler üzerinde çalışmaktadır. PowerPC desteği, sürüm 10'dan itibaren kaldırılmıştır (Mac OS X Snow Leopard).


### Mach.
XNU çekirdeğinin temeli, ağır modifiye (melez) bir OSFMK 7.3 çekirdeğidir. Bu nedenle, bir işletim sisteminin çekirdeğini, ayrı bir süreç olarak çalıştırmak mümkündür; bu da büyük bir esneklik sağlar (Mach çekirdeğinin üzerinde paralel birkaç işletim sistemini çalıştırabilir). Ancak çekirdek / kullanıcı modu bağlam anahtarı ve çekirdeklerin adres alanları ile hizmet çağrı merkezleri arasındaki eşleme veya kopyalama mesajından kaynaklanan zamana bağlı çekirdek / kullanıcı modu nedeniyle genelde performansı düşürür. Mac OS X ile tasarımcılar bazı görevleri hızlandırmaya çalıştılar ve böylece BSD işlevselliği Mach ile çekirdeğe yerleştirildi. Sonuç, ağır bir şekilde değiştirilmiş (melez) OSFMK 7.3 çekirdeğidir; Apple, OSFMK 7.3 lisanslıdır, OSFMK 7.3, OSF'den bir mikrokerneldir. OSFMK 7.3, University of Utah Mach 4 çekirdeği ve orijinal Carnegie Mellon University Mach 3.0 mikro çekirdeğinden çıkarılan birçok Mach 3.0 varyantından geçerli kodun uygulanabilir kodunu içerir.


### BSD.
Çekirdekteki Berkeley Software Distribution (BSD) bölümü POSIX uygulama programlama arayüzü (API, BSD sistem çağrıları), Mach görevlerinin üstündeki Unix işlem modeli, temel güvenlik ilkeleri, kullanıcı ve grup kimlikleri, izinler, ağ protokolleri, sanal dosya sistemi kodu (bir dosya sistemi bağımsız günlük kaydı katmanı dahil), HFS / HFS Plus, Ağ Dosya Sistemi (NFS) istemcisi ve sunucusu, şifreleme çerçevesi, UNIX Sistem V işlemler arası iletişim (IPC), denetim alt sistemi, zorunlu erişim kontrolü ve bazı kilitleme ilkelleri gibi birkaç yerel dosya sistemidir. XNU'da bulunan BSD kodu FreeBSD çekirdeğinden geldi. Birçoğu önemli ölçüde değiştirilmiş olsa da, Apple ile FreeBSD Projesi arasında hala kod paylaşımı gerçekleşiyor.


### K32/K64.
XNU, Mac OS X Snow Leopard, v10.6 (Darwin sürüm 10) ve daha sonraki sistemde iki çeşittir; 32 bitlik bir sürüm olan K32 ve 64 bitlik bir sürüm olan K64. K32, kullanıcı arazisinde 64 bitlik uygulamaları çalıştırabilir. Mac OS X 10.6'da yeni olan şey, 64-bit çekirdek alanında XNU'yu çalıştırma yeteneğiydi. K32, Mac Pro ve Xserve modelleri dışındaki tüm makinelerde kullanıldığında 10.6 Server için varsayılan çekirdekti ve 2008'den itibaren ve 64 bit uygulamaları çalıştırabiliyordu. K64, K32'ye kıyasla birkaç avantaja sahiptir:
  - Bellek haritası 32-bit çekirdek alanının orantısız olarak geniş bir alanını tüketirken 32 GB'den fazla RAM yönetebilir.
  - Önbellek arabellek boyutları, 32-bit çekirdek alanının izin verdiğinden daha büyük olabilir, bu da g / Ç performansını potansiyel olarak artıracaktır.
  - Çekirdek, çok büyük doğrudan bellek erişimi (DMA) arabelleklerine sahip olsa bile 64-bit alanındaki tüm aygıtları eşleyebildiği için, yüksek performanslı ağ aygıtlarını veya çoklu grafik işlemci birimlerini (GPU) kullanırken performans artar.
6 ve 4'ü basılı tutarken önyükleme yapmak, 64-bit çekirdeği destekleyen makinelerde K64'i önyüklemeye zorlar. [11] K64 32-bit uygulamaları çalıştıracak, ancak 32-bit çekirdek uzantılarını (KEXT) çalıştırmayacaktır, böylece yükleyebilmek için bunlar K64'e taşınmalıdır.


### I/O Kit.
I/O Kit Embedded C ++ tabanlı C ++ alt kümesiyle yazılmış aygıt sürücüsü çerçevesidir. Nesne yönelimli tasarımını kullanarak, aygıt sürücülerinin daha az zaman ve kodla yazılmasına yardımcı olan, herhangi bir sürücüler sınıfında ortak olan özellikler çerçevede sağlanmaktadır. G / Ç Seti, çok dişli, simetrik çok işlemcili (SMP) güvenlidir ve çalışırken aygıtlara otomatik, dinamik aygıt yapılandırmasına olanak tanır.
Çoğu sürücü, kullanıcı alanından çalıştırılacak şekilde yazılabilir; bu da sistemin kararlılığını daha da geliştirir. Bir kullanıcı alanı sürücüsü çökerse, çekirdeği çökertmez. Bununla birlikte, bir çekirdek-alan sürücüsü çökerse çekirdeği çöker. Çekirdek alanı sürücülerine örnek olarak disk adaptörü ve ağ adaptörü sürücüleri, grafik sürücüleri, Evrensel Seri Veriyolu (USB) ve IEEE 1394 FireWire ana bilgisayar denetleyicileri için sürücüler ve VirtualBox, Mac için Parallels Desktop ve VMware Fusion gibi sanal makine yazılımı için sürücüler bulunur.


## Paylaşılan kaynakları koruma.
Çok işlemcili makinelerde güvenle çalıştırmak için, paylaşılan kaynaklara (dosyalar, veri yapıları vb.) Erişim dizileri veya işlemler aynı anda aynı kaynağı değiştirmeye çalışmaması için serileştirilmelidir. Atomik işlemler, spinlock'lar, kritik bölümler, karşılıklı dışlamalar ("muteksler") ve dizgelerin seri hale getirilmesi eşzamanlı erişimi önlemek için kullanılabilecek tüm yöntemlerdir. Linux ve FreeBSD'nin son sürümlerinde olduğu gibi, XNU, Mac OS X 10.4 ve Darwin 8.0 itibarıyla çok işlemcili sistemlerde daha yüksek performans elde etmek için ince taneli mutex modeli kullanmaktadır.