Кау влаштована ios
Все в курсі, що мобільні девайси Apple працюють під управлінням iOS. Багато хто знає, що iOS є полегшеною версією настільної Mac OS X. Деякі здогадуються, що в основі Mac OS X лежить POSIX-сумісна ОС Darwin, а ті, хто серйозно цікавиться IT, в курсі, що основа Darwin - це ядро XNU, що з'явилося на світло в результаті злиття мікроядра Mach і компонентів ядра FreeBSD. Однак все це голі факти, які нічого не скажуть нам про те, як же насправді працює iOS і в чому її відмінності від настільного побратима.
Операційна система, встановлена сьогодні на все маки і (в зміненому вигляді) на айдевайси, веде свою історію аж з 1988 року, який в світі IT відомий також тим, що став роком випуску першої бета-версії операційної системи NeXTSTEP. Сама NeXTSTEP була дітищем команди розробників Стіва Джобса, який на той час уже покинув Apple і заснував компанію NeXT, яка зайнялася розробкою комп'ютерів для освітніх потреб.
У момент своєї появи на світло NeXTSTEP була воістину передовою операційною системою, яка включала в себе безліч технологічних новацій. В основі ОС лежало модифіковане микроядро Mach, доповнене компонентами ядра FreeBSD, включаючи еталонну реалізацію мережевого стека. Більш високорівневі компоненти NeXTSTEP були написані з використанням мови Objective-C і надавали розробникам додатків багатий об'єктно-орієнтована API. Система була забезпечена розвиненим і вельми зручним графічним інтерфейсом (ключові компоненти якого збереглися в OS X і навіть iOS) і потужною середовищем розробки, яка включала в себе в тому числі відомий всім сучасним розробникам візуальний дизайнер інтерфейсу.

XNU і Darwin
Умовно начинку OS X / iOS можна розділити на три логічних рівня: ядро XNU, шар сумісності зі стандартом POSIX (плюс різні системні демони / сервіси) і шар NeXTSTEP, який реалізує графічний стек, фреймворк і API додатків. Darwin включає в себе перші два шари і поширюється вільно, але тільки у версії для OS X. iOS-варіант, портований на архітектуру ARM і включає в себе деякі доопрацювання, повністю закритий і поширюється тільки в складі прошивок для айдевайсов (судячи з усього, це захист від портирования iOS на інші пристрої).
За своєю суттю Darwin - це «гола» UNIX-подібна ОС, яка включає в себе POSIX API, шелл, набір команд і сервісів, мінімально необхідних для роботи системи в режимі консолі і запуску UNIX-софта. У цьому сенсі вона схожа на базову систему FreeBSD або мінімальну установку якогось Arch Linux, які дозволяють запустити консольний UNIX-софт, але не мають ні графічної оболонки, ні всього необхідного для запуску серйозних графічних додатків з середовищ GNOME або KDE.
Ключовий компонент Darwin - гібридне ядро XNU, засноване, як уже було сказано вище, на ядрі Mach і компонентах ядра FreeBSD, таких як планувальник процесів, мережевий стек і віртуальна файлова система (шар VFS). На відміну від Mach і FreeBSD, ядро OS X використовує власний API драйверів, названий I / O Kit і дозволяє писати драйвери на C ++, використовуючи об'єктно-орієнтований підхід, сильно спрощує розробку.
iOS використовує кілька змінену версію XNU, проте в силу того, що ядро iOS закрито, сказати, що саме змінила Apple, важко. Відомо тільки, що воно зібрано з іншими опціями компілятора і модифікованим менеджером пам'яті, який враховує невеликі обсяги оперативки в мобільних пристроях. У всьому іншому це все той же XNU, яке можна знайти у вигляді зашифрованого кеша (ядро + всі драйвери / модулі) в каталозі /System/Library/Caches/com.apple.kernelcaches/kernelcache на самому пристрої.
Рівнем вище ядра в Darwin розташовується шар UNIX / BSD, що включає в себе набір стандартних бібліотек мови Сі (libc, libmatch, libpthread і так далі), а також інструменти командного рядка, набір Шелл (bash, tcsh і ksh) і демонів, таких як launchd і стандартний SSH-сервер. Останній, до речі, можна активувати шляхом правки файлу /System/Library/LaunchDaemons/ssh.plist. Якщо, звичайно, джейлбрейкнути девайс.
На цьому відкрита частина ОС під назвою Darwin закінчується, і починається шар фреймворків, які як раз і утворюють те, що ми звикли вважати OS X / iOS.


