XNU
![]() | |
Тип | ядро операційної системи: гібрид |
---|---|
Розробник | Apple Inc. |
Версії | 1228 (30 жовтня 2007)[1] і 8796.101.5 (14 червня 2023)[2] |
Операційна система | Darwin & Mac OS X |
Мова програмування | C++ і C |
Стан розробки | In production / development |
Ліцензія | Apple Public Source License 2.0 |
Репозиторій | github.com/apple-oss-distributions/xnu |
Вебсайт | kernel.macosforge.org |
XNU — ядро операційної системи, розроблене компанією Apple Inc. задля використання у macOS і анонсоване як вільне та відкрите програмне забезпечення, як частина операційної системи Darwin. XNU є акронімом для X is Not Unix[3]
На початку розроблене компанією NeXT для операційної системи NEXTSTEP, XNU було гібридним ядром, сумістивши версію 2.5 Mach-ядра, розробленого у Carnegie Mellon University, із компонентами 4.3 BSD і об'єктно-орієнтованого API для запису драйверів, назване Driver Kit.
Опісля придбання компанією Apple компанії NeXT, Mach-компонент був оновлений до версії 3.0, BSD-компоненти були оновлені кодом із проекту FreeBSD, а Driver Kit був замінений C++ API для запису драйверів I/O Kit.
Як і деякі інші сучасні ядра, XNU є гібридом, суміщаючи в собі переваги як монолітних ядер так і мікроядер, намагаючись використати якнайкраще обидві технології, такі як можливості передачі повідомлень мікроядер, властивість більшої модульности і вигідне винесення значніших порцій ОС з захищеної пам*яти, разом з тим зберігаючи швидкість монолітних ядер для важливих критичних задач.
Станом на 2023 рік основною процесорною архітектурою для XNU є Aarch64[en] (64-розрядна версія ARM). До повного переходу фірми Apple на мікропроцесори власного дизайну також розвивався варіант для x86-64. Ранні версії підтримували також PowerPC.[джерело?]
Центр ядра XNU, Mach початково задумувалося як просте мікроядро. Так, воно могло запускати центр ОС як окремі процеси, що надавало велику гнучкість системі (можна було запустити декілька ОС паралельно, над серцевиною у вигляді Mach), але часто це зменшувало швидкодію через споживання часу на перемикання контексту між рівнем ядра і користувача, та надлишковий стеммінг від картування та копіювання повідомлень між адресним простором мікроядра і того, що належав службовим демонам. В Mac OS X, розробники намагалися пришвидчити виконання важливих задач, тому вбудували функціональність BSD разом з Mach в нове ядро системи. Результат — комбінація Mach і класичного BSD ядра, зі своїми перевагами і недоліками від обох з них.
Mach забезпечив нове ядро потоками, процесами, витискальною багатозадачністю, передачею повідомлень (використовуючи IPC — міжпроцесну взаємодію), захищену пам'ять, керування віртуальною пам'яттю, добру підтримку реального часу, підтримку зневадження ядра, і консольний ввід/вивід). Mach компонент також дозволив операційній системі розміщати двійкову інформацію для декількох різних архітектур процесорів в одному файлі (таких як x86 та PowerPC) належно до їхнього використання Mach-O двійкового формату.
Частина ядра Berkeley Software Distribution (BSD), забезпечила POSIX API (системні виклики BSD), Unix модель процесів над Mach задачами, основні політики безпеки, id користувачів та груп, дозволи, мережевий стек, код віртуальної файлової системи (включно з файловосистемнонезалежним журналюючим шаром), мережеву файлову систему (NFS), криптографічне середовище, систему міжпроцесної вза��модії з на базі UNIX System V IPC, підсистему аудиту (Audit Subsystem), Mandatory Access Control, та деякі блокуючі примітиви. BSD код представлений в XNU прийшов з FreeBSD ядра. Хоча більшість його була значно змінена, підтримка коду і досі трапляється між проєктами Apple та FreeBSD.
I/O Kit є структурою драйверів периферії, написана мовою C++. Використовуючи його об'єктно-орієнтований дизайн, звичайні здібності до будь-якого класу драйверів уведена самою структурою, допомагаючи драйверам периферії бути швидше написаними, та використавши менше коду. I/O Kit є багатопоточним (multi-threaded), пристосованим для симетричного мультипроцесування (SMP), дозволяє «гаряче» під'єднання і від'єднання пристроїв та автоматичну і динамічну конфігурацію периферії.
Багато драйверів можуть бути написані для виконання їх з простору користувача (user-space), що ще збільшує стабільність системи: якщо драйвер простору користувача аварійно завершується, це не спричиняє паніку ядра.
Задля безпечного запуску мультипроцесорних машин, доступ до роздільних ресурсів (файли, структура даних тощо) повинен бути серіалізованим, тобто щоб різні процеси не мали змоги модифікувати один і той же ресурс одночасно. Atomic operations, spinlocks, critical sections, Mutual exclusions («mutexes») та серіалізація — можливі методи, що можуть бути використані для запобігання одночасного доступу. Подібно до Linux та FreeBSD 5, XNU, як і більшість Mac OS X 10.4 та Darwin 8.0, використовує mutex-модель задля досягнення високої роботи мультипроцесорної системи.
- ↑ Release 1228 — 2007.
- ↑ xnu-8796.101.5 — 2023.
- ↑ Porting UNIX/Linux Applications to Mac OS X: Glossary. Apple Computer. 2005. Архів оригіналу за 13 жовтня 2008. Процитовано 13 грудня 2005.
{{cite web}}
: Недійсний|deadurl=404
(довідка)
- XNU: The Kernel — огляд компонентів XNU на kernelthread.com
- Inside the Mac OS X Kernel [Архівовано 28 січня 2008 у Wayback Machine.]
![]() | Ця стаття містить текст, що не відповідає енциклопедичному стилю. (травень 2010) |