XNU

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
XNU kernel
OS X Logo.png
Розробник(и) Apple Inc.
Операційна система Darwin & Mac OS X
Тип Kernel
Ліцензія Apple Public Source License 2.0
Сайт http://kernel.macosforge.org/

XNUядро операційної системи, розроблене компанією Apple Inc. задля використання у Mac OS X і анонсоване як вільне та відкрите програмне забезпечення, як частина операційної системи Darwin. XNU є акронімом для X is Not Unix[1]

На початку розроблене компанією 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 є гібридом, суміщаючи в собі переваги як монолітних ядер так і мікроядер, намагаючись використати якнайкраще обидві технології, такі як можливості передачі повідомлень мікроядер, властивість більшої модульности і вигідне винесення значніших порцій ОС з захищеної пам*яти, разом з тим зберігаючи швидкість монолітних ядер для важливих критичних задач.

Зараз, XNU може виконуватись на ARM, x86, x86-64 та PowerPC архітектурах, як на однопроцесорних, машинах, так і на багатопроцесорних, використовуючи SMP.

Mach[ред.ред. код]

Центр ядра XNU, Mach початково задумувалося як просте мікроядро. Так, воно могло запускати центр ОС як окремі процеси, що надавало велику гнучкість системі (можна було запустити декілька ОС паралельно, над серцевиною у вигляді Mach), але часто це зменшувало швидкодію через споживання часу на перемикання контексту між рівнем ядра і користувача, та надлишковий стеммінг від картування та копіювання повідомлень між адресним простором мікроядра і того, що належав службовим демонам. В Mac OS X, розробники намагалися пришвидчити виконання важливих задач, тому вбудували функціональність BSD разом з Mach в нове ядро системи. Результат — комбінація Mach і класичного BSD ядра, зі своїми перевагами і недоліками від обох з них.

Mach забезпечив нове ядро потоками, процесами, преемптивною багатозадачністю, передачею повідомлень (використовуючи IPC — міжпроцесну взаємодію), захищену пам*ять, керування віртуальною пам*яттю, добру підтримку реального часу, підтримку зневадження ядра, і консольні введення/виведення (I/O). Mach компонент також дозволив операційній системі розміщати двійкову інформацію для декількох різних архітектур процесорів в одному файлі (таких як x86 та PowerPC) належно до їхнього використання Mach-O двійкового формату.

BSD[ред.ред. код]

Частина ядра 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[ред.ред. код]

I/O Kit є структурою драйверів периферії, написана мовою C++. Використовуючи його об'єктно-орієнтований дизайн, звичайні здібності до будь-якого класу драйверів уведена самою структурою, допомагаючи драйверам периферії бути швидше написаними, та використавши менше коду. I/O Kit є багатопоточним (multi-threaded), Symmetric multiprocessing (SMP)-safe, і допустима для «hot pluggable» пристроїв та автоматичної, динамічної конфігурації периферії.

Багато драйверів можуть бути написані для виконання їх з простору користувача (user-space), що ще збільшує стабільність системи: якщо драйвер простору користувача падає — це не валяє ядра.

Захист роздільних ресурсів[ред.ред. код]

Задля безпечного запуску мультипроцесорних машин, доступ до роздільних ресурсів (файли, структура данних тощо) повинен бути серіалізованим, тобто щоб різні процеси не мали змоги модифікувати один і той же ресурс одночасно. Atomic operations, spinlocks, critical sections, Mutual exclusions («mutexes») та серіалізація — можливі методи, що можуть бути використані для запобігання одночасного доступу. Подібно до Linux та FreeBSD 5, XNU, як і більшість Mac OS X 10.4 та Darwin 8.0, використовує mutex-модель задля досягнення високої роботи мультипроцесорної системи.

Примітки[ред.ред. код]

  1. «Porting UNIX/Linux Applications to Mac OS X: Glossary». Apple Computer. 2005. Процитовано 2005-12-13. 

Посилання[ред.ред. код]