Sari la conținut

XNU

De la Wikipedia, enciclopedia liberă
XNU

The XNU kernel
DezvoltatorApple Inc.
Programat înC, C++, Assembly
Familie SOUnix-like, Unix
StareActual
Model surseSoftware cu sursă deschisă
Dată lansare inițialădecembrie 1996; acum 29 ani (1996-12)
Repozitorgithub.com/apple-oss-distributions/xnu Modificați la Wikidata
Platforme suportatex86-64, 64-bit ARM⁠(d), 32-bit ARM (32-bit ARM software proprietar)
Historical: PowerPC (32-bit and 64-bit), IA-32⁠(d)
Tip de nucleuHybrid
InfluențeMach
FreeBSD
OpenBSD
BSD
MkLinux
Tru64 UNIX[*]  Modificați la Wikidata
LicențăApple Public Source License⁠(d) 2.0
Prezență online
github.com/apple-oss-distributions/xnu

XNU („X is Not Unix”) reprezintă nucleul sistemului de operare (OS) dezvoltat de Apple începând din decembrie 1996 pentru Mac OS X, devenit macOS. A fost lansat ca software liber și open-source prin proiectul Darwin, care constituie fundația pentru macOS și pentru sistemele iOS, iPadOS, watchOS, visionOS și tvOS.[1]

XNU a fost creat inițial de NeXT pentru sistemul NeXTSTEP. Kernelul era unul hibrid, derivat din Mach 2.5 realizat la Carnegie Mellon University, combinând componentele principale ale nucleului 4.3BSD modificate pentru a rula peste mecanismele Mach, la care se adăuga o interfață de programare a aplicațiilor (API) în Objective-C pentru dezvoltarea driverelor, numit DriverKit.[2]

După achiziția NeXT de către Apple, kernelul a actualizat cu componente suplimentare provenite din OSF MK 7.3 al OSF [1] și din proiectul FreeBSD. DriverKit a fost înlocuit cu un API nou, realizat într-un subset limitat de C++,[3] bazat pe Embedded C++ [4], denumit IOKit.

Prin păstrarea nucleului BSD ca a treia componentă a XNU,[5] XNU a devenit bazat pe UNIX odată cu obținerea de către macOS a certificării UNIX conform Single UNIX Specification (SUS) oferită de The Open Group.[6] Cu toate acestea, Apple a păstrat denumirea originală „XNU”, care provine din „X is Not Unix”, o rămășiță din perioada NeXTSTEP, de dinainte ca macOS să fie certificat UNIX. Această situație a generat confuzii, deoarece numele sugerează că XNU ar fi separat de UNIX, deși macOS, ca sistem complet, este recunoscut oficial ca sistem de operare UNIX.[7]

Proiectarea nucleului

[modificare | modificare sursă]

XNU funcționează ca un kernel hibrid, combinând trăsături ale nucleelor monolitice cu cele ale microkernelurilor. Abordarea încearcă să folosească avantajele ambelor modele: mecanismele de transmitere a mesajelor din microkerneli, care cresc modularitatea și extind protecția memoriei, și performanța nucleelor monolitice, esențială pentru operațiile critice.

Începând cu 2021, XNU funcționează pe arhitecturi ARM64 și x86-64, atât pe sisteme cu un singur procesor, cât și pe configurații SMP. Compatibilitatea cu PowerPC a fost abandonată odată cu Mac OS X Snow Leopard, suportul pentru IA-32 a dispărut în Mac OS X Lion, iar cel pentru ARM pe 32 de biți a fost înlăturat în iOS 11.

Baza nucleului XNU este un kernel Mach al Open Software Foundation (OSF MK) 7.3, puternic modificat într-o formă hibridă.[8] OSF MK 7.3 este un microkernel[9] care include cod apicabil din kernelul Mach 4 al Universității din Utah și din numeroasele variante Mach 3.0 derivate din microkernelul original Mach 3.0 de la Carnegie Mellon University.

OSF MK 7.3 poate rula componentele centrale ale unui sistem de operare ca procese separate, oferind flexibilitate (de exemplu, ar putea rula mai multe sisteme de operare în paralel peste nucleul Mach). Totuși, această abordare poate reduce performanța,[10] din cauza comutărilor frecvente între modul kernel și modul utilizator și a costurilor suplimentare generate de maparea sau copierea mesajelor între spațiul de adrese al nucleului și cel al serviciilor daemon.

Apple a licențiat OSF MK 7.3 de la OSF și a încercat să simplifice anumite funcții integrând componente BSD direct în nucleu, alături de codul Mach. Rezultatul este un kernel OSF MK 7.3 puternic modificat, de tip hibrid.

Componenta BSD a nucleului oferă interfața POSIX (API, apeluri de sistem BSD), modelul de procese Unix construit peste sarcinile Mach, politicile de securitate de bază, identificatorii de utilizatori și grupuri, permisiunile, stiva de protocoale de rețea, codul pentru sistemul de fișiere virtual (inclusiv un strat de jurnalizare independent de sistemul de fișiere), mai multe sisteme de fișiere locale precum HFS, HFS+ și APFS, clientul și serverul NFS, cadrul criptografic, mecanismele UNIX System V IPC, subsistemul de audit, controlul de acces obligatoriu și unele dintre primitivele de sincronizare (prin blocare).[11] Codul BSD din XNU a fost sincronizat cel mai recent cu cel din kernelul FreeBSD. Deși multe componente au fost modificate semnificativ, schimbul de cod între Apple și proiectul FreeBSD continua și în 2009.[12]

În Mac OS X Snow Leopard, v10.6 (Darwin 10), XNU există în două variante: o versiune pe 32 de biți, numită K32, și una pe 64 de biți, numită K64.[13] K32 poate rula aplicații pe 64 de biți în spațiul de utilizator.[14] Nou în Mac OS X 10.6 era faptul că XNU putea rula și în spațiul de kernel pe 64 de biți (K64). K32 era kernelul implicit pe majoritatea sistemelor care rulau 10.6 Server, cu excepția unor modele precum Xserve și anumite versiuni de Mac Pro din 2008 și ulterior, unde K64 pornea implicit,[15] și poate rula aplicații pe 64 de biți. K64 are mai multe avantaje față de K32:[16]

  • Poate gestiona mai mult de 32 GB RAM, deoarece harta de memorie ar ocupa o parte disproporționat de mare din spațiul de kernel pe 32 de biți.
  • Dimensiunile bufferelor de cache pot depăși limitele impuse de kernelul pe 32 de biți, ceea ce poate îmbunătăți performanța I/O.
  • Performanța crește la utilizarea dispozitivelor de rețea de mare viteză sau a mai multor GPU-uri, deoarece kernelul poate mapa toate aceste dispozitive în spațiul pe 64 de biți, chiar dacă unele folosesc buffere DMA foarte mari.

Pornirea sistemului cu tastele 6 și 4 apăsate forțează încărcarea kernelului K64 pe computerele care suportă kerneluri pe 64 de biți [1]. K64 poate rula aplicații pe 32 de biți, dar nu poate încărca extensii de kernel (KEXT) pe 32 de biți, care trebuie portate la K64 pentru a putea fi utilizate.

XNU din OS X Mountain Lion (10.8) și versiunile ulterioare oferă doar un kernel pe 64 de biți.

IOKit reprezintă infrastructura pentru drivere, scris într-un subset de C++ bazat pe Embedded C++.[17] Prin designul său orientat pe obiecte, cadrul oferă funcții comune pentru fiecare clasă de driver, reducând timpul și volumul de cod necesar dezvoltării. IOKit este multi-threaded, sigur pentru sisteme cu multiprocesare simetrică (SMP) și permite utilizarea dispozitivelor conectate la cald, precum și configurarea automată și dinamică a acestora.

Multe drivere pot fi scrise să ruleze în modul utilizator, ceea ce crește stabilitatea sistemului. Dacă un driver din modul utilizator se blochează, nu afectează kernelul. În schimb, blocarea unui driver care rulează în modul kernel va duce la blocarea kernelului. Exemple de drivere care rulează în modul kernel includ drivere pentru adaptoare de disc și rețea, drivere grafice, drivere pentru controlere USB și FireWire și drivere folosite de software de mașini virtuale precum VirtualBox, Parallels Desktop for Mac și VMware Fusion. În macOS Catalina și versiunile ulterioare, DriverKit permite ca unele dintre aceste tipuri de drivere să ruleze în modul utilizator.[18]

  1. „Porting UNIX/Linux Applications to Mac OS X: Glossary”. Apple Computer. . Accesat în .
  2. apple/darwin-xnu, Apple, , accesat în
  3. „The libkern C++ Runtime”. developer.apple.com. Accesat în .
  4. Singh, Amit. „XNU: The Kernel”. osxbook.com. Accesat în .
  5. „How Mac OS X Works” (în engleză). HowStuffWorks. . Accesat în .
  6. McKay, Dave (). „Is macOS UNIX? (and What Does That Mean?)” (în engleză). How-To Geek. Accesat în .
  7. „Open Brand”. www.opengroup.org. Accesat în .
  8. „Apple WWDC 2000 Session 106 - Mac OS X: Kernel | Ghostarchive”. ghostarchive.org. Accesat în .
  9. „Wayback Machine” (PDF). pdfs.semanticscholar.org. Arhivat din original (PDF) la . Accesat în .
  10. Douglas M. Wells. „A Trusted, Scalable, Real-Time Operating System Environmen” (PDF). Open Software Foundation Research Institute.
  11. Watson, Robert (). „freebsd-advocacy Digest, Vol 248, Issue 1”. Accesat în .
  12. „FreeBSD Quarterly Status Report”. www.freebsd.org. Accesat în .
  13. Siracusa, John (). „Mac OS X 10.6 Snow Leopard: the Ars Technica review” (în engleză). Ars Technica. Accesat în .
  14. Siracusa, John (). „Mac OS X 10.6 Snow Leopard: the Ars Technica review” (în engleză). Ars Technica. Accesat în .
  15. Siracusa, John (). „Mac OS X 10.6 Snow Leopard: the Ars Technica review” (în engleză). Ars Technica. Accesat în .
  16. „OS X Snow Leopard v10.6”. developer.apple.com. Accesat în .
  17. Singh, Amit. „XNU: The Kernel”. osxbook.com. Accesat în .
  18. „DriverKit” (în engleză). Apple Developer Documentation. Accesat în .

Legături externe

[modificare | modificare sursă]