Архітектура ядра

Матеріал з Wiki TNEU
Перейти до: навігація, пошук

Ядро - центральна Частинам операційної системи (ОС), що забезпечує додаткам координований доступ До ресурсів комп'ютера , таким як процесорний Час до , пам'ять , зовнішнє апаратне QA, , зовнішній пристрій введення і виведення інформації. Также обычно ядро предоставляет сервисы файловой системы и сетевых протоколов . Також зазвичай ядро надає сервіси файлової СИСТЕМИ п мережевих протоколів . Як основний елемент ОС, ядро ​​являє собою найбільш низький рівень абстракції для доступу програм до ресурсів системи, необхідних для їх роботи. Як правило, ядро надає такий доступ виконуваним процесам відповідних програм ЗА рахунок використання механізмів взаємодії між процесами п звернення програм До системних викликів ОС. Описана задача може відрізнятися в залежності від типу архітектури ядра і способу її реалізації.

Типи архітектур ядер операційних систем

Монолітне ядро Основна стаття: Монолітне ядро Монолітне ядро ​​надає багатий набір абстракцій обладнання. Всі частини монолітного ядра працюють в одному адресному просторі . Це така схема операційної системи, при якій всі компоненти її ядра є складовими частинами однієї програми, використовують загальні структури даних і взаємодіють один з одним шляхом безпосереднього виклику процедур. Монолітне ядро ​​- найстаріший спосіб організації операційних систем. Прикладом систем з монолітним ядром є більшість UNIX-систем. Переваги: ​​Швидкість роботи, спрощена розробка модулів. Недоліки: Оскільки все ядро працює в одному адресному просторі, збій в одному з компонентів може порушити працездатність всієї системи. Приклади: Традиційні ядра UNIX (такі як BSD ), Linux , ядро MS-DOS , ядро KolibriOS . Деякі старі монолітні ядра, особливо систем класу UNIX / Linux , вимагали перекомпіляції при будь-якій зміні складу обладнання. Більшість сучасних ядер дозволяють під час роботи довантажувати модулі, що виконують частину функцій ядра. У цьому випадку компоненти операційної системи є не самостійними модулями, а складовими частинами однієї великої програми, званої монолітним ядром (монолітне ядро), яке представляє собою набір процедур, кожна з яких може викликати кожну. Всі процедури працюють в привілейованому режимі. Модульне ядро Основна стаття: Модульне ядро Модульне ядро - сучасна, вдосконалена модифікація архітектури монолітних ядер операційних Системам . На відміну від «класичних» монолітних ядер, модульні ядра, як правило, не вимагають повної перекомпіляції ядра при зміні складу апаратного забезпечення комп'ютера. Замість цього модульні ядра надають той чи інший механізм підвантаження модулів ядра, що підтримують ту чи іншу апаратне забезпечення (наприклад, драйверів ). При цьому підвантаження модулів може бути як динамічної (виконуваної «на льоту», без перезавантаження ОС, в працюючій системі), так і статичної (виконуваної при перезавантаженні ОС після переконфігурації системи на завантаження тих чи інших модулів). Мікроядро Основна стаття: Мікроядро Мікроядро надає тільки елементарні функції управління процесами і мінімальний набір абстракцій для роботи з обладнанням.Велику Частинам РОБОТИ З допомогою здійснюється спеціальних користувацьких процесів , званих сервісами. Вирішальним критерієм «микроядерности» є розміщення всіх або майже всіх драйверів та модулів в сервісних процесах, іноді з явною неможливістю завантаження будь-яких модулів розширення у власне мікроядро, а також розробки таких розширень. Переваги: ​​Стійкість до збоїв обладнання, помилкам в компонентах системи.Основна перевага мікроядерної архітектури - висока ступінь модульності ядра операційної системи. Це істотно спрощує додавання до нього нових компонентів. У мікроядерної операційній системі можна, не перериваючи її роботи, завантажувати і вивантажувати нові драйвери, файлові системи і т. д. д. Істотно спрощується процес налагодження компонентів ядра, так як нова версія драйвера може завантажуватися без перезапуску всієї операційної системи. Компоненти ядра операційної системи нічим принципово не відрізняються від призначених для користувача програм, тому для їх налагодження можна застосовувати звичайні засоби. Мікроядерна архітектура підвищує надійність системи, оскільки помилка на рівні непривілейованої програми менш небезпечна, ніж відмова на рівні режиму ядра. Недоліки: Передача даних між процесами вимагає накладних витрат. Класичні мікроядра надають лише дуже невеликий набір низькорівневих примітивів, або системних викликів , що реалізують базові сервіси операційної системи. Сервісні процеси (у прийнятій в сімействі UNIX- термінології - « демони ») активно використовуються в самих різних ОС для задач типу запуску програм за розкладом (UNIX і Windows NT), ведення журналів подій (UNIX і Windows NT), централізованої перевірки паролів і зберігання пароля поточного інтерактивного користувача в спеціально обмеженою області пам'яті (Windows NT). Тим не менш, не слід вважати ОС мікроядерний тільки через використань такої архітектури.

Приклади: Symbian OS , Windows CE , OpenVMS , Маха , який використовується в GNU / Hurd і Mac OS X , QNX , AIX ; Minix ; ChorusOS ; AmigaOS , MorphOS . Екзоядро Основна стаття: Екзоядро Екзоядро - ядро ​​операційної системи, що надає лише функції для взаємодії між процесами, безпечного виділення та звільнення ресурсів. Передбачається, що API для прикладних програм будуть надаватися зовнішніми по відношенню до ядра бібліотеками (звідки і назва архітектури). Можливість доступу до пристроїв на рівні контролерів дозволить ефективніше вирішувати деякі завдання, які погано вписуються в рамки універсальної ОС, наприклад, реалізація СУБД буде мати доступ До диску На рівні секторів диска , а не файлів п кластерів , що позитивно позначиться на швидкодії. Наноядро Основна стаття: Наноядро Наноядро - архітектура ядра операційної системи, в рамках якої вкрай спрощене та мінімалістичне ядро ​​виконує лише одне завдання - обробку апаратних переривань, що генеруються пристроями комп'ютера. Після обробки переривань від апаратури наноядро, в свою чергу, посилає інформацію про результати обробки (наприклад, отримані з клавіатури символи) вищележачому програмного забезпечення за допомогою того ж механізму переривань. Прикладом є KeyKOS - найперша ОС на наноядре. Первая версия вышла ещё в 1983-м году. Перша версія вийшла ще в 1983-му році. Гібридне ядро Основна стаття: Гібридне ядро Гібридні ядра - це модифіковані мікроядра, що дозволяють для прискорення роботи запускати «несуттєві» частини в просторі ядра. Приклад: ядра ОС Microsoft Windows сімейства NT: Windows NT , Windows 2000 , Windows XP , Windows Vista , Windows 7 .


Комбінація різних підходів Усі розглянуті підходи до побудови операційних систем мають свої переваги і недоліки. У більшості випадків сучасні операційні системи використовують різні комбінації цих підходів. Так, наприклад, зараз ядро «Linux» являє собою монолітну систему З окремими елементами модульного ядра . При компіляції ядра можна дозволити динамічне завантаження і вивантаження дуже багатьох компонентів ядра - так званих модулів. У момент завантаження модуля його код завантажується на рівні системи і зв'язується з іншою частиною ядра. Всередині модуля можуть використовуватися будь-які експортуються ядром функції. Існують варіанти ОС GNU , в яких замість монолітного ядра застосовується ядро Mach (таке ж, як в Hurd), а поверх нього крутяться у просторі ті ж самі процеси, які при використанні Linux були б частиною ядра. Іншим прикладом змішаного підходу може служити можливість запуску операційної системи з монолітним ядром під керуванням мікроядра. Так влаштовані 4.4BSD і MkLinux, засновані на мікроядрі Mach . Мікроядро забезпечує управління віртуальною пам'яттю і роботу низькорівневих драйверів. Всі інші функції, в тому числі взаємодія з прикладними програмами, здійснюються монолітним ядром. Даний підхід сформувався в результаті спроб використовувати переваги мікроядерної архітектури, зберігаючи по можливості добре налагоджений код монолітного ядра. Змішане ядро, в принципі, повинно об'єднувати переваги монолітного ядра і мікроядра: здавалося б, мікроядро і монолітне ядро ​​- крайнощі, а змішане - золота середина. У них можливо додавати драйвери пристроїв двома способами: і всередину ядра, і в користувальницьке простір.Але на практиці концепція змішаного ядра часто підкреслює не тільки гідності, а й недоліки обох типів ядер. Приклади: Windows NT , DragonFly BSD . Ядро Linux — ядро UNIX-подібної операційної системи. Розповсюджується під ліцензією GNU General Public License (GPL), і розробляється людьми з усього світу, що дозволило йому стати одним із найвидатніших прикладів відкритого програмного забезпечення[4]. Ядро Linux підтримує багатозадачність, віртуальну пам'ять, динамічні бібліотеки, відкладене завантаження, продуктивну систему управління пам'яттю і багато мережних протоколів. На сьогоднішній день Linux — монолітне ядро з підтримкою завантажуваних модулів. Драйвери пристроїв і розширення ядра зазвичай запускаються на «кільці 0», з повним доступом до устаткування. На відміну від звичайних монолітних ядер, драйвери пристроїв легко збираються у вигляді модулів і завантажуються або вивантажуються під час роботи системи. Те, що архітектура Linux не є мікроядерною, викликало дебати між Лінусом Торвальдсом і Ендрю Таненбаумом в конференції comp.os.minix(англ.) в 1992 р. Операційну систему можна умовно розділити на два рівні. На верхньому рівні розташований користувацький простір (простір виконування прикладних програм). Тут виконуються застосунки користувача. Під призначеним для користувача простором розташовується простір ядра. Тут функціонує ядро Linux. Є також бібліотека GNU C (glibc). Вона надає інтерфейс системних викликів, який забезпечує зв'язок з ядром і дає механізм для переходу від програми, що працює в просторі користувача, до ядра. Це важливо, оскільки ядро і програма користувача розташовуються в різних захищених адресних просторах. При цьому, тоді як коженпроцес в просторі користувача має свій власний віртуальний адресний простір, ядро займає один загальний адресний простір. Ядро Linux можна, у свою чергу, розділити на три великі рівні. Вгорі розташовується інтерфейс системних викликів, який реалізує базові функції, наприклад, читання і запис. Нижче за інтерфейс системних викликів розташовується код ядра, точніше кажучи, незалежний код ядра. Цей код є загальним для всіх процесорних архітектур, підтримуваних Linux. Ще нижче розташовується архітектурно-залежний код, що утворює так званий BSP (Board Support Package — пакет підтримки апаратної платформи). Цей код залежить від процесора і платформи для конкретної архітектури. Ядро по суті є диспетчером ресурсів. Незалежно від того, що є керованим ресурсом — процес, пам'ять або апаратний пристрій, — ядро організовує й упорядковує доступ до ресурсу безлічі конкуруючих користувачів (як у просторі ядра, так і в просторі користувача). У ядрі Linux реалізована ціла низка важливих архітектурних елементів. І на найзагальнішому, і на детальніших рівнях ядро можна підрозділити на безліч різних підсистем. З іншого боку, Linux можна розглядати як монолітне ціле, оскільки всі базові сервіси зібрані в ядрі системи. Такий підхід відрізняється від архітектури з мікроядром, коли ядро надає тільки найзагальніші сервіси, такі як обмін інформацією, ввод/вивід, управління пам'яттю і процесами, а конкретніші сервіси реалізуються в модулях, що підключаються до рівня мікроядра. З часом ядро Linux стало ефективнішим з погляду використання пам'яті і процесорних ресурсів і набуло виняткової стабільності. Важливий аспект Linux, враховуючи розмір і складність цієї системи — це її переносимість. Linux можна відкомпілювати для величезної кількості різних процесорів і платформ, що мають різні архітектурні обмеження і потреби. Наприклад, Linux може працювати на процесорі як з блоком управління пам'яттю (MMU), так і без MMU. Підтримка процесорів без MMU реалізована у версії ядра uClinux.

Особисті інструменти
Простори назв

Варіанти
Дії
Навігація
Інструменти