фреймворки
Darwin реалізує лише базову частину Mac OS / iOS, яка відповідає тільки за низькорівневі функції (драйвери, запуск / зупинка системи, управління мережею, ізоляція додатків і так далі). Та частина системи, яку видно користувачеві і додатків, в його склад не входить і реалізована в так званих фреймворків - наборах бібліотек і сервісів, які відповідають в тому числі за формування графічного оточення і високорівнева API для сторонніх і стічних додатків
Як і в багатьох інших ОС, API Mac OS і iOS розділений на публічний і приватний. Стороннім додаткам доступний виключно публічний і сильно урізаний API, проте jailbreak-додатки можуть використовувати і приватний.
Всі стандартні системні фреймворки можна знайти в системному каталозі / System / Library / Frameworks /. Кожен з них знаходиться в своєму власному каталозі, званому бандлом (boundle), який включає в себе ресурси (зображення і опис елементів інтерфейсу), Хідер мови сі, що описують API, а також динамічно завантажується бібліотеки (в форматі dylib) з реалізацією фреймворка.
Одна з цікавих особливостей фреймворків - їх версійність. Один фреймворк може мати відразу кілька різних версій, тому додаток, розроблене для застарілих версій системи, буде продовжувати працювати, навіть незважаючи на зміни, внесені в нові версії ОС. Саме так реалізований механізм запуску старих iOS-додатків в iOS 7 і вище. Додаток, розроблене для iOS 6, буде виглядати і працювати саме так, як якщо б воно було запущено в iOS 6.
SpringBoard
Рівнем вище знаходяться додатки, системні і встановлюються з магазину додатків. Центральне місце серед них займає, звичайно ж, SpringBoard (тільки в iOS), що реалізує домашній екран (робочий стіл). Саме воно запускається першим після старту системних демонів, завантаження в пам'ять фреймворків і старту дисплейного сервера (він же менеджер композітінга, він же Quartz Compositor), що відповідає за виведення зображення на екран.
SpringBoard - це сполучна ланка між операційною системою і її користувачем, графічний інтерфейс, що дозволяє запускати додатки, перемикатися між ними, переглядати повідомлення та керувати деякими настройками системи (починаючи з iOS 7). Але також це і обробник подій, таких як дотик екрану або переворот пристрою. На відміну від Mac OS X, яка використовує різні додатки і демони-агенти для реалізації компонентів інтерфейсу (Finder, Dashboard, LaunchPad і інші), в iOS майже всі базові можливості інтерфейсу користувача, в тому числі екран блокування і «шторка», укладені в одному SpringBoard.
На відміну від інших стічних додатків iOS, які розташовуються в каталозі / Applications, SpringBoard нарівні з дисплейним сервером вважається частиною фреймворків і розташовується в каталозі / System / Library / CoreServices /. Для виконання багатьох завдань він використовує плагіни, які лежать в / System / Library / SpringBoardPlugins /. Крім усього іншого, там можна знайти, наприклад, NowPlayingArtLockScreen.lockboundle, що відповідає за відображення інформації про програється композиції на екрані блокування, або IncomingCall.serviceboundle, відповідальний за обробку вхідного дзвінка.
Починаючи з iOS 6 SpringBoard розділений на дві частини: сам робочий стіл і сервіс BackBoard, відповідальний за комунікації з низкоуровневой частиною ОС, що працює з обладнанням (рівень HAL). BackBoard відповідає за обробку таких подій, як торкання екрану, натискання клавіш, отримання свідчення акселерометра, датчика положення і датчика освітленості, а також управляє запуском, припиненням і завершенням додатків.
SpringBoard і BackBoard мають настільки велике значення для iOS, що, якщо будь-яким чином їх зупинити, вся система застигне на місці і навіть запущене в даний момент програма не буде реагувати на торкання екрану. Це відрізняє їх від домашнього екрану Android, який є всього лише стандартним додатком, яке можна зупинити, замінити або взагалі видалити з системи (в цьому випадку на екрані залишаться цілком робочі кнопки навігації і рядок стану з «шторкою»).
додатки
На самій вершині цієї піраміди знаходяться додатки. iOS розрізняє вбудовані (стокові) високо привілейовані додатки і сторонні, що встановлюються з iTunes. І ті й інші зберігаються в системі у вигляді бандлів, багато в чому схожих на ті, що використовуються для фреймворків. Різниця полягає лише в тому, що бандл додатки включає в себе дещо іншу метаінформацію, а місце динамічної бібліотеки займає виконуваний файл у форматі Mach-O.
Стандартний каталог зберігання стічних додатків - / Applications /. В iOS він абсолютно статичний і змінюється тільки під час оновлень системи; користувач отримати до нього доступ не може. Сторонні додатки, що встановлюються з iTunes, навпаки, зберігаються в домашньому каталозі користувача / var / mobile / Applications / всередині підкаталогів, що мають вид 4-2-2-2-4, де два і чотири - це шістнадцяткові числа. Це так званий GUID - унікальний ідентифікатор, який однозначно ідентифікує додаток в системі і потрібен в тому числі для створення ізольованої пісочниці (sandbox).
В iOS пісочниці використовуються для ізолювання сервісів і додатків від системи і один від одного. Кожне стороннє додаток і більшість системних працюють в пісочниці. З технічної точки зору пісочниця являє собою класичний для світу UNIX chroot, посилений системою примусового контролю доступу TrustedBSD MAC (модуль ядра sandbox.kext), яка відрізає додатків не тільки доступ до файлів за межами домашнього каталогу, але і прямий доступ до заліза і багатьом системним функцій ОС.
В цілому укладену в sandbox додаток обмежена в наступних можливостях:
- Доступ до файлової системи за винятком свого власного каталогу і домашнього каталогу користувача.
- Доступ до каталогів Media і Library всередині домашнього каталогу за винятком Media / DCIM /, Media / Photos /, Library / AddressBook /, Library / Keyboard / і Library / Preferences /.
- Доступ до інформації про інших процесах (додаток «вважає» себе єдиним в системі).
- Прямий доступ до заліза (дозволено використовувати тільки Cocoa API і інші фреймворки).
- Обмеження на використання оперативної пам'яті (контролюється механізмом Jatsam).
Всі ці обмеження відповідають sandbox-профілем (набору обмежуючих правил) container і застосовуються до будь-якого стороннього додатком. Для стічних додатків, в свою чергу, можуть застосовуватися інші обмеження, більш м'які або жорсткі. Як приклад можна привести поштовий клієнт (профіль MobileMail), який в цілому має такі ж серйозні обмеження, як і сторонні додатки, але може отримати доступ до всього вмісту каталогу Library /. Зворотна ситуація - SpringBoard, взагалі не має обмежень.
багатозадачність
Одна з найбільш спірних особливостей iOS - це реалізація багатозадачності. Вона начебто і є, а з іншого боку, її немає. У порівнянні з традиційними настільними ОС і горезвісним Android iOS не є багатозадачного операційною системою в звичному сенсі цього слова і не дозволяє додаткам вільно працювати в фоні. Замість цього ОС реалізує API, який додаток може використовувати для виконання окремих завдань, поки воно знаходиться в фоновому режимі.
Вперше такий API з'явився в iOS 4 (до цього фонові завдання могли виконувати тільки стокові додатки) і нарощувався в міру розвитку операційної системи. Сьогодні (мова йде про iOS 7) так званий Background API дозволяє робити наступне:
- програвати аудіо;
- здійснювати VoIP-дзвінки;
- отримувати інформацію про зміну місця розташування;
- отримувати push-повідомлення;
- планувати відкладений висновок повідомлень;
- запитувати додатковий час для завершення роботи після переходу в фоновий режим;
- обмінюватися даними з підключеними до девайсу аксесуарами (в тому числі Bluetooth);
- отримувати і відправляти дані по мережі (починаючи з iOS 7).
Варто сказати, що за час свого розвитку і подальшого переїзду в мобільні девайси NeXTSTEP не тільки не втратила всі свої достоїнства, але і примножила їх. Можна довго слухати вигадки співробітників Google, які запевняють, що Android розроблявся без оглядки на iOS, але факт залишається фактом: багато архітектурні рішення Android запозичив саме у iOS. І не тому, що так було простіше, а завдяки їх красі і ефективності.
Шість стадій завантаження iOS
- Boot ROM. Після включення пристрою першим запускається мінімалістичний завантажувач, прошитий в постійну пам'ять пристрою. Його завдання - зробити початкову ініціалізацію заліза і передати управління первинного завантажувачу LLB. Boot ROM завжди має заводську прошивку і не може бути оновлений.
- Low Level Bootloader (LLB). Далі управління отримує LLB. Це первинний завантажувач, завдання якого - знайти в пам'яті пристрою iBoot, перевірити його цілісність і передати йому управління або переключити девайс в режим відновлення, якщо це не вдалося. Код LLB зберігається в NAND-пам'яті пристрою і оновлюється разом з установкою нової версії прошивки. Крім усього іншого, він виводить на екран завантажувальний логотип.
- iBoot. Це вторинний і основний завантажувач айдевайсов. Він включає в себе драйвер файлової системи, за допомогою якого отримує доступ до вмісту NAND-пам'яті, знаходить ядро і передає йому управління. У iBoot також вбудований драйвер UART, за допомогою якого можна виробляти налагодження ядра і ОС, підключивши девайс до COM-порту або USB-порту комп'ютера (за допомогою кабелю USB - UART).
4 Ядро. Тут все як завжди. Ядро виконує ініціалізацію обладнання, після чого передає управління демона launchd.
5 Launchd. Це первинний процес iOS і Mac OS X, він підключає файлові системи, запускає демони / служби (наприклад, backupd, configd, locationd), дисплейний сервер, фреймворки, а на останньому етапі завантаження віддає управління SpringBoard. В iOS і Mac OS X launchd використовується як заміна стандартного / bin / init в UNIX, проте його функціональність набагато ширше.
6 SpringBoard. Ось і екран блокування!

Покажи цю статтю друзям